ETH Price: $2,273.58 (-6.07%)
Gas: 1.65 Gwei

Token

ToastFu (TFU)
 

Overview

Max Total Supply

100,000,000 TFU

Holders

95

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
409,671.481095045868227657 TFU

Value
$0.00
0xbc3f236550f19352b1a6962db6b5b8306610531b
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:
ToastFu

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-31
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

/**

Website: https://www.toastfu.com
Telegram: https://t.me/ToastFuPortal
Twitter: https://twitter.com/ToastFuTech
Whitepaper: https://toastfu.gitbook.io/toastfu

*/

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(
        address recipient,
        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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        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) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                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 {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract ToastFu is Context, IERC20, Ownable {
    using Address for address;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 100_000_000 ether;

    //Token Definition.
    string public constant name = "ToastFu";
    string public constant symbol = "TFU";
    uint8 public constant decimals = 18;

    //Definition of Wallets for team.
    address payable public taxWallet =
        payable(0xa3A2d88B0c01F206771268d49a1bDE7EBe893934);

    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;

    //Taxes Definition.
    uint256 public buyFee = 20;
    uint256 public sellFee = 20;

    uint256 public taxTokensCollected = 0;
    uint256 public totalTaxTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 10_000 ether; // 0.01%
    uint256 public maxWallet = 3_000_000 ether; // 3%

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingActive = false;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _tOwned[_msgSender()] = _tTotal;
        address currentRouter;

        if (block.chainid == 11155111) {
            currentRouter = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008; // Sepolia
        } else if (block.chainid == 1) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Mainnet
        } else if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC PCS
        } else {
            revert("Invalid Chain ID");
        }

        //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[taxWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    //ERC 20 Standard increase Allowance
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    //Approve Function
    function _approve(address _owner, address spender, uint256 amount) private {
        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);
    }

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );

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

            if (
                from == uniswapV2Pair && 
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[from] && !_isExcludedFromFee[to]
            ) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }
        }

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;

        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            taxTokensCollected += fee;
            totalTaxTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;
        transferToAddressETH(taxWallet, ethBalance);
        taxTokensCollected = 0;
    }

    //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    function updateFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        require(_buyFee <= 5, "Must keep buy fees at 5% or less");
        require(_sellFee <= 5, "Must keep sell fees at 5% or less");
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function openTrading() external onlyOwner {
        tradingActive = true;
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new tax wallet.
    function setTaxWallet(address _taxWallet) external {
        require(_msgSender() == taxWallet, "Invalid permission");
        require(_taxWallet != address(0), "setTaxWallet: ZERO");
        taxWallet = payable(_taxWallet);
        _isExcludedFromFee[taxWallet] = true;
        emit AuditLog("We have Updated the TaxWallet:", taxWallet);
    }

    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        if (amount == 0) return;
        (bool succ, ) = recipient.call{value: amount}("");
        require(succ, "Transfer failed.");
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(taxWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stock eth from contract.",
            taxWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(taxWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTaxTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526a52b7d2dcc80cd2e4000000600455600580546001600160a01b03191673a3a2d88b0c01f206771268d49a1bde7ebe8939341790556014600681905560075560006008819055600981905569021e19e0c9bab2400000600a556a027b46536c66c8e3000000600b55600c55600d805462ffff0019166101001790553480156200008c57600080fd5b506200009833620003a1565b600454336000908152600160205260408120919091554662aa36a703620000d5575073c532a74256d3db42d0bf7a0400fefdbad76940086200015e565b46600103620000fa5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015e565b466038036200011f57507310ed43c718714eb63d5aa57b78b54704e256024e6200015e565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a590810da185a5b88125160821b604482015260640160405180910390fd5b6000819050806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620003f1565b6001600160a01b031660c0816001600160a01b031681525050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620003f1565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620003f1565b6001600160a01b0390811660a0528116608052600160036000620002ea6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526003909352818320805485166001908117909155600554909116835291208054909216179055620003493390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200039191815260200190565b60405180910390a3505062000423565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200040457600080fd5b81516001600160a01b03811681146200041c57600080fd5b9392505050565b60805160a05160c051611edd6200048460003960006119360152600081816104710152818161152a0152818161167e015281816116de015261175a015260008181610301015281816115660152818161198e01526119ca0152611edd6000f3fe6080604052600436106102345760003560e01c80636db794371161012e578063c49b9a80116100ab578063e6be4a721161006f578063e6be4a72146106ea578063ea2f0b371461070a578063ea414b281461072a578063f2fde38b1461074a578063f8b45b051461076a57600080fd5b8063c49b9a8014610644578063c9567bf914610664578063ce831ed514610679578063d2d7ad831461068e578063dd62ed3e146106a457600080fd5b806395d89b41116100f257806395d89b41146105a0578063a457c2d7146105cf578063a9059cbb146105ef578063b29ad50a1461060f578063bbc0c7421461062457600080fd5b80636db794371461050157806370a0823114610521578063715018a61461055757806385141a771461056c5780638da5cb5b1461058257600080fd5b80632dc0562d116101bc5780634706240211610180578063470624021461044957806349bd5a5e1461045f5780634a74bb02146104935780635342acb4146104b25780635eaa8247146104eb57600080fd5b80632dc0562d146103a0578063313ce567146103c057806339509351146103e7578063437823ec14610407578063461d94761461042957600080fd5b80631694505e116102035780631694505e146102ef57806318160ddd1461033b578063220f66961461035057806323b872dd1461036a5780632b14ca561461038a57600080fd5b8063017836991461024057806302951a001461026957806306fdde031461027f578063095ea7b3146102bf57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061025660085481565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5061025660095481565b34801561028b57600080fd5b506102b260405180604001604052806007815260200166546f617374467560c81b81525081565b6040516102609190611bb3565b3480156102cb57600080fd5b506102df6102da366004611c1d565b610780565b6040519015158152602001610260565b3480156102fb57600080fd5b506103237f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610260565b34801561034757600080fd5b50600454610256565b34801561035c57600080fd5b50600d546102df9060ff1681565b34801561037657600080fd5b506102df610385366004611c47565b610797565b34801561039657600080fd5b5061025660075481565b3480156103ac57600080fd5b50600554610323906001600160a01b031681565b3480156103cc57600080fd5b506103d5601281565b60405160ff9091168152602001610260565b3480156103f357600080fd5b506102df610402366004611c1d565b61084b565b34801561041357600080fd5b50610427610422366004611c83565b610882565b005b34801561043557600080fd5b50610427610444366004611ca5565b610930565b34801561045557600080fd5b5061025660065481565b34801561046b57600080fd5b506103237f000000000000000000000000000000000000000000000000000000000000000081565b34801561049f57600080fd5b50600d546102df90610100900460ff1681565b3480156104be57600080fd5b506102df6104cd366004611c83565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104f757600080fd5b50610256600c5481565b34801561050d57600080fd5b5061042761051c366004611cbe565b610a21565b34801561052d57600080fd5b5061025661053c366004611c83565b6001600160a01b031660009081526001602052604090205490565b34801561056357600080fd5b50610427610ae0565b34801561057857600080fd5b5061032361dead81565b34801561058e57600080fd5b506000546001600160a01b0316610323565b3480156105ac57600080fd5b506102b26040518060400160405280600381526020016254465560e81b81525081565b3480156105db57600080fd5b506102df6105ea366004611c1d565b610af4565b3480156105fb57600080fd5b506102df61060a366004611c1d565b610b2b565b34801561061b57600080fd5b50610427610b38565b34801561063057600080fd5b50600d546102df9062010000900460ff1681565b34801561065057600080fd5b5061042761065f366004611cee565b610b9c565b34801561067057600080fd5b50610427610c43565b34801561068557600080fd5b50610427610c5e565b34801561069a57600080fd5b50610256600a5481565b3480156106b057600080fd5b506102566106bf366004611d0b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106f657600080fd5b50610427610705366004611c1d565b610d7d565b34801561071657600080fd5b50610427610725366004611c83565b610f31565b34801561073657600080fd5b50610427610745366004611c83565b610fc7565b34801561075657600080fd5b50610427610765366004611c83565b6110fb565b34801561077657600080fd5b50610256600b5481565b600061078d338484611174565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156108215760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61082c858585611299565b610840853361083b8685611d54565b611174565b506001949350505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161078d91859061083b908690611d67565b61088a611835565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611e88833981519152906109259083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610938611835565b68056bc75e2d631000008110156109a15760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b6064820152608401610818565b600a81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610925565b610a29611835565b6005821115610a7a5760405162461bcd60e51b815260206004820181905260248201527f4d757374206b656570206275792066656573206174203525206f72206c6573736044820152606401610818565b6005811115610ad55760405162461bcd60e51b815260206004820152602160248201527f4d757374206b6565702073656c6c2066656573206174203525206f72206c65736044820152607360f81b6064820152608401610818565b600691909155600755565b610ae8611835565b610af2600061188f565b565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161078d91859061083b908690611d54565b600061078d338484611299565b600d805460ff191660011790556000610b66306001600160a01b031660009081526001602052604090205490565b9050610b71816118df565b6005544790610b89906001600160a01b031682611a6b565b50506000600855600d805460ff19169055565b610ba4611835565b801515600d60019054906101000a900460ff16151503610bfa5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610818565b600d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061092590831515815260200190565b610c4b611835565b600d805462ff0000191662010000179055565b610c66611835565b60055460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610cff5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610818565b60055460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611e888339815191529060a0015b60405180910390a15050565b610d85611835565b306001600160a01b03831603610dfc5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610818565b60055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611d7a565b905080610eb65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610818565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b610f39611835565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611e888339815191529060a001610925565b6005546001600160a01b0316336001600160a01b03161461101f5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103832b936b4b9b9b4b7b760711b6044820152606401610818565b6001600160a01b03811661106a5760405162461bcd60e51b815260206004820152601260248201527173657454617857616c6c65743a205a45524f60701b6044820152606401610818565b600580546001600160a01b0319166001600160a01b038381169182178355600091825260036020908152604092839020805460ff1916600117905592548251838152601e938101939093527f576520686176652055706461746564207468652054617857616c6c65743a000060608401521691810191909152600080516020611e8883398151915290608001610925565b611103611835565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610818565b6111718161188f565b50565b6001600160a01b0383166111d65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610818565b6001600160a01b0382166112375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610818565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610818565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610818565b600081116113c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610818565b6001600160a01b0383166000908152600160205260409020548111156114385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610818565b6000546001600160a01b0384811691161480159061146457506000546001600160a01b03838116911614155b801561147857506001600160a01b03821615155b801561148f57506001600160a01b03821661dead14155b1561165457600d5462010000900460ff16611528576001600160a01b03831660009081526003602052604090205460ff16806114e357506001600160a01b03821660009081526003602052604090205460ff165b6115285760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610818565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561159b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156115c057506001600160a01b03831660009081526003602052604090205460ff16155b80156115e557506001600160a01b03821660009081526003602052604090205460ff16155b1561165457600b546001600160a01b0383166000908152600160205260409020546116109083611d67565b11156116545760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610818565b30600090815260016020526040812054600a54600d549192908310159160ff161580156116b357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b80156116bc5750815b80156116cf5750600d54610100900460ff165b156116dc576116dc610b38565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614801561173657506001600160a01b03861660009081526003602052604090205460ff16155b156117585760648460075461174b9190611d97565b6117559190611dae565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480156117b257506001600160a01b03851660009081526003602052604090205460ff16155b156117d4576064846006546117c79190611d97565b6117d19190611dae565b90505b6117de8185611d54565b93508015611822576117f1863083611b12565b80600860008282546118039190611d67565b92505081905550806009600082825461181c9190611d67565b90915550505b61182d868686611b12565b505050505050565b6000546001600160a01b03163314610af25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610818565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061191457611914611dd0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061196857611968611dd0565b60200260200101906001600160a01b031690816001600160a01b0316815250506119b3307f000000000000000000000000000000000000000000000000000000000000000084611174565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a08908590600090869030904290600401611e2a565b600060405180830381600087803b158015611a2257600080fd5b505af1158015611a36573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610d71929190611e66565b80600003611a77575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611ac4576040519150601f19603f3d011682016040523d82523d6000602084013e611ac9565b606091505b5050905080611b0d5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610818565b505050565b6001600160a01b03831660009081526001602052604081208054839290611b3a908490611d54565b90915550506001600160a01b03821660009081526001602052604081208054839290611b67908490611d67565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161128c91815260200190565b600060208083528351808285015260005b81811015611be057858101830151858201604001528201611bc4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c1857600080fd5b919050565b60008060408385031215611c3057600080fd5b611c3983611c01565b946020939093013593505050565b600080600060608486031215611c5c57600080fd5b611c6584611c01565b9250611c7360208501611c01565b9150604084013590509250925092565b600060208284031215611c9557600080fd5b611c9e82611c01565b9392505050565b600060208284031215611cb757600080fd5b5035919050565b60008060408385031215611cd157600080fd5b50508035926020909101359150565b801515811461117157600080fd5b600060208284031215611d0057600080fd5b8135611c9e81611ce0565b60008060408385031215611d1e57600080fd5b611d2783611c01565b9150611d3560208401611c01565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079157610791611d3e565b8082018082111561079157610791611d3e565b600060208284031215611d8c57600080fd5b8151611c9e81611ce0565b808202811582820484141761079157610791611d3e565b600082611dcb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e1f5781516001600160a01b031687529582019590820190600101611dfa565b509495945050505050565b85815284602082015260a060408201526000611e4960a0830186611de6565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e7f6040830184611de6565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a264697066735822122051affb90c4d591dae426a82f64cdd7ff6fc9783f5ac33775aadc49dd1121eebb64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80636db794371161012e578063c49b9a80116100ab578063e6be4a721161006f578063e6be4a72146106ea578063ea2f0b371461070a578063ea414b281461072a578063f2fde38b1461074a578063f8b45b051461076a57600080fd5b8063c49b9a8014610644578063c9567bf914610664578063ce831ed514610679578063d2d7ad831461068e578063dd62ed3e146106a457600080fd5b806395d89b41116100f257806395d89b41146105a0578063a457c2d7146105cf578063a9059cbb146105ef578063b29ad50a1461060f578063bbc0c7421461062457600080fd5b80636db794371461050157806370a0823114610521578063715018a61461055757806385141a771461056c5780638da5cb5b1461058257600080fd5b80632dc0562d116101bc5780634706240211610180578063470624021461044957806349bd5a5e1461045f5780634a74bb02146104935780635342acb4146104b25780635eaa8247146104eb57600080fd5b80632dc0562d146103a0578063313ce567146103c057806339509351146103e7578063437823ec14610407578063461d94761461042957600080fd5b80631694505e116102035780631694505e146102ef57806318160ddd1461033b578063220f66961461035057806323b872dd1461036a5780632b14ca561461038a57600080fd5b8063017836991461024057806302951a001461026957806306fdde031461027f578063095ea7b3146102bf57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061025660085481565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5061025660095481565b34801561028b57600080fd5b506102b260405180604001604052806007815260200166546f617374467560c81b81525081565b6040516102609190611bb3565b3480156102cb57600080fd5b506102df6102da366004611c1d565b610780565b6040519015158152602001610260565b3480156102fb57600080fd5b506103237f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610260565b34801561034757600080fd5b50600454610256565b34801561035c57600080fd5b50600d546102df9060ff1681565b34801561037657600080fd5b506102df610385366004611c47565b610797565b34801561039657600080fd5b5061025660075481565b3480156103ac57600080fd5b50600554610323906001600160a01b031681565b3480156103cc57600080fd5b506103d5601281565b60405160ff9091168152602001610260565b3480156103f357600080fd5b506102df610402366004611c1d565b61084b565b34801561041357600080fd5b50610427610422366004611c83565b610882565b005b34801561043557600080fd5b50610427610444366004611ca5565b610930565b34801561045557600080fd5b5061025660065481565b34801561046b57600080fd5b506103237f0000000000000000000000005a93b5a99e76d22987af1f42f2eab12502ac4d2181565b34801561049f57600080fd5b50600d546102df90610100900460ff1681565b3480156104be57600080fd5b506102df6104cd366004611c83565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104f757600080fd5b50610256600c5481565b34801561050d57600080fd5b5061042761051c366004611cbe565b610a21565b34801561052d57600080fd5b5061025661053c366004611c83565b6001600160a01b031660009081526001602052604090205490565b34801561056357600080fd5b50610427610ae0565b34801561057857600080fd5b5061032361dead81565b34801561058e57600080fd5b506000546001600160a01b0316610323565b3480156105ac57600080fd5b506102b26040518060400160405280600381526020016254465560e81b81525081565b3480156105db57600080fd5b506102df6105ea366004611c1d565b610af4565b3480156105fb57600080fd5b506102df61060a366004611c1d565b610b2b565b34801561061b57600080fd5b50610427610b38565b34801561063057600080fd5b50600d546102df9062010000900460ff1681565b34801561065057600080fd5b5061042761065f366004611cee565b610b9c565b34801561067057600080fd5b50610427610c43565b34801561068557600080fd5b50610427610c5e565b34801561069a57600080fd5b50610256600a5481565b3480156106b057600080fd5b506102566106bf366004611d0b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106f657600080fd5b50610427610705366004611c1d565b610d7d565b34801561071657600080fd5b50610427610725366004611c83565b610f31565b34801561073657600080fd5b50610427610745366004611c83565b610fc7565b34801561075657600080fd5b50610427610765366004611c83565b6110fb565b34801561077657600080fd5b50610256600b5481565b600061078d338484611174565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156108215760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61082c858585611299565b610840853361083b8685611d54565b611174565b506001949350505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161078d91859061083b908690611d67565b61088a611835565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611e88833981519152906109259083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610938611835565b68056bc75e2d631000008110156109a15760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b6064820152608401610818565b600a81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610925565b610a29611835565b6005821115610a7a5760405162461bcd60e51b815260206004820181905260248201527f4d757374206b656570206275792066656573206174203525206f72206c6573736044820152606401610818565b6005811115610ad55760405162461bcd60e51b815260206004820152602160248201527f4d757374206b6565702073656c6c2066656573206174203525206f72206c65736044820152607360f81b6064820152608401610818565b600691909155600755565b610ae8611835565b610af2600061188f565b565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161078d91859061083b908690611d54565b600061078d338484611299565b600d805460ff191660011790556000610b66306001600160a01b031660009081526001602052604090205490565b9050610b71816118df565b6005544790610b89906001600160a01b031682611a6b565b50506000600855600d805460ff19169055565b610ba4611835565b801515600d60019054906101000a900460ff16151503610bfa5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610818565b600d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061092590831515815260200190565b610c4b611835565b600d805462ff0000191662010000179055565b610c66611835565b60055460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610cff5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610818565b60055460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611e888339815191529060a0015b60405180910390a15050565b610d85611835565b306001600160a01b03831603610dfc5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610818565b60055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611d7a565b905080610eb65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610818565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b610f39611835565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611e888339815191529060a001610925565b6005546001600160a01b0316336001600160a01b03161461101f5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103832b936b4b9b9b4b7b760711b6044820152606401610818565b6001600160a01b03811661106a5760405162461bcd60e51b815260206004820152601260248201527173657454617857616c6c65743a205a45524f60701b6044820152606401610818565b600580546001600160a01b0319166001600160a01b038381169182178355600091825260036020908152604092839020805460ff1916600117905592548251838152601e938101939093527f576520686176652055706461746564207468652054617857616c6c65743a000060608401521691810191909152600080516020611e8883398151915290608001610925565b611103611835565b6001600160a01b0381166111685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610818565b6111718161188f565b50565b6001600160a01b0383166111d65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610818565b6001600160a01b0382166112375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610818565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610818565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610818565b600081116113c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610818565b6001600160a01b0383166000908152600160205260409020548111156114385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610818565b6000546001600160a01b0384811691161480159061146457506000546001600160a01b03838116911614155b801561147857506001600160a01b03821615155b801561148f57506001600160a01b03821661dead14155b1561165457600d5462010000900460ff16611528576001600160a01b03831660009081526003602052604090205460ff16806114e357506001600160a01b03821660009081526003602052604090205460ff165b6115285760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610818565b7f0000000000000000000000005a93b5a99e76d22987af1f42f2eab12502ac4d216001600160a01b0316836001600160a01b031614801561159b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156115c057506001600160a01b03831660009081526003602052604090205460ff16155b80156115e557506001600160a01b03821660009081526003602052604090205460ff16155b1561165457600b546001600160a01b0383166000908152600160205260409020546116109083611d67565b11156116545760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610818565b30600090815260016020526040812054600a54600d549192908310159160ff161580156116b357507f0000000000000000000000005a93b5a99e76d22987af1f42f2eab12502ac4d216001600160a01b0316866001600160a01b031614155b80156116bc5750815b80156116cf5750600d54610100900460ff165b156116dc576116dc610b38565b7f0000000000000000000000005a93b5a99e76d22987af1f42f2eab12502ac4d216001600160a01b0316856001600160a01b031614801561173657506001600160a01b03861660009081526003602052604090205460ff16155b156117585760648460075461174b9190611d97565b6117559190611dae565b90505b7f0000000000000000000000005a93b5a99e76d22987af1f42f2eab12502ac4d216001600160a01b0316866001600160a01b03161480156117b257506001600160a01b03851660009081526003602052604090205460ff16155b156117d4576064846006546117c79190611d97565b6117d19190611dae565b90505b6117de8185611d54565b93508015611822576117f1863083611b12565b80600860008282546118039190611d67565b92505081905550806009600082825461181c9190611d67565b90915550505b61182d868686611b12565b505050505050565b6000546001600160a01b03163314610af25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610818565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061191457611914611dd0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061196857611968611dd0565b60200260200101906001600160a01b031690816001600160a01b0316815250506119b3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611174565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a08908590600090869030904290600401611e2a565b600060405180830381600087803b158015611a2257600080fd5b505af1158015611a36573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610d71929190611e66565b80600003611a77575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611ac4576040519150601f19603f3d011682016040523d82523d6000602084013e611ac9565b606091505b5050905080611b0d5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610818565b505050565b6001600160a01b03831660009081526001602052604081208054839290611b3a908490611d54565b90915550506001600160a01b03821660009081526001602052604081208054839290611b67908490611d67565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161128c91815260200190565b600060208083528351808285015260005b81811015611be057858101830151858201604001528201611bc4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c1857600080fd5b919050565b60008060408385031215611c3057600080fd5b611c3983611c01565b946020939093013593505050565b600080600060608486031215611c5c57600080fd5b611c6584611c01565b9250611c7360208501611c01565b9150604084013590509250925092565b600060208284031215611c9557600080fd5b611c9e82611c01565b9392505050565b600060208284031215611cb757600080fd5b5035919050565b60008060408385031215611cd157600080fd5b50508035926020909101359150565b801515811461117157600080fd5b600060208284031215611d0057600080fd5b8135611c9e81611ce0565b60008060408385031215611d1e57600080fd5b611d2783611c01565b9150611d3560208401611c01565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079157610791611d3e565b8082018082111561079157610791611d3e565b600060208284031215611d8c57600080fd5b8151611c9e81611ce0565b808202811582820484141761079157610791611d3e565b600082611dcb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e1f5781516001600160a01b031687529582019590820190600101611dfa565b509495945050505050565b85815284602082015260a060408201526000611e4960a0830186611de6565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e7f6040830184611de6565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a264697066735822122051affb90c4d591dae426a82f64cdd7ff6fc9783f5ac33775aadc49dd1121eebb64736f6c63430008130033

Deployed Bytecode Sourcemap

16861:13772:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18225:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;18225:37:0;;;;;;;;18269:42;;;;;;;;;;;;;;;;17720:39;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17720:39:0;;;;;;;;;;;;:::i;20924:186::-;;;;;;;;;;-1:-1:-1;20924:186:0;;;;;:::i;:::-;;:::i;:::-;;;1351:14:1;;1344:22;1326:41;;1314:2;1299:18;20924:186:0;1186:187:1;18564:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1569:32:1;;;1551:51;;1539:2;1524:18;18564:51:0;1378:230:1;20194:95:0;;;;;;;;;;-1:-1:-1;20274:7:0;;20194:95;;18754:28;;;;;;;;;;-1:-1:-1;18754:28:0;;;;;;;;21155:478;;;;;;;;;;-1:-1:-1;21155:478:0;;;;;:::i;:::-;;:::i;18189:27::-;;;;;;;;;;;;;;;;17893:95;;;;;;;;;;-1:-1:-1;17893:95:0;;;;-1:-1:-1;;;;;17893:95:0;;;17810:35;;;;;;;;;;;;17843:2;17810:35;;;;;2342:4:1;2330:17;;;2312:36;;2300:2;2285:18;17810:35:0;2170:184:1;21683:290:0;;;;;;;;;;-1:-1:-1;21683:290:0;;;;;:::i;:::-;;:::i;26577:233::-;;;;;;;;;;-1:-1:-1;26577:233:0;;;;;:::i;:::-;;:::i;:::-;;27505:428;;;;;;;;;;-1:-1:-1;27505:428:0;;;;;:::i;:::-;;:::i;18156:26::-;;;;;;;;;;;;;;;;18622:38;;;;;;;;;;;;;;;18789:40;;;;;;;;;;-1:-1:-1;18789:40:0;;;;;;;;;;;26363:126;;;;;;;;;;-1:-1:-1;26363:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;26454:27:0;26430:4;26454:27;;;:18;:27;;;;;;;;;26363:126;18490:29;;;;;;;;;;;;;;;;27095:276;;;;;;;;;;-1:-1:-1;27095:276:0;;;;;:::i;:::-;;:::i;20297:117::-;;;;;;;;;;-1:-1:-1;20297:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;20390:16:0;20363:7;20390:16;;;:7;:16;;;;;;;20297:117;7280:103;;;;;;;;;;;;;:::i;18034:88::-;;;;;;;;;;;;18080:42;18034:88;;7045:87;;;;;;;;;;-1:-1:-1;7091:7:0;7118:6;-1:-1:-1;;;;;7118:6:0;7045:87;;17766:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17766:37:0;;;;;22023:300;;;;;;;;;;-1:-1:-1;22023:300:0;;;;;:::i;:::-;;:::i;20464:192::-;;;;;;;;;;-1:-1:-1;20464:192:0;;;;;:::i;:::-;;:::i;24913:287::-;;;;;;;;;;;;;:::i;18836:33::-;;;;;;;;;;-1:-1:-1;18836:33:0;;;;;;;;;;;27941:247;;;;;;;;;;-1:-1:-1;27941:247:0;;;;;:::i;:::-;;:::i;27379:81::-;;;;;;;;;;;;;:::i;29747:347::-;;;;;;;;;;;;;:::i;18320:53::-;;;;;;;;;;;;;;;;20706:170;;;;;;;;;;-1:-1:-1;20706:170:0;;;;;:::i;:::-;-1:-1:-1;;;;;20840:19:0;;;20813:7;20840:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20706:170;30171:459;;;;;;;;;;-1:-1:-1;30171:459:0;;;;;:::i;:::-;;:::i;26854:233::-;;;;;;;;;;-1:-1:-1;26854:233:0;;;;;:::i;:::-;;:::i;28225:350::-;;;;;;;;;;-1:-1:-1;28225:350:0;;;;;:::i;:::-;;:::i;7391:238::-;;;;;;;;;;-1:-1:-1;7391:238:0;;;;;:::i;:::-;;:::i;18389:42::-;;;;;;;;;;;;;;;;20924:186;21024:4;21041:39;357:10;21064:7;21073:6;21041:8;:39::i;:::-;-1:-1:-1;21098:4:0;20924:186;;;;;:::o;21155:478::-;-1:-1:-1;;;;;21328:19:0;;21287:4;21328:19;;;:11;:19;;;;;;;;357:10;21328:33;;;;;;;;21394:26;;;;21372:116;;;;-1:-1:-1;;;21372:116:0;;4032:2:1;21372:116:0;;;4014:21:1;4071:2;4051:18;;;4044:30;4110:34;4090:18;;;4083:62;-1:-1:-1;;;4161:18:1;;;4154:38;4209:19;;21372:116:0;;;;;;;;;21499:36;21509:6;21517:9;21528:6;21499:9;:36::i;:::-;21546:57;21555:6;357:10;21577:25;21596:6;21577:16;:25;:::i;:::-;21546:8;:57::i;:::-;-1:-1:-1;21621:4:0;;21155:478;-1:-1:-1;;;;21155:478:0:o;21683:290::-;357:10;21796:4;21885:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21885:34:0;;;;;;;;;;21796:4;;21813:130;;21863:7;;21885:47;;21922:10;;21885:47;:::i;26577:233::-;7004:13;:11;:13::i;:::-;-1:-1:-1;;;;;26648:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;26648:34:0::1;26678:4;26648:34;::::0;;26698:104;-1:-1:-1;;;;;;;;;;;26698:104:0;::::1;::::0;26667:7;;4864:2:1;4846:21;;;4903:2;4883:18;;;4876:30;4942:34;4937:2;4922:18;;4915:62;-1:-1:-1;;;5008:3:1;4993:19;;4986:45;-1:-1:-1;;;;;5105:32:1;;;;5098:4;5083:20;;5076:62;5063:3;5048:19;;4634:510;26698:104:0::1;;;;;;;;26577:233:::0;:::o;27505:428::-;7004:13;:11;:13::i;:::-;27660:9:::1;27632:24;:37;;27610:126;;;::::0;-1:-1:-1;;;27610:126:0;;5351:2:1;27610:126:0::1;::::0;::::1;5333:21:1::0;5390:2;5370:18;;;5363:30;5429:34;5409:18;;;5402:62;-1:-1:-1;;;5480:18:1;;;5473:37;5527:19;;27610:126:0::1;5149:403:1::0;27610:126:0::1;27747:23;:50:::0;;;27813:112:::1;::::0;;5769:21:1;;;5826:2;5806:18;;;5799:30;;;;5865:34;5860:2;5845:18;;5838:62;-1:-1:-1;;;5931:3:1;5916:19;;5909:42;6018:4;6003:20;;5996:36;;;27813:112:0::1;::::0;5983:3:1;5968:19;27813:112:0::1;5557:481:1::0;27095:276:0;7004:13;:11;:13::i;:::-;27199:1:::1;27188:7;:12;;27180:57;;;::::0;-1:-1:-1;;;27180:57:0;;6245:2:1;27180:57:0::1;::::0;::::1;6227:21:1::0;;;6264:18;;;6257:30;6323:34;6303:18;;;6296:62;6375:18;;27180:57:0::1;6043:356:1::0;27180:57:0::1;27268:1;27256:8;:13;;27248:59;;;::::0;-1:-1:-1;;;27248:59:0;;6606:2:1;27248:59:0::1;::::0;::::1;6588:21:1::0;6645:2;6625:18;;;6618:30;6684:34;6664:18;;;6657:62;-1:-1:-1;;;6735:18:1;;;6728:31;6776:19;;27248:59:0::1;6404:397:1::0;27248:59:0::1;27318:6;:16:::0;;;;27345:7:::1;:18:::0;27095:276::o;7280:103::-;7004:13;:11;:13::i;:::-;7345:30:::1;7372:1;7345:18;:30::i;:::-;7280:103::o:0;22023:300::-;357:10;22141:4;22230:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22230:34:0;;;;;;;;;;22141:4;;22158:135;;22208:7;;22230:52;;22267:15;;22230:52;:::i;20464:192::-;20567:4;20584:42;357:10;20608:9;20619:6;20584:9;:42::i;24913:287::-;18912:16;:23;;-1:-1:-1;;18912:23:0;18931:4;18912:23;;;:16;24991:24:::1;25009:4;-1:-1:-1::0;;;;;20390:16:0;20363:7;20390:16;;;:7;:16;;;;;;;20297:117;24991:24:::1;24969:46;;25026:29;25043:11;25026:16;:29::i;:::-;25137:9;::::0;25084:21:::1;::::0;25116:43:::1;::::0;-1:-1:-1;;;;;25137:9:0::1;25084:21:::0;25116:20:::1;:43::i;:::-;-1:-1:-1::0;;25191:1:0::1;25170:18;:22:::0;18958:16;:24;;-1:-1:-1;;18958:24:0;;;24913:287::o;27941:247::-;7004:13;:11;:13::i;:::-;28053:8:::1;28028:33;;:21;;;;;;;;;;;:33;;::::0;28020:63:::1;;;::::0;-1:-1:-1;;;28020:63:0;;7008:2:1;28020:63:0::1;::::0;::::1;6990:21:1::0;7047:2;7027:18;;;7020:30;-1:-1:-1;;;7066:18:1;;;7059:47;7123:18;;28020:63:0::1;6806:341:1::0;28020:63:0::1;28094:21;:32:::0;;;::::1;;;;-1:-1:-1::0;;28094:32:0;;::::1;;::::0;;28142:38:::1;::::0;::::1;::::0;::::1;::::0;28118:8;1351:14:1;1344:22;1326:41;;1314:2;1299:18;;1186:187;27379:81:0;7004:13;:11;:13::i;:::-;27432::::1;:20:::0;;-1:-1:-1;;27432:20:0::1;::::0;::::1;::::0;;27379:81::o;29747:347::-;7004:13;:11;:13::i;:::-;29885:9:::1;::::0;29877:46:::1;::::0;29829:21:::1;::::0;29811:15:::1;::::0;-1:-1:-1;;;;;29885:9:0;;::::1;::::0;29829:21;;29811:15;29877:46;29811:15;29877:46;29829:21;29885:9;29877:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29861:62;;;29942:4;29934:32;;;::::0;-1:-1:-1;;;29934:32:0;;7564:2:1;29934:32:0::1;::::0;::::1;7546:21:1::0;7603:2;7583:18;;;7576:30;-1:-1:-1;;;7622:18:1;;;7615:45;7677:18;;29934:32:0::1;7362:339:1::0;29934:32:0::1;30066:9;::::0;29982:104:::1;::::0;;7926:21:1;;;7983:2;7963:18;;;7956:30;;;;8022:34;8017:2;8002:18;;7995:62;-1:-1:-1;;;8088:3:1;8073:19;;8066:43;-1:-1:-1;;;;;30066:9:0;;::::1;8176:4:1::0;8161:20;;8154:62;-1:-1:-1;;;;;;;;;;;29982:104:0;8141:3:1;8126:19;29982:104:0::1;;;;;;;;29800:294;;29747:347::o:0;30171:459::-;7004:13;:11;:13::i;:::-;30348:4:::1;-1:-1:-1::0;;;;;30323:30:0;::::1;::::0;30301:134:::1;;;::::0;-1:-1:-1;;;30301:134:0;;8429:2:1;30301:134:0::1;::::0;::::1;8411:21:1::0;8468:2;8448:18;;;8441:30;8507:34;8487:18;;;8480:62;-1:-1:-1;;;8558:18:1;;;8551:52;8620:19;;30301:134:0::1;8227:418:1::0;30301:134:0::1;30489:9;::::0;30458:50:::1;::::0;-1:-1:-1;;;30458:50:0;;-1:-1:-1;;;;;30489:9:0;;::::1;30458:50;::::0;::::1;8832:51:1::0;8899:18;;;8892:34;;;30446:9:0::1;::::0;30458:30;::::1;::::0;::::1;::::0;8805:18:1;;30458:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30446:62;;30527:4;30519:32;;;::::0;-1:-1:-1;;;30519:32:0;;7564:2:1;30519:32:0::1;::::0;::::1;7546:21:1::0;7603:2;7583:18;;;7576:30;-1:-1:-1;;;7622:18:1;;;7615:45;7677:18;;30519:32:0::1;7362:339:1::0;30519:32:0::1;30567:55;::::0;;9399:21:1;;;9456:2;9436:18;;;9429:30;9495:34;9490:2;9475:18;;9468:62;-1:-1:-1;;;9561:3:1;9546:19;;9539:38;9644:4;9629:20;;9622:36;;;30567:55:0;;::::1;::::0;;;;9609:3:1;30567:55:0;;::::1;30290:340;30171:459:::0;;:::o;26854:233::-;7004:13;:11;:13::i;:::-;-1:-1:-1;;;;;26923:27:0;::::1;26953:5;26923:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;26923:35:0::1;::::0;;26974:105;;9881:21:1;;;9938:2;9918:18;;;9911:30;;;;9977:34;9972:2;9957:18;;9950:62;-1:-1:-1;;;10043:3:1;10028:19;;10021:46;10119:20;;10112:62;;;;-1:-1:-1;;;;;;;;;;;26974:105:0;10099:3:1;10084:19;26974:105:0::1;9669:511:1::0;28225:350:0;28311:9;;-1:-1:-1;;;;;28311:9:0;357:10;-1:-1:-1;;;;;28295:25:0;;28287:56;;;;-1:-1:-1;;;28287:56:0;;10387:2:1;28287:56:0;;;10369:21:1;10426:2;10406:18;;;10399:30;-1:-1:-1;;;10445:18:1;;;10438:48;10503:18;;28287:56:0;10185:342:1;28287:56:0;-1:-1:-1;;;;;28362:24:0;;28354:55;;;;-1:-1:-1;;;28354:55:0;;10734:2:1;28354:55:0;;;10716:21:1;10773:2;10753:18;;;10746:30;-1:-1:-1;;;10792:18:1;;;10785:48;10850:18;;28354:55:0;10532:342:1;28354:55:0;28420:9;:31;;-1:-1:-1;;;;;;28420:31:0;-1:-1:-1;;;;;28420:31:0;;;;;;;;-1:-1:-1;28462:29:0;;;:18;:29;;;;;;;;;:36;;-1:-1:-1;;28462:36:0;-1:-1:-1;28462:36:0;;;28557:9;;28514:53;;11099:21:1;;;11156:2;11136:18;;;11129:30;;;;11195:32;11190:2;11175:18;;11168:60;28557:9:0;11280:20:1;;;11273:62;;;;-1:-1:-1;;;;;;;;;;;28514:53:0;11260:3:1;11245:19;28514:53:0;10879:462:1;7391:238:0;7004:13;:11;:13::i;:::-;-1:-1:-1;;;;;7494:22:0;::::1;7472:110;;;::::0;-1:-1:-1;;;7472:110:0;;11548:2:1;7472:110:0::1;::::0;::::1;11530:21:1::0;11587:2;11567:18;;;11560:30;11626:34;11606:18;;;11599:62;-1:-1:-1;;;11677:18:1;;;11670:36;11723:19;;7472:110:0::1;11346:402:1::0;7472:110:0::1;7593:28;7612:8;7593:18;:28::i;:::-;7391:238:::0;:::o;22355:341::-;-1:-1:-1;;;;;22449:20:0;;22441:69;;;;-1:-1:-1;;;22441:69:0;;11955:2:1;22441:69:0;;;11937:21:1;11994:2;11974:18;;;11967:30;12033:34;12013:18;;;12006:62;-1:-1:-1;;;12084:18:1;;;12077:34;12128:19;;22441:69:0;11753:400:1;22441:69:0;-1:-1:-1;;;;;22529:21:0;;22521:68;;;;-1:-1:-1;;;22521:68:0;;12360:2:1;22521:68:0;;;12342:21:1;12399:2;12379:18;;;12372:30;12438:34;12418:18;;;12411:62;-1:-1:-1;;;12489:18:1;;;12482:32;12531:19;;22521:68:0;12158:398:1;22521:68:0;-1:-1:-1;;;;;22602:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;22655:33;;160:25:1;;;22655:33:0;;133:18:1;22655:33:0;;;;;;;;22355:341;;;:::o;22829:2076::-;-1:-1:-1;;;;;22917:18:0;;22909:68;;;;-1:-1:-1;;;22909:68:0;;12763:2:1;22909:68:0;;;12745:21:1;12802:2;12782:18;;;12775:30;12841:34;12821:18;;;12814:62;-1:-1:-1;;;12892:18:1;;;12885:35;12937:19;;22909:68:0;12561:401:1;22909:68:0;-1:-1:-1;;;;;22996:16:0;;22988:64;;;;-1:-1:-1;;;22988:64:0;;13169:2:1;22988:64:0;;;13151:21:1;13208:2;13188:18;;;13181:30;13247:34;13227:18;;;13220:62;-1:-1:-1;;;13298:18:1;;;13291:33;13341:19;;22988:64:0;12967:399:1;22988:64:0;23080:1;23071:6;:10;23063:64;;;;-1:-1:-1;;;23063:64:0;;13573:2:1;23063:64:0;;;13555:21:1;13612:2;13592:18;;;13585:30;13651:34;13631:18;;;13624:62;-1:-1:-1;;;13702:18:1;;;13695:39;13751:19;;23063:64:0;13371:405:1;23063:64:0;-1:-1:-1;;;;;23160:13:0;;;;;;:7;:13;;;;;;:23;-1:-1:-1;23160:23:0;23138:111;;;;-1:-1:-1;;;23138:111:0;;13983:2:1;23138:111:0;;;13965:21:1;14022:2;14002:18;;;13995:30;14061:34;14041:18;;;14034:62;-1:-1:-1;;;14112:18:1;;;14105:36;14158:19;;23138:111:0;13781:402:1;23138:111:0;7091:7;7118:6;-1:-1:-1;;;;;23280:15:0;;;7118:6;;23280:15;;;;:45;;-1:-1:-1;7091:7:0;7118:6;-1:-1:-1;;;;;23312:13:0;;;7118:6;;23312:13;;23280:45;:78;;;;-1:-1:-1;;;;;;23342:16:0;;;;23280:78;:116;;;;-1:-1:-1;;;;;;23375:21:0;;23389:6;23375:21;;23280:116;23262:614;;;23428:13;;;;;;;23423:140;;-1:-1:-1;;;;;23470:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23498:22:0;;;;;;:18;:22;;;;;;;;23470:50;23462:85;;;;-1:-1:-1;;;23462:85:0;;14390:2:1;23462:85:0;;;14372:21:1;14429:2;14409:18;;;14402:30;-1:-1:-1;;;14448:18:1;;;14441:52;14510:18;;23462:85:0;14188:346:1;23462:85:0;23609:13;-1:-1:-1;;;;;23601:21:0;:4;-1:-1:-1;;;;;23601:21:0;;:73;;;;;23658:15;-1:-1:-1;;;;;23644:30:0;:2;-1:-1:-1;;;;;23644:30:0;;;23601:73;:119;;;;-1:-1:-1;;;;;;23696:24:0;;;;;;:18;:24;;;;;;;;23695:25;23601:119;:146;;;;-1:-1:-1;;;;;;23725:22:0;;;;;;:18;:22;;;;;;;;23724:23;23601:146;23579:286;;;23816:9;;-1:-1:-1;;;;;20390:16:0;;20363:7;20390:16;;;:7;:16;;;;;;23790:22;;:6;:22;:::i;:::-;:35;;23782:67;;;;-1:-1:-1;;;23782:67:0;;14741:2:1;23782:67:0;;;14723:21:1;14780:2;14760:18;;;14753:30;-1:-1:-1;;;14799:18:1;;;14792:49;14858:18;;23782:67:0;14539:343:1;23782:67:0;23981:4;23932:28;20390:16;;;:7;:16;;;;;;24066:23;;24226:16;;20390;;24029:60;;;;;24226:16;;24225:17;:55;;;;;24267:13;-1:-1:-1;;;;;24259:21:0;:4;-1:-1:-1;;;;;24259:21:0;;;24225:55;:95;;;;;24297:23;24225:95;:133;;;;-1:-1:-1;24337:21:0;;;;;;;24225:133;24207:206;;;24385:16;:14;:16::i;:::-;24433:13;-1:-1:-1;;;;;24427:19:0;:2;-1:-1:-1;;;;;24427:19:0;;:48;;;;-1:-1:-1;;;;;;24451:24:0;;;;;;:18;:24;;;;;;;;24450:25;24427:48;24423:111;;;24519:3;24509:6;24499:7;;:16;;;;:::i;:::-;24498:24;;;;:::i;:::-;24492:30;;24423:111;24556:13;-1:-1:-1;;;;;24548:21:0;:4;-1:-1:-1;;;;;24548:21:0;;:48;;;;-1:-1:-1;;;;;;24574:22:0;;;;;;:18;:22;;;;;;;;24573:23;24548:48;24544:110;;;24639:3;24629:6;24620;;:15;;;;:::i;:::-;24619:23;;;;:::i;:::-;24613:29;;24544:110;24664:13;24674:3;24664:13;;:::i;:::-;;-1:-1:-1;24694:7:0;;24690:165;;24718:40;24733:4;24747;24754:3;24718:14;:40::i;:::-;24795:3;24773:18;;:25;;;;;;;:::i;:::-;;;;;;;;24840:3;24813:23;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;24690:165:0;24865:32;24880:4;24886:2;24890:6;24865:14;:32::i;:::-;22898:2007;;;22829:2076;;;:::o;7140:132::-;7091:7;7118:6;-1:-1:-1;;;;;7118:6:0;357:10;7204:23;7196:68;;;;-1:-1:-1;;;7196:68:0;;15484:2:1;7196:68:0;;;15466:21:1;;;15503:18;;;15496:30;15562:34;15542:18;;;15535:62;15614:18;;7196:68:0;15282:356:1;7637:191:0;7711:16;7730:6;;-1:-1:-1;;;;;7747:17:0;;;-1:-1:-1;;;;;;7747:17:0;;;;;;7780:40;;7730:6;;;;;;;7780:40;;7711:16;7780:40;7700:128;7637:191;:::o;25328:638::-;25478:16;;;25492:1;25478:16;;;;;;;;25454:21;;25478:16;;;;;;;;;;-1:-1:-1;25478:16:0;25454:40;;25523:4;25505;25510:1;25505:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25505:23:0;;;-1:-1:-1;;;;;25505:23:0;;;;;25549:4;25539;25544:1;25539:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;25539:14:0;;;-1:-1:-1;;;;;25539:14:0;;;;;25564:62;25581:4;25596:15;25614:11;25564:8;:62::i;:::-;25665:240;;-1:-1:-1;;;25665:240:0;;-1:-1:-1;;;;;25665:15:0;:66;;;;:240;;25746:11;;25772:1;;25816:4;;25843;;25879:15;;25665:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25923:35;25940:11;25953:4;25923:35;;;;;;;:::i;28583:252::-;28704:6;28714:1;28704:11;28700:24;;28583:252;;:::o;28700:24::-;28735:9;28750;-1:-1:-1;;;;;28750:14:0;28772:6;28750:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28734:49;;;28802:4;28794:33;;;;-1:-1:-1;;;28794:33:0;;17499:2:1;28794:33:0;;;17481:21:1;17538:2;17518:18;;;17511:30;-1:-1:-1;;;17557:18:1;;;17550:46;17613:18;;28794:33:0;17297:340:1;28794:33:0;28689:146;28583:252;;:::o;26102:253::-;-1:-1:-1;;;;;26230:15:0;;;;;;:7;:15;;;;;:25;;26249:6;;26230:15;:25;;26249:6;;26230:25;:::i;:::-;;;;-1:-1:-1;;;;;;;26266:18:0;;;;;;:7;:18;;;;;:28;;26288:6;;26266:18;:28;;26288:6;;26266:28;:::i;:::-;;;;;;;;26329:9;-1:-1:-1;;;;;26312:35:0;26321:6;-1:-1:-1;;;;;26312:35:0;;26340:6;26312:35;;;;160:25:1;;148:2;133:18;;14:177;196:548;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:173::-;817:20;;-1:-1:-1;;;;;866:31:1;;856:42;;846:70;;912:1;909;902:12;846:70;749:173;;;:::o;927:254::-;995:6;1003;1056:2;1044:9;1035:7;1031:23;1027:32;1024:52;;;1072:1;1069;1062:12;1024:52;1095:29;1114:9;1095:29;:::i;:::-;1085:39;1171:2;1156:18;;;;1143:32;;-1:-1:-1;;;927:254:1:o;1613:328::-;1690:6;1698;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1798:29;1817:9;1798:29;:::i;:::-;1788:39;;1846:38;1880:2;1869:9;1865:18;1846:38;:::i;:::-;1836:48;;1931:2;1920:9;1916:18;1903:32;1893:42;;1613:328;;;;;:::o;2359:186::-;2418:6;2471:2;2459:9;2450:7;2446:23;2442:32;2439:52;;;2487:1;2484;2477:12;2439:52;2510:29;2529:9;2510:29;:::i;:::-;2500:39;2359:186;-1:-1:-1;;;2359:186:1:o;2550:180::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;-1:-1:-1;2701:23:1;;2550:180;-1:-1:-1;2550:180:1:o;2943:248::-;3011:6;3019;3072:2;3060:9;3051:7;3047:23;3043:32;3040:52;;;3088:1;3085;3078:12;3040:52;-1:-1:-1;;3111:23:1;;;3181:2;3166:18;;;3153:32;;-1:-1:-1;2943:248:1:o;3196:118::-;3282:5;3275:13;3268:21;3261:5;3258:32;3248:60;;3304:1;3301;3294:12;3319:241;3375:6;3428:2;3416:9;3407:7;3403:23;3399:32;3396:52;;;3444:1;3441;3434:12;3396:52;3483:9;3470:23;3502:28;3524:5;3502:28;:::i;3565:260::-;3633:6;3641;3694:2;3682:9;3673:7;3669:23;3665:32;3662:52;;;3710:1;3707;3700:12;3662:52;3733:29;3752:9;3733:29;:::i;:::-;3723:39;;3781:38;3815:2;3804:9;3800:18;3781:38;:::i;:::-;3771:48;;3565:260;;;;;:::o;4239:127::-;4300:10;4295:3;4291:20;4288:1;4281:31;4331:4;4328:1;4321:15;4355:4;4352:1;4345:15;4371:128;4438:9;;;4459:11;;;4456:37;;;4473:18;;:::i;4504:125::-;4569:9;;;4590:10;;;4587:36;;;4603:18;;:::i;8937:245::-;9004:6;9057:2;9045:9;9036:7;9032:23;9028:32;9025:52;;;9073:1;9070;9063:12;9025:52;9105:9;9099:16;9124:28;9146:5;9124:28;:::i;14887:168::-;14960:9;;;14991;;15008:15;;;15002:22;;14988:37;14978:71;;15029:18;;:::i;15060:217::-;15100:1;15126;15116:132;;15170:10;15165:3;15161:20;15158:1;15151:31;15205:4;15202:1;15195:15;15233:4;15230:1;15223:15;15116:132;-1:-1:-1;15262:9:1;;15060:217::o;15775:127::-;15836:10;15831:3;15827:20;15824:1;15817:31;15867:4;15864:1;15857:15;15891:4;15888:1;15881:15;15907:461;15960:3;15998:5;15992:12;16025:6;16020:3;16013:19;16051:4;16080:2;16075:3;16071:12;16064:19;;16117:2;16110:5;16106:14;16138:1;16148:195;16162:6;16159:1;16156:13;16148:195;;;16227:13;;-1:-1:-1;;;;;16223:39:1;16211:52;;16283:12;;;;16318:15;;;;16259:1;16177:9;16148:195;;;-1:-1:-1;16359:3:1;;15907:461;-1:-1:-1;;;;;15907:461:1:o;16373:582::-;16672:6;16661:9;16654:25;16715:6;16710:2;16699:9;16695:18;16688:34;16758:3;16753:2;16742:9;16738:18;16731:31;16635:4;16779:57;16831:3;16820:9;16816:19;16808:6;16779:57;:::i;:::-;-1:-1:-1;;;;;16872:32:1;;;;16867:2;16852:18;;16845:60;-1:-1:-1;16936:3:1;16921:19;16914:35;16771:65;16373:582;-1:-1:-1;;;16373:582:1:o;16960:332::-;17167:6;17156:9;17149:25;17210:2;17205;17194:9;17190:18;17183:30;17130:4;17230:56;17282:2;17271:9;17267:18;17259:6;17230:56;:::i;:::-;17222:64;16960:332;-1:-1:-1;;;;16960:332:1:o

Swarm Source

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