ETH Price: $3,322.80 (-4.18%)

Token

SAGE ERC314 (SAGE)
 

Overview

Max Total Supply

1,000,000 SAGE

Holders

681

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SAGE

Value
$0.00
0x222088b66d30985fdac41c531e99592caa108441
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:
SAGE

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-03-22
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/**
 * @title ERC314
 * @dev Implementation of the ERC314 interface.
 * ERC314 is a derivative of ERC20 which aims to integrate a liquidity pool on the token in order to enable native swaps, notably to reduce gas consumption.
 */

// Events interface for ERC314
interface IEERC314 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event AddLiquidity(uint32 _timeTillUnlockLiquidity, uint256 value);
    event RemoveLiquidity(uint256 value);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out
    );
}

abstract contract ERC314 is IEERC314 {
    mapping(address account => uint256) private _balances;

    uint256 private _totalSupply;
    uint256 public maxWallet;
    uint32 public timeTillUnlockLiquidity;

    string private _name;
    string private _symbol;

    address public owner;
    address public liquidityProvider;
    address public feeCollector;

    bool public tradingEnable;
    bool public liquidityAdded;
    bool public maxWalletEnable;
    uint256 public fee; //trading fee

    mapping(address account => uint32) public lastTransaction;
    uint256 public accruedFeeAmount;

    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }

    modifier onlyLiquidityProvider() {
        require(
            msg.sender == liquidityProvider,
            "You are not the liquidity provider"
        );
        _;
    }

    modifier onlyFeeCollector() {
        require(msg.sender == feeCollector, "You are not the fee collector");
        _;
    }

    /**
     * @dev Sets the values for {name}, {symbol} and {totalSupply} and {fee}
     *
     * The name and symbol are immutable: they can only be set once during
     * construction.
     */
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        uint256 _fee
    ) {
        _name = name_;
        _symbol = symbol_;
        _totalSupply = totalSupply_;
        maxWallet = totalSupply_ / 50;
        owner = msg.sender;
        maxWalletEnable = true;
        _balances[msg.sender] = totalSupply_ /5;
        uint256 liquidityAmount = totalSupply_ - _balances[msg.sender];
        _balances[address(this)] = liquidityAmount;
        liquidityProvider = msg.sender;
        feeCollector = msg.sender;
        fee = _fee;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - the caller must have a balance of at least `value`.
     * - if the receiver is the contract, the caller must send the amount of tokens to sell
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        _transfer(msg.sender, to, value);

        return true;
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively burns if `to` is the zero address.
     * All customizations to transfers and burns should be done by overriding this function.
     * This function includes MEV protection, which prevents the same address from making two transactions in the same block.(lastTransaction)
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        require(
            lastTransaction[msg.sender] != block.number,
            "You can't make two transactions in the same block"
        );

        lastTransaction[msg.sender] = uint32(block.number);

        require(
            _balances[from] >= value,
            "ERC20: transfer amount exceeds balance"
        );

        unchecked {
            _balances[from] -= value;
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Returns the amount of ETH and tokens in the contract, used for trading.
     */
    function getReserves() public view returns (uint256, uint256) {
        return (
            (address(this).balance - accruedFeeAmount),
            _balances[address(this)]
        );
    }

    /**
     * @dev Enables or disables trading.
     * @param _tradingEnable: true to enable trading, false to disable trading.
     * onlyOwner modifier
     */
    function enableTrading(bool _tradingEnable) external onlyOwner {
        tradingEnable = _tradingEnable;
    }

    /**
     * @dev Enables or disables the max wallet.
     * @param _maxWalletEnable: true to enable max wallet, false to disable max wallet.
     * onlyOwner modifier
     */
    function enableMaxWallet(bool _maxWalletEnable) external onlyOwner {
        maxWalletEnable = _maxWalletEnable;
    }

    /**
     * @dev Modify trading fees
     * @param _fee: trading fee amount
     * onlyOwner modifier
     */

    function setTradingFee(uint256 _fee) external onlyOwner {
        require(_fee <= 500, "max 5% fee");
        fee = _fee;
    }

    /**
     * @dev Sets the max wallet.
     * @param _maxWallet_: the new max wallet.
     * onlyOwner modifier
     */
    function setMaxWallet(uint256 _maxWallet_) external onlyOwner {
        maxWallet = _maxWallet_;
    }

    /**
     *
     * @dev Sets the new fee collector
     * @param _newFeeCollector the new fee collector
     * onlyOwner modifier
     */
    function setFeeCollector(address _newFeeCollector) external onlyOwner {
        feeCollector = _newFeeCollector;
    }

    /**
     * @dev Transfers the ownership of the contract to zero address
     * onlyOwner modifier
     */
    function renounceOwnership() external onlyOwner {
        owner = address(0);
    }

    /**
     *
     * @dev Sets the new liquidity provider
     * @param _newLiquidityProvider the new liquidity provider
     * onlyLiquidityProvider modifier
     */
    function setLiquidityProvider(
        address _newLiquidityProvider
    ) external onlyLiquidityProvider {
        liquidityProvider = _newLiquidityProvider;
    }

    /**
     * @dev Adds liquidity to the contract.
     * @param _timeTillUnlockLiquidity: the block timestamp to unlock the liquidity.
     * value: the amount of ETH to add to the liquidity.
     * onlyLiquidityProvider modifier
     */
    function addLiquidity(
        uint32 _timeTillUnlockLiquidity
    ) public payable onlyLiquidityProvider {
        require(liquidityAdded == false, "Liquidity already added");

        liquidityAdded = true;

        require(msg.value > 0, "No ETH sent");
        require(
            block.timestamp < _timeTillUnlockLiquidity,
            "The time until unlock liquidity is too low"
        );

        timeTillUnlockLiquidity = _timeTillUnlockLiquidity;
        tradingEnable = true;

        emit AddLiquidity(_timeTillUnlockLiquidity, msg.value);
    }

    /**
     * @dev Removes liquidity from the contract.
     * onlyLiquidityProvider modifier
     */
    function removeLiquidity() public onlyLiquidityProvider {
        require(block.timestamp > timeTillUnlockLiquidity, "Liquidity locked");

        tradingEnable = false;

        (uint256 reserveETH, ) = getReserves();

        (bool success, ) = payable(msg.sender).call{value: reserveETH}("");
        if (!success) {
            revert("Could not remove liquidity");
        }

        emit RemoveLiquidity(address(this).balance);
    }

    /**
     * @dev Extends the liquidity lock, only if the new block timestamp is higher than the current one.
     * @param _timeTillUnlockLiquidity: the new block timestamp to unlock the liquidity.
     * onlyLiquidityProvider modifier
     */
    function extendLiquidityLock(
        uint32 _timeTillUnlockLiquidity
    ) public onlyLiquidityProvider {
        require(
            timeTillUnlockLiquidity < _timeTillUnlockLiquidity,
            "You can't shorten duration"
        );

        timeTillUnlockLiquidity = _timeTillUnlockLiquidity;
    }

    /**
     * @dev Estimates the amount of tokens or ETH to receive when buying or selling.
     * @param value: the amount of ETH or tokens to swap.
     * @param _buy: true if buying, false if selling.
     */
    function getAmountOut(
        uint256 value,
        bool _buy
    ) public view returns (uint256) {
        (uint256 reserveETH, uint256 reserveToken) = getReserves();

        if (_buy) {
            uint256 valueAfterFee = (value * (10000 - fee)) / 10000;
            return ((valueAfterFee * reserveToken)) / (reserveETH + value);
        } else {
            uint256 ethValue = ((value * reserveETH)) / (reserveToken + value);
            ethValue = (ethValue * (10000 - fee)) / 10000;
            return ethValue;
        }
    }

    /**
     * @dev Buys tokens with ETH.
     * internal function
     */
    function buy(uint256 amountOutMin) public payable {
        require(tradingEnable, "Trading not enable");

        uint256 feeAmount = (msg.value * fee) / 10000;

        uint256 ETHafterFee;
        unchecked {
            ETHafterFee = msg.value - feeAmount;
        }

        (uint256 reserveETH, uint256 reserveToken) = getReserves();

        uint256 tokenAmount = (ETHafterFee * reserveToken) / reserveETH;
        require(tokenAmount > 0, "Bought amount too low");
        unchecked {
            accruedFeeAmount += feeAmount;
        }

        if (maxWalletEnable) {
            require(
                tokenAmount + _balances[msg.sender] <= maxWallet,
                "Max wallet exceeded"
            );
        }

        require(tokenAmount >= amountOutMin, "slippage reached");

        _transfer(address(this), msg.sender, tokenAmount);

        emit Swap(msg.sender, msg.value, 0, 0, tokenAmount);
    }

    function claimFees() external onlyFeeCollector {
        uint256 accruedAmount = accruedFeeAmount;

        if (accruedAmount > address(this).balance)
            // in case we don't have enough eth for the fees, just send the balance
            accruedAmount = address(this).balance;

        accruedFeeAmount = 0;
        (bool success, ) = payable(msg.sender).call{value: accruedAmount}("");
        if (!success) revert("Transfer of fee failed");
    }

    /**
     * @dev Sells tokens for ETH.
     * internal function
     */
    function sell(uint256 sellAmount, uint256 amountOutMin) public {
        require(tradingEnable, "Trading not enable");

        (uint256 reserveETH, uint256 reserveToken) = getReserves();

        uint256 ethAmount = (sellAmount * reserveETH) /
            (reserveToken + sellAmount);

        require(reserveETH >= ethAmount, "Insufficient ETH in reserves");

        uint256 feeAmount = (ethAmount * fee) / 10000;

        unchecked {
            ethAmount -= feeAmount;
        }
        require(ethAmount > 0, "Sell amount too low");
        require(ethAmount >= amountOutMin, "slippage reached");

        unchecked {
            accruedFeeAmount += feeAmount;
        }

        _transfer(msg.sender, address(this), sellAmount);

        (bool success, ) = payable(msg.sender).call{value: ethAmount}("");
        if (!success) {
            revert("Could not sell");
        }

        emit Swap(msg.sender, 0, sellAmount, ethAmount, 0);
    }
}

contract SAGE is ERC314 {
    constructor() ERC314("SAGE ERC314", "SAGE", 1_000_000 * 10 ** 18, 100) {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"accruedFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_maxWalletEnable","type":"bool"}],"name":"enableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnable","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_timeTillUnlockLiquidity","type":"uint32"}],"name":"extendLiquidityLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"_buy","type":"bool"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lastTransaction","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLiquidityProvider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet_","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setTradingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeTillUnlockLiquidity","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b506040518060400160405280600b81526020016a14d051d148115490cccc4d60aa1b815250604051806040016040528060048152602001635341474560e01b81525069d3c21bcecceda100000060648360049081620000709190620001c2565b5060056200007f8482620001c2565b506001829055620000926032836200028e565b600255600680546001600160a01b031916331790556008805460ff60b01b1916600160b01b179055620000c76005836200028e565b335f90815260208190526040812082905590620000e59084620002ae565b305f908152602081905260409020555060078054336001600160a01b0319918216811790925560088054909116909117905560095550620002d4915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200014d57607f821691505b6020821081036200016c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001bd57805f5260205f20601f840160051c81016020851015620001995750805b601f840160051c820191505b81811015620001ba575f8155600101620001a5565b50505b505050565b81516001600160401b03811115620001de57620001de62000124565b620001f681620001ef845462000138565b8462000172565b602080601f8311600181146200022c575f8415620002145750858301515b5f19600386901b1c1916600185901b17855562000286565b5f85815260208120601f198616915b828110156200025c578886015182559484019460019091019084016200023b565b50858210156200027a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f82620002a957634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115620002ce57634e487b7160e01b5f52601160045260245ffd5b92915050565b6116d480620002e25f395ff3fe6080604052600436106101db575f3560e01c806395d89b41116100fd578063d79875eb11610092578063ddca3f4311610062578063ddca3f431461056b578063e624c4bc14610580578063f275f64b1461059f578063f8b45b05146105be575f80fd5b8063d79875eb14610504578063d944392314610523578063d96a094a14610543578063ddadc27714610556575f80fd5b8063ae19139e116100cd578063ae19139e14610493578063b0d54bcf146104b2578063c415b95c146104d1578063d294f093146104f0575f80fd5b806395d89b411461042e5780639a540abf14610442578063a42dce8014610455578063a9059cbb14610474575f80fd5b8063313ce567116101735780636832e6ed116101435780636832e6ed146103ab57806370a08231146103c7578063715018a6146103fb5780638da5cb5b1461040f575f80fd5b8063313ce567146103265780635b8bec55146103415780635d0044ca1461037857806367b9a28614610397575f80fd5b806312a54b62116101ae57806312a54b62146102a15780631693e8d4146102d157806318160ddd146102f157806327de2e8514610305575f80fd5b80630531be92146101df57806306fdde031461022a5780630902f1ac1461024b57806311106ee214610274575b5f80fd5b3480156101ea575f80fd5b506102106101f936600461143f565b600a6020525f908152604090205463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b348015610235575f80fd5b5061023e6105d3565b604051610221919061145f565b348015610256575f80fd5b5061025f610663565b60408051928352602083019190915201610221565b34801561027f575f80fd5b5061029361028e3660046114ba565b61068b565b604051908152602001610221565b3480156102ac575f80fd5b506008546102c190600160b01b900460ff1681565b6040519015158152602001610221565b3480156102dc575f80fd5b506008546102c190600160a01b900460ff1681565b3480156102fc575f80fd5b50600154610293565b348015610310575f80fd5b5061032461031f3660046114e4565b61074b565b005b348015610331575f80fd5b5060405160128152602001610221565b34801561034c575f80fd5b50600754610360906001600160a01b031681565b6040516001600160a01b039091168152602001610221565b348015610383575f80fd5b50610324610392366004611507565b6107f4565b3480156103a2575f80fd5b50610324610823565b3480156103b6575f80fd5b506003546102109063ffffffff1681565b3480156103d2575f80fd5b506102936103e136600461143f565b6001600160a01b03165f9081526020819052604090205490565b348015610406575f80fd5b5061032461097d565b34801561041a575f80fd5b50600654610360906001600160a01b031681565b348015610439575f80fd5b5061023e6109b9565b6103246104503660046114e4565b6109c8565b348015610460575f80fd5b5061032461046f36600461143f565b610b69565b34801561047f575f80fd5b506102c161048e36600461151e565b610bb5565b34801561049e575f80fd5b506103246104ad366004611546565b610bca565b3480156104bd575f80fd5b506103246104cc366004611507565b610c12565b3480156104dc575f80fd5b50600854610360906001600160a01b031681565b3480156104fb575f80fd5b50610324610c80565b34801561050f575f80fd5b5061032461051e36600461155f565b610d7e565b34801561052e575f80fd5b506008546102c190600160a81b900460ff1681565b610324610551366004611507565b610fe2565b348015610561575f80fd5b50610293600b5481565b348015610576575f80fd5b5061029360095481565b34801561058b575f80fd5b5061032461059a36600461143f565b6111d9565b3480156105aa575f80fd5b506103246105b9366004611546565b611225565b3480156105c9575f80fd5b5061029360025481565b6060600480546105e29061157f565b80601f016020809104026020016040519081016040528092919081815260200182805461060e9061157f565b80156106595780601f1061063057610100808354040283529160200191610659565b820191905f5260205f20905b81548152906001019060200180831161063c57829003601f168201915b5050505050905090565b5f80600b544761067391906115cb565b305f9081526020819052604090205490939092509050565b5f805f610696610663565b9150915083156106f2575f6127106009546127106106b491906115cb565b6106be90886115de565b6106c891906115f5565b90506106d48684611614565b6106de83836115de565b6106e891906115f5565b9350505050610745565b5f6106fd8683611614565b61070784886115de565b61071191906115f5565b905061271060095461271061072691906115cb565b61073090836115de565b61073a91906115f5565b935061074592505050565b92915050565b6007546001600160a01b0316331461077e5760405162461bcd60e51b815260040161077590611627565b60405180910390fd5b60035463ffffffff8083169116106107d85760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e27742073686f7274656e206475726174696f6e0000000000006044820152606401610775565b6003805463ffffffff191663ffffffff92909216919091179055565b6006546001600160a01b0316331461081e5760405162461bcd60e51b815260040161077590611669565b600255565b6007546001600160a01b0316331461084d5760405162461bcd60e51b815260040161077590611627565b60035463ffffffff1642116108975760405162461bcd60e51b815260206004820152601060248201526f131a5c5d5a591a5d1e481b1bd8dad95960821b6044820152606401610775565b6008805460ff60a01b191690555f6108ad610663565b506040519091505f90339083908381818185875af1925050503d805f81146108f0576040519150601f19603f3d011682016040523d82523d5f602084013e6108f5565b606091505b50509050806109465760405162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f742072656d6f7665206c69717569646974790000000000006044820152606401610775565b6040514781527f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa9060200160405180910390a15050565b6006546001600160a01b031633146109a75760405162461bcd60e51b815260040161077590611669565b600680546001600160a01b0319169055565b6060600580546105e29061157f565b6007546001600160a01b031633146109f25760405162461bcd60e51b815260040161077590611627565b600854600160a81b900460ff1615610a4c5760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610775565b6008805460ff60a81b1916600160a81b17905534610a9a5760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152606401610775565b8063ffffffff164210610b025760405162461bcd60e51b815260206004820152602a60248201527f5468652074696d6520756e74696c20756e6c6f636b206c697175696469747920604482015269697320746f6f206c6f7760b01b6064820152608401610775565b6003805463ffffffff831663ffffffff1990911681179091556008805460ff60a01b1916600160a01b179055604080519182523460208301527f0c6c8102f3ac634c5fb327ba1a5d5c18030294d9f5cc309afa9e8a9020a77175910160405180910390a150565b6006546001600160a01b03163314610b935760405162461bcd60e51b815260040161077590611669565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b5f610bc133848461126d565b50600192915050565b6006546001600160a01b03163314610bf45760405162461bcd60e51b815260040161077590611669565b60088054911515600160b01b0260ff60b01b19909216919091179055565b6006546001600160a01b03163314610c3c5760405162461bcd60e51b815260040161077590611669565b6101f4811115610c7b5760405162461bcd60e51b815260206004820152600a6024820152696d61782035252066656560b01b6044820152606401610775565b600955565b6008546001600160a01b03163314610cda5760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74207468652066656520636f6c6c6563746f720000006044820152606401610775565b600b5447811115610ce85750475b5f600b819055604051339083908381818185875af1925050503d805f8114610d2b576040519150601f19603f3d011682016040523d82523d5f602084013e610d30565b606091505b5050905080610d7a5760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c881bd9881999594819985a5b195960521b6044820152606401610775565b5050565b600854600160a01b900460ff16610dcc5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f7420656e61626c6560701b6044820152606401610775565b5f80610dd6610663565b90925090505f610de68583611614565b610df084876115de565b610dfa91906115f5565b905080831015610e4c5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e207265736572766573000000006044820152606401610775565b5f61271060095483610e5e91906115de565b610e6891906115f5565b905080820391505f8211610eb45760405162461bcd60e51b815260206004820152601360248201527253656c6c20616d6f756e7420746f6f206c6f7760681b6044820152606401610775565b84821015610ef75760405162461bcd60e51b815260206004820152601060248201526f1cdb1a5c1c1859d9481c995858da195960821b6044820152606401610775565b600b805482019055610f0a33308861126d565b6040515f90339084908381818185875af1925050503d805f8114610f49576040519150601f19603f3d011682016040523d82523d5f602084013e610f4e565b606091505b5050905080610f905760405162461bcd60e51b815260206004820152600e60248201526d10dbdd5b19081b9bdd081cd95b1b60921b6044820152606401610775565b604080515f808252602082018a90528183018690526060820152905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a250505050505050565b600854600160a01b900460ff166110305760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f7420656e61626c6560701b6044820152606401610775565b5f6127106009543461104291906115de565b61104c91906115f5565b9050348190035f8061105c610663565b90925090505f8261106d83866115de565b61107791906115f5565b90505f81116110c05760405162461bcd60e51b8152602060048201526015602482015274426f7567687420616d6f756e7420746f6f206c6f7760581b6044820152606401610775565b600b805486019055600854600160b01b900460ff161561113a57600254335f908152602081905260409020546110f69083611614565b111561113a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610775565b8581101561117d5760405162461bcd60e51b815260206004820152601060248201526f1cdb1a5c1c1859d9481c995858da195960821b6044820152606401610775565b61118830338361126d565b604080513481525f602082018190528183015260608101839052905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a2505050505050565b6007546001600160a01b031633146112035760405162461bcd60e51b815260040161077590611627565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461124f5760405162461bcd60e51b815260040161077590611669565b60088054911515600160a01b0260ff60a01b19909216919091179055565b335f908152600a60205260409020544363ffffffff909116036112ec5760405162461bcd60e51b815260206004820152603160248201527f596f752063616e2774206d616b652074776f207472616e73616374696f6e7320604482015270696e207468652073616d6520626c6f636b60781b6064820152608401610775565b335f908152600a60209081526040808320805463ffffffff19164363ffffffff161790556001600160a01b0386168352908290529020548111156113815760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610775565b6001600160a01b038084165f9081526020819052604090208054839003905582166113b4576001805482900390556113d2565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141791815260200190565b60405180910390a3505050565b80356001600160a01b038116811461143a575f80fd5b919050565b5f6020828403121561144f575f80fd5b61145882611424565b9392505050565b5f602080835283518060208501525f5b8181101561148b5785810183015185820160400152820161146f565b505f604082860101526040601f19601f8301168501019250505092915050565b8035801515811461143a575f80fd5b5f80604083850312156114cb575f80fd5b823591506114db602084016114ab565b90509250929050565b5f602082840312156114f4575f80fd5b813563ffffffff81168114611458575f80fd5b5f60208284031215611517575f80fd5b5035919050565b5f806040838503121561152f575f80fd5b61153883611424565b946020939093013593505050565b5f60208284031215611556575f80fd5b611458826114ab565b5f8060408385031215611570575f80fd5b50508035926020909101359150565b600181811c9082168061159357607f821691505b6020821081036115b157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610745576107456115b7565b8082028115828204841417610745576107456115b7565b5f8261160f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610745576107456115b7565b60208082526022908201527f596f7520617265206e6f7420746865206c69717569646974792070726f76696460408201526132b960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220a340afafe036bba41adb1bcbbbf6126bb935d08f0a64a235062c76d19a79ffee64736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101db575f3560e01c806395d89b41116100fd578063d79875eb11610092578063ddca3f4311610062578063ddca3f431461056b578063e624c4bc14610580578063f275f64b1461059f578063f8b45b05146105be575f80fd5b8063d79875eb14610504578063d944392314610523578063d96a094a14610543578063ddadc27714610556575f80fd5b8063ae19139e116100cd578063ae19139e14610493578063b0d54bcf146104b2578063c415b95c146104d1578063d294f093146104f0575f80fd5b806395d89b411461042e5780639a540abf14610442578063a42dce8014610455578063a9059cbb14610474575f80fd5b8063313ce567116101735780636832e6ed116101435780636832e6ed146103ab57806370a08231146103c7578063715018a6146103fb5780638da5cb5b1461040f575f80fd5b8063313ce567146103265780635b8bec55146103415780635d0044ca1461037857806367b9a28614610397575f80fd5b806312a54b62116101ae57806312a54b62146102a15780631693e8d4146102d157806318160ddd146102f157806327de2e8514610305575f80fd5b80630531be92146101df57806306fdde031461022a5780630902f1ac1461024b57806311106ee214610274575b5f80fd5b3480156101ea575f80fd5b506102106101f936600461143f565b600a6020525f908152604090205463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b348015610235575f80fd5b5061023e6105d3565b604051610221919061145f565b348015610256575f80fd5b5061025f610663565b60408051928352602083019190915201610221565b34801561027f575f80fd5b5061029361028e3660046114ba565b61068b565b604051908152602001610221565b3480156102ac575f80fd5b506008546102c190600160b01b900460ff1681565b6040519015158152602001610221565b3480156102dc575f80fd5b506008546102c190600160a01b900460ff1681565b3480156102fc575f80fd5b50600154610293565b348015610310575f80fd5b5061032461031f3660046114e4565b61074b565b005b348015610331575f80fd5b5060405160128152602001610221565b34801561034c575f80fd5b50600754610360906001600160a01b031681565b6040516001600160a01b039091168152602001610221565b348015610383575f80fd5b50610324610392366004611507565b6107f4565b3480156103a2575f80fd5b50610324610823565b3480156103b6575f80fd5b506003546102109063ffffffff1681565b3480156103d2575f80fd5b506102936103e136600461143f565b6001600160a01b03165f9081526020819052604090205490565b348015610406575f80fd5b5061032461097d565b34801561041a575f80fd5b50600654610360906001600160a01b031681565b348015610439575f80fd5b5061023e6109b9565b6103246104503660046114e4565b6109c8565b348015610460575f80fd5b5061032461046f36600461143f565b610b69565b34801561047f575f80fd5b506102c161048e36600461151e565b610bb5565b34801561049e575f80fd5b506103246104ad366004611546565b610bca565b3480156104bd575f80fd5b506103246104cc366004611507565b610c12565b3480156104dc575f80fd5b50600854610360906001600160a01b031681565b3480156104fb575f80fd5b50610324610c80565b34801561050f575f80fd5b5061032461051e36600461155f565b610d7e565b34801561052e575f80fd5b506008546102c190600160a81b900460ff1681565b610324610551366004611507565b610fe2565b348015610561575f80fd5b50610293600b5481565b348015610576575f80fd5b5061029360095481565b34801561058b575f80fd5b5061032461059a36600461143f565b6111d9565b3480156105aa575f80fd5b506103246105b9366004611546565b611225565b3480156105c9575f80fd5b5061029360025481565b6060600480546105e29061157f565b80601f016020809104026020016040519081016040528092919081815260200182805461060e9061157f565b80156106595780601f1061063057610100808354040283529160200191610659565b820191905f5260205f20905b81548152906001019060200180831161063c57829003601f168201915b5050505050905090565b5f80600b544761067391906115cb565b305f9081526020819052604090205490939092509050565b5f805f610696610663565b9150915083156106f2575f6127106009546127106106b491906115cb565b6106be90886115de565b6106c891906115f5565b90506106d48684611614565b6106de83836115de565b6106e891906115f5565b9350505050610745565b5f6106fd8683611614565b61070784886115de565b61071191906115f5565b905061271060095461271061072691906115cb565b61073090836115de565b61073a91906115f5565b935061074592505050565b92915050565b6007546001600160a01b0316331461077e5760405162461bcd60e51b815260040161077590611627565b60405180910390fd5b60035463ffffffff8083169116106107d85760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e27742073686f7274656e206475726174696f6e0000000000006044820152606401610775565b6003805463ffffffff191663ffffffff92909216919091179055565b6006546001600160a01b0316331461081e5760405162461bcd60e51b815260040161077590611669565b600255565b6007546001600160a01b0316331461084d5760405162461bcd60e51b815260040161077590611627565b60035463ffffffff1642116108975760405162461bcd60e51b815260206004820152601060248201526f131a5c5d5a591a5d1e481b1bd8dad95960821b6044820152606401610775565b6008805460ff60a01b191690555f6108ad610663565b506040519091505f90339083908381818185875af1925050503d805f81146108f0576040519150601f19603f3d011682016040523d82523d5f602084013e6108f5565b606091505b50509050806109465760405162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f742072656d6f7665206c69717569646974790000000000006044820152606401610775565b6040514781527f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa9060200160405180910390a15050565b6006546001600160a01b031633146109a75760405162461bcd60e51b815260040161077590611669565b600680546001600160a01b0319169055565b6060600580546105e29061157f565b6007546001600160a01b031633146109f25760405162461bcd60e51b815260040161077590611627565b600854600160a81b900460ff1615610a4c5760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610775565b6008805460ff60a81b1916600160a81b17905534610a9a5760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152606401610775565b8063ffffffff164210610b025760405162461bcd60e51b815260206004820152602a60248201527f5468652074696d6520756e74696c20756e6c6f636b206c697175696469747920604482015269697320746f6f206c6f7760b01b6064820152608401610775565b6003805463ffffffff831663ffffffff1990911681179091556008805460ff60a01b1916600160a01b179055604080519182523460208301527f0c6c8102f3ac634c5fb327ba1a5d5c18030294d9f5cc309afa9e8a9020a77175910160405180910390a150565b6006546001600160a01b03163314610b935760405162461bcd60e51b815260040161077590611669565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b5f610bc133848461126d565b50600192915050565b6006546001600160a01b03163314610bf45760405162461bcd60e51b815260040161077590611669565b60088054911515600160b01b0260ff60b01b19909216919091179055565b6006546001600160a01b03163314610c3c5760405162461bcd60e51b815260040161077590611669565b6101f4811115610c7b5760405162461bcd60e51b815260206004820152600a6024820152696d61782035252066656560b01b6044820152606401610775565b600955565b6008546001600160a01b03163314610cda5760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74207468652066656520636f6c6c6563746f720000006044820152606401610775565b600b5447811115610ce85750475b5f600b819055604051339083908381818185875af1925050503d805f8114610d2b576040519150601f19603f3d011682016040523d82523d5f602084013e610d30565b606091505b5050905080610d7a5760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c881bd9881999594819985a5b195960521b6044820152606401610775565b5050565b600854600160a01b900460ff16610dcc5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f7420656e61626c6560701b6044820152606401610775565b5f80610dd6610663565b90925090505f610de68583611614565b610df084876115de565b610dfa91906115f5565b905080831015610e4c5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e207265736572766573000000006044820152606401610775565b5f61271060095483610e5e91906115de565b610e6891906115f5565b905080820391505f8211610eb45760405162461bcd60e51b815260206004820152601360248201527253656c6c20616d6f756e7420746f6f206c6f7760681b6044820152606401610775565b84821015610ef75760405162461bcd60e51b815260206004820152601060248201526f1cdb1a5c1c1859d9481c995858da195960821b6044820152606401610775565b600b805482019055610f0a33308861126d565b6040515f90339084908381818185875af1925050503d805f8114610f49576040519150601f19603f3d011682016040523d82523d5f602084013e610f4e565b606091505b5050905080610f905760405162461bcd60e51b815260206004820152600e60248201526d10dbdd5b19081b9bdd081cd95b1b60921b6044820152606401610775565b604080515f808252602082018a90528183018690526060820152905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a250505050505050565b600854600160a01b900460ff166110305760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f7420656e61626c6560701b6044820152606401610775565b5f6127106009543461104291906115de565b61104c91906115f5565b9050348190035f8061105c610663565b90925090505f8261106d83866115de565b61107791906115f5565b90505f81116110c05760405162461bcd60e51b8152602060048201526015602482015274426f7567687420616d6f756e7420746f6f206c6f7760581b6044820152606401610775565b600b805486019055600854600160b01b900460ff161561113a57600254335f908152602081905260409020546110f69083611614565b111561113a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610775565b8581101561117d5760405162461bcd60e51b815260206004820152601060248201526f1cdb1a5c1c1859d9481c995858da195960821b6044820152606401610775565b61118830338361126d565b604080513481525f602082018190528183015260608101839052905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a2505050505050565b6007546001600160a01b031633146112035760405162461bcd60e51b815260040161077590611627565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461124f5760405162461bcd60e51b815260040161077590611669565b60088054911515600160a01b0260ff60a01b19909216919091179055565b335f908152600a60205260409020544363ffffffff909116036112ec5760405162461bcd60e51b815260206004820152603160248201527f596f752063616e2774206d616b652074776f207472616e73616374696f6e7320604482015270696e207468652073616d6520626c6f636b60781b6064820152608401610775565b335f908152600a60209081526040808320805463ffffffff19164363ffffffff161790556001600160a01b0386168352908290529020548111156113815760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610775565b6001600160a01b038084165f9081526020819052604090208054839003905582166113b4576001805482900390556113d2565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141791815260200190565b60405180910390a3505050565b80356001600160a01b038116811461143a575f80fd5b919050565b5f6020828403121561144f575f80fd5b61145882611424565b9392505050565b5f602080835283518060208501525f5b8181101561148b5785810183015185820160400152820161146f565b505f604082860101526040601f19601f8301168501019250505092915050565b8035801515811461143a575f80fd5b5f80604083850312156114cb575f80fd5b823591506114db602084016114ab565b90509250929050565b5f602082840312156114f4575f80fd5b813563ffffffff81168114611458575f80fd5b5f60208284031215611517575f80fd5b5035919050565b5f806040838503121561152f575f80fd5b61153883611424565b946020939093013593505050565b5f60208284031215611556575f80fd5b611458826114ab565b5f8060408385031215611570575f80fd5b50508035926020909101359150565b600181811c9082168061159357607f821691505b6020821081036115b157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610745576107456115b7565b8082028115828204841417610745576107456115b7565b5f8261160f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610745576107456115b7565b60208082526022908201527f596f7520617265206e6f7420746865206c69717569646974792070726f76696460408201526132b960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220a340afafe036bba41adb1bcbbbf6126bb935d08f0a64a235062c76d19a79ffee64736f6c63430008180033

Deployed Bytecode Sourcemap

12773:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:57;;;;;;;;;;-1:-1:-1;1302:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;557:10:1;545:23;;;527:42;;515:2;500:18;1302:57:0;;;;;;;;2733:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5314:195::-;;;;;;;;;;;;;:::i;:::-;;;;1307:25:1;;;1363:2;1348:18;;1341:34;;;;1280:18;5314:195:0;1133:248:1;9635:550:0;;;;;;;;;;-1:-1:-1;9635:550:0;;;;;:::i;:::-;;:::i;:::-;;;1950:25:1;;;1938:2;1923:18;9635:550:0;1804:177:1;1227:27:0;;;;;;;;;;-1:-1:-1;1227:27:0;;;;-1:-1:-1;;;1227:27:0;;;;;;;;;2151:14:1;;2144:22;2126:41;;2114:2;2099:18;1227:27:0;1986:187:1;1162:25:0;;;;;;;;;;-1:-1:-1;1162:25:0;;;;-1:-1:-1;;;1162:25:0;;;;;;3296:99;;;;;;;;;;-1:-1:-1;3375:12:0;;3296:99;;9094:315;;;;;;;;;;-1:-1:-1;9094:315:0;;;;;:::i;:::-;;:::i;:::-;;3147:84;;;;;;;;;;-1:-1:-1;3147:84:0;;3221:2;2601:36:1;;2589:2;2574:18;3147:84:0;2459:184:1;1087:32:0;;;;;;;;;;-1:-1:-1;1087:32:0;;;;-1:-1:-1;;;;;1087:32:0;;;;;;-1:-1:-1;;;;;2812:32:1;;;2794:51;;2782:2;2767:18;1087:32:0;2648:203:1;6501:104:0;;;;;;;;;;-1:-1:-1;6501:104:0;;;;;:::i;:::-;;:::i;8382:452::-;;;;;;;;;;;;;:::i;956:37::-;;;;;;;;;;-1:-1:-1;956:37:0;;;;;;;;3458:118;;;;;;;;;;-1:-1:-1;3458:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3550:18:0;3523:7;3550:18;;;;;;;;;;;;3458:118;7002:85;;;;;;;;;;;;;:::i;1060:20::-;;;;;;;;;;-1:-1:-1;1060:20:0;;;;-1:-1:-1;;;;;1060:20:0;;;2943:95;;;;;;;;;;;;;:::i;7691:576::-;;;;;;:::i;:::-;;:::i;6760:120::-;;;;;;;;;;-1:-1:-1;6760:120:0;;;;;:::i;:::-;;:::i;3831:150::-;;;;;;;;;;-1:-1:-1;3831:150:0;;;;;:::i;:::-;;:::i;5988:120::-;;;;;;;;;;-1:-1:-1;5988:120:0;;;;;:::i;:::-;;:::i;6236:130::-;;;;;;;;;;-1:-1:-1;6236:130:0;;;;;:::i;:::-;;:::i;1126:27::-;;;;;;;;;;-1:-1:-1;1126:27:0;;;;-1:-1:-1;;;;;1126:27:0;;;11232:467;;;;;;;;;;;;;:::i;11786:980::-;;;;;;;;;;-1:-1:-1;11786:980:0;;;;;:::i;:::-;;:::i;1194:26::-;;;;;;;;;;-1:-1:-1;1194:26:0;;;;-1:-1:-1;;;1194:26:0;;;;;;10272:952;;;;;;:::i;:::-;;:::i;1366:31::-;;;;;;;;;;;;;;;;1261:18;;;;;;;;;;;;;;;;7269:168;;;;;;;;;;-1:-1:-1;7269:168:0;;;;;:::i;:::-;;:::i;5685:112::-;;;;;;;;;;-1:-1:-1;5685:112:0;;;;;:::i;:::-;;:::i;925:24::-;;;;;;;;;;;;;;;;2733:91;2778:13;2811:5;2804:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2733:91;:::o;5314:195::-;5358:7;5367;5434:16;;5410:21;:40;;;;:::i;:::-;5484:4;5466:9;:24;;;;;;;;;;;5387:114;;5466:24;;-1:-1:-1;5314:195:0;-1:-1:-1;5314:195:0:o;9635:550::-;9729:7;9750:18;9770:20;9794:13;:11;:13::i;:::-;9749:58;;;;9824:4;9820:358;;;9845:21;9895:5;9887:3;;9879:5;:11;;;;:::i;:::-;9870:21;;:5;:21;:::i;:::-;9869:31;;;;:::i;:::-;9845:55;-1:-1:-1;9958:18:0;9971:5;9958:10;:18;:::i;:::-;9924:28;9940:12;9924:13;:28;:::i;:::-;9922:55;;;;:::i;:::-;9915:62;;;;;;;9820:358;10010:16;10055:20;10070:5;10055:12;:20;:::i;:::-;10031:18;10039:10;10031:5;:18;:::i;:::-;10029:47;;;;:::i;:::-;10010:66;;10131:5;10123:3;;10115:5;:11;;;;:::i;:::-;10103:24;;:8;:24;:::i;:::-;10102:34;;;;:::i;:::-;10091:45;-1:-1:-1;10151:15:0;;-1:-1:-1;;;10151:15:0;9635:550;;;;;:::o;9094:315::-;1610:17;;-1:-1:-1;;;;;1610:17:0;1596:10;:31;1574:115;;;;-1:-1:-1;;;1574:115:0;;;;;;;:::i;:::-;;;;;;;;;9234:23:::1;::::0;:50:::1;::::0;;::::1;:23:::0;::::1;:50;9212:126;;;::::0;-1:-1:-1;;;9212:126:0;;5518:2:1;9212:126:0::1;::::0;::::1;5500:21:1::0;5557:2;5537:18;;;5530:30;5596:28;5576:18;;;5569:56;5642:18;;9212:126:0::1;5316:350:1::0;9212:126:0::1;9351:23;:50:::0;;-1:-1:-1;;9351:50:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;9094:315::o;6501:104::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;6574:9:::1;:23:::0;6501:104::o;8382:452::-;1610:17;;-1:-1:-1;;;;;1610:17:0;1596:10;:31;1574:115;;;;-1:-1:-1;;;1574:115:0;;;;;;;:::i;:::-;8475:23:::1;::::0;::::1;;8457:15;:41;8449:70;;;::::0;-1:-1:-1;;;8449:70:0;;6234:2:1;8449:70:0::1;::::0;::::1;6216:21:1::0;6273:2;6253:18;;;6246:30;-1:-1:-1;;;6292:18:1;;;6285:46;6348:18;;8449:70:0::1;6032:340:1::0;8449:70:0::1;8532:13;:21:::0;;-1:-1:-1;;;;8532:21:0::1;::::0;;8548:5:::1;8591:13;:11;:13::i;:::-;-1:-1:-1::0;8636:47:0::1;::::0;8566:38;;-1:-1:-1;8618:12:0::1;::::0;8644:10:::1;::::0;8566:38;;8618:12;8636:47;8618:12;8636:47;8566:38;8644:10;8636:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8617:66;;;8699:7;8694:77;;8723:36;::::0;-1:-1:-1;;;8723:36:0;;6789:2:1;8723:36:0::1;::::0;::::1;6771:21:1::0;6828:2;6808:18;;;6801:30;6867:28;6847:18;;;6840:56;6913:18;;8723:36:0::1;6587:350:1::0;8694:77:0::1;8788:38;::::0;8804:21:::1;1950:25:1::0;;8788:38:0::1;::::0;1938:2:1;1923:18;8788:38:0::1;;;;;;;8438:396;;8382:452::o:0;7002:85::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;7061:5:::1;:18:::0;;-1:-1:-1;;;;;;7061:18:0::1;::::0;;7002:85::o;2943:95::-;2990:13;3023:7;3016:14;;;;;:::i;7691:576::-;1610:17;;-1:-1:-1;;;;;1610:17:0;1596:10;:31;1574:115;;;;-1:-1:-1;;;1574:115:0;;;;;;;:::i;:::-;7818:14:::1;::::0;-1:-1:-1;;;7818:14:0;::::1;;;:23;7810:59;;;::::0;-1:-1:-1;;;7810:59:0;;7144:2:1;7810:59:0::1;::::0;::::1;7126:21:1::0;7183:2;7163:18;;;7156:30;7222:25;7202:18;;;7195:53;7265:18;;7810:59:0::1;6942:347:1::0;7810:59:0::1;7882:14;:21:::0;;-1:-1:-1;;;;7882:21:0::1;-1:-1:-1::0;;;7882:21:0::1;::::0;;7924:9:::1;7916:37;;;::::0;-1:-1:-1;;;7916:37:0;;7496:2:1;7916:37:0::1;::::0;::::1;7478:21:1::0;7535:2;7515:18;;;7508:30;-1:-1:-1;;;7554:18:1;;;7547:41;7605:18;;7916:37:0::1;7294:335:1::0;7916:37:0::1;8004:24;7986:42;;:15;:42;7964:134;;;::::0;-1:-1:-1;;;7964:134:0;;7836:2:1;7964:134:0::1;::::0;::::1;7818:21:1::0;7875:2;7855:18;;;7848:30;7914:34;7894:18;;;7887:62;-1:-1:-1;;;7965:18:1;;;7958:40;8015:19;;7964:134:0::1;7634:406:1::0;7964:134:0::1;8111:23;:50:::0;;::::1;::::0;::::1;-1:-1:-1::0;;8111:50:0;;::::1;::::0;::::1;::::0;;;8172:13:::1;:20:::0;;-1:-1:-1;;;;8172:20:0::1;-1:-1:-1::0;;;8172:20:0::1;::::0;;8210:49:::1;::::0;;8217:42:1;;;8249:9:0::1;8290:2:1::0;8275:18;;8268:34;8210:49:0::1;::::0;8190:18:1;8210:49:0::1;;;;;;;7691:576:::0;:::o;6760:120::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;6841:12:::1;:31:::0;;-1:-1:-1;;;;;;6841:31:0::1;-1:-1:-1::0;;;;;6841:31:0;;;::::1;::::0;;;::::1;::::0;;6760:120::o;3831:150::-;3900:4;3917:32;3927:10;3939:2;3943:5;3917:9;:32::i;:::-;-1:-1:-1;3969:4:0;3831:150;;;;:::o;5988:120::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;6066:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;6066:34:0::1;-1:-1:-1::0;;;;6066:34:0;;::::1;::::0;;;::::1;::::0;;5988:120::o;6236:130::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;6319:3:::1;6311:4;:11;;6303:34;;;::::0;-1:-1:-1;;;6303:34:0;;8515:2:1;6303:34:0::1;::::0;::::1;8497:21:1::0;8554:2;8534:18;;;8527:30;-1:-1:-1;;;8573:18:1;;;8566:40;8623:18;;6303:34:0::1;8313:334:1::0;6303:34:0::1;6348:3;:10:::0;6236:130::o;11232:467::-;1778:12;;-1:-1:-1;;;;;1778:12:0;1764:10;:26;1756:68;;;;-1:-1:-1;;;1756:68:0;;8854:2:1;1756:68:0;;;8836:21:1;8893:2;8873:18;;;8866:30;8932:31;8912:18;;;8905:59;8981:18;;1756:68:0;8652:353:1;1756:68:0;11314:16:::1;::::0;11363:21:::1;11347:37:::0;::::1;11343:178;;;-1:-1:-1::0;11500:21:0::1;11343:178;11553:1;11534:16;:20:::0;;;11584:50:::1;::::0;11592:10:::1;::::0;11616:13;;11553:1;11584:50;11553:1;11584:50;11616:13;11592:10;11584:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11565:69;;;11650:7;11645:46;;11659:32;::::0;-1:-1:-1;;;11659:32:0;;9212:2:1;11659:32:0::1;::::0;::::1;9194:21:1::0;9251:2;9231:18;;;9224:30;-1:-1:-1;;;9270:18:1;;;9263:52;9332:18;;11659:32:0::1;9010:346:1::0;11645:46:0::1;11279:420;;11232:467::o:0;11786:980::-;11868:13;;-1:-1:-1;;;11868:13:0;;;;11860:44;;;;-1:-1:-1;;;11860:44:0;;9563:2:1;11860:44:0;;;9545:21:1;9602:2;9582:18;;;9575:30;-1:-1:-1;;;9621:18:1;;;9614:48;9679:18;;11860:44:0;9361:342:1;11860:44:0;11918:18;11938:20;11962:13;:11;:13::i;:::-;11917:58;;-1:-1:-1;11917:58:0;-1:-1:-1;11988:17:0;12050:25;12065:10;11917:58;12050:25;:::i;:::-;12009:23;12022:10;12009;:23;:::i;:::-;12008:68;;;;:::i;:::-;11988:88;;12111:9;12097:10;:23;;12089:64;;;;-1:-1:-1;;;12089:64:0;;9910:2:1;12089:64:0;;;9892:21:1;9949:2;9929:18;;;9922:30;9988;9968:18;;;9961:58;10036:18;;12089:64:0;9708:352:1;12089:64:0;12166:17;12206:5;12199:3;;12187:9;:15;;;;:::i;:::-;12186:25;;;;:::i;:::-;12166:45;;12262:9;12249:22;;;;12313:1;12301:9;:13;12293:45;;;;-1:-1:-1;;;12293:45:0;;10267:2:1;12293:45:0;;;10249:21:1;10306:2;10286:18;;;10279:30;-1:-1:-1;;;10325:18:1;;;10318:49;10384:18;;12293:45:0;10065:343:1;12293:45:0;12370:12;12357:9;:25;;12349:54;;;;-1:-1:-1;;;12349:54:0;;10615:2:1;12349:54:0;;;10597:21:1;10654:2;10634:18;;;10627:30;-1:-1:-1;;;10673:18:1;;;10666:46;10729:18;;12349:54:0;10413:340:1;12349:54:0;12441:16;:29;;;;;;12494:48;12504:10;12524:4;12531:10;12494:9;:48::i;:::-;12574:46;;12556:12;;12582:10;;12606:9;;12556:12;12574:46;12556:12;12574:46;12606:9;12582:10;12574:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12555:65;;;12636:7;12631:65;;12660:24;;-1:-1:-1;;;12660:24:0;;10960:2:1;12660:24:0;;;10942:21:1;10999:2;10979:18;;;10972:30;-1:-1:-1;;;11018:18:1;;;11011:44;11072:18;;12660:24:0;10758:338:1;12631:65:0;12713:45;;;12730:1;11348:25:1;;;11404:2;11389:18;;11382:34;;;11432:18;;;11425:34;;;11490:2;11475:18;;11468:34;12713:45:0;;12718:10;;12713:45;;;;;;11335:3:1;12713:45:0;;;11849:917;;;;;11786:980;;:::o;10272:952::-;10341:13;;-1:-1:-1;;;10341:13:0;;;;10333:44;;;;-1:-1:-1;;;10333:44:0;;9563:2:1;10333:44:0;;;9545:21:1;9602:2;9582:18;;;9575:30;-1:-1:-1;;;9621:18:1;;;9614:48;9679:18;;10333:44:0;9361:342:1;10333:44:0;10390:17;10430:5;10423:3;;10411:9;:15;;;;:::i;:::-;10410:25;;;;:::i;:::-;10390:45;-1:-1:-1;10517:9:0;:21;;;10448:19;;10607:13;:11;:13::i;:::-;10562:58;;-1:-1:-1;10562:58:0;-1:-1:-1;10633:19:0;10562:58;10656:26;10562:58;10656:11;:26;:::i;:::-;10655:41;;;;:::i;:::-;10633:63;;10729:1;10715:11;:15;10707:49;;;;-1:-1:-1;;;10707:49:0;;11715:2:1;10707:49:0;;;11697:21:1;11754:2;11734:18;;;11727:30;-1:-1:-1;;;11773:18:1;;;11766:51;11834:18;;10707:49:0;11513:345:1;10707:49:0;10792:16;:29;;;;;;10849:15;;-1:-1:-1;;;10849:15:0;;;;10845:177;;;10946:9;;10931:10;10921:9;:21;;;;;;;;;;;10907:35;;:11;:35;:::i;:::-;:48;;10881:129;;;;-1:-1:-1;;;10881:129:0;;12065:2:1;10881:129:0;;;12047:21:1;12104:2;12084:18;;;12077:30;-1:-1:-1;;;12123:18:1;;;12116:49;12182:18;;10881:129:0;11863:343:1;10881:129:0;11057:12;11042:11;:27;;11034:56;;;;-1:-1:-1;;;11034:56:0;;10615:2:1;11034:56:0;;;10597:21:1;10654:2;10634:18;;;10627:30;-1:-1:-1;;;10673:18:1;;;10666:46;10729:18;;11034:56:0;10413:340:1;11034:56:0;11103:49;11121:4;11128:10;11140:11;11103:9;:49::i;:::-;11170:46;;;11187:9;11348:25:1;;11198:1:0;11404:2:1;11389:18;;11382:34;;;11432:18;;;11425:34;11490:2;11475:18;;11468:34;;;11170:46:0;;11175:10;;11170:46;;;;;;11335:3:1;11170:46:0;;;10322:902;;;;;10272:952;:::o;7269:168::-;1610:17;;-1:-1:-1;;;;;1610:17:0;1596:10;:31;1574:115;;;;-1:-1:-1;;;1574:115:0;;;;;;;:::i;:::-;7388:17:::1;:41:::0;;-1:-1:-1;;;;;;7388:41:0::1;-1:-1:-1::0;;;;;7388:41:0;;;::::1;::::0;;;::::1;::::0;;7269:168::o;5685:112::-;1460:5;;-1:-1:-1;;;;;1460:5:0;1446:10;:19;1438:64;;;;-1:-1:-1;;;1438:64:0;;;;;;;:::i;:::-;5759:13:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;5759:30:0::1;-1:-1:-1::0;;;;5759:30:0;;::::1;::::0;;;::::1;::::0;;5685:112::o;4402:801::-;4562:10;4546:27;;;;:15;:27;;;;;;4577:12;4546:27;;;;:43;4524:142;;;;-1:-1:-1;;;4524:142:0;;12825:2:1;4524:142:0;;;12807:21:1;12864:2;12844:18;;;12837:30;12903:34;12883:18;;;12876:62;-1:-1:-1;;;12954:18:1;;;12947:47;13011:19;;4524:142:0;12623:413:1;4524:142:0;4695:10;4679:27;;;;:15;:27;;;;;;;;:50;;-1:-1:-1;;4679:50:0;4716:12;4679:50;;;;;-1:-1:-1;;;;;4764:15:0;;;;;;;;;;;-1:-1:-1;;4764:24:0;4742:112;;;;-1:-1:-1;;;4742:112:0;;13243:2:1;4742:112:0;;;13225:21:1;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:36;13418:19;;4742:112:0;13041:402:1;4742:112:0;-1:-1:-1;;;;;4892:15:0;;;:9;:15;;;;;;;;;;:24;;;;;;;4944:16;;4940:213;;5006:12;:21;;;;;;;4940:213;;;-1:-1:-1;;;;;5104:13:0;;:9;:13;;;;;;;;;;:22;;;;;;4940:213;5185:2;-1:-1:-1;;;;;5170:25:0;5179:4;-1:-1:-1;;;;;5170:25:0;;5189:5;5170:25;;;;1950::1;;1938:2;1923:18;;1804:177;5170:25:0;;;;;;;;4402:801;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;580:548::-;692:4;721:2;750;739:9;732:21;782:6;776:13;825:6;820:2;809:9;805:18;798:34;850:1;860:140;874:6;871:1;868:13;860:140;;;969:14;;;965:23;;959:30;935:17;;;954:2;931:26;924:66;889:10;;860:140;;;864:3;1049:1;1044:2;1035:6;1024:9;1020:22;1016:31;1009:42;1119:2;1112;1108:7;1103:2;1095:6;1091:15;1087:29;1076:9;1072:45;1068:54;1060:62;;;;580:548;;;;:::o;1386:160::-;1451:20;;1507:13;;1500:21;1490:32;;1480:60;;1536:1;1533;1526:12;1551:248;1616:6;1624;1677:2;1665:9;1656:7;1652:23;1648:32;1645:52;;;1693:1;1690;1683:12;1645:52;1729:9;1716:23;1706:33;;1758:35;1789:2;1778:9;1774:18;1758:35;:::i;:::-;1748:45;;1551:248;;;;;:::o;2178:276::-;2236:6;2289:2;2277:9;2268:7;2264:23;2260:32;2257:52;;;2305:1;2302;2295:12;2257:52;2344:9;2331:23;2394:10;2387:5;2383:22;2376:5;2373:33;2363:61;;2420:1;2417;2410:12;2856:180;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;-1:-1:-1;3007:23:1;;2856:180;-1:-1:-1;2856:180:1:o;3041:254::-;3109:6;3117;3170:2;3158:9;3149:7;3145:23;3141:32;3138:52;;;3186:1;3183;3176:12;3138:52;3209:29;3228:9;3209:29;:::i;:::-;3199:39;3285:2;3270:18;;;;3257:32;;-1:-1:-1;;;3041:254:1:o;3300:180::-;3356:6;3409:2;3397:9;3388:7;3384:23;3380:32;3377:52;;;3425:1;3422;3415:12;3377:52;3448:26;3464:9;3448:26;:::i;3485:248::-;3553:6;3561;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;;3653:23:1;;;3723:2;3708:18;;;3695:32;;-1:-1:-1;3485:248:1:o;3738:380::-;3817:1;3813:12;;;;3860;;;3881:61;;3935:4;3927:6;3923:17;3913:27;;3881:61;3988:2;3980:6;3977:14;3957:18;3954:38;3951:161;;4034:10;4029:3;4025:20;4022:1;4015:31;4069:4;4066:1;4059:15;4097:4;4094:1;4087:15;3951:161;;3738:380;;;:::o;4123:127::-;4184:10;4179:3;4175:20;4172:1;4165:31;4215:4;4212:1;4205:15;4239:4;4236:1;4229:15;4255:128;4322:9;;;4343:11;;;4340:37;;;4357:18;;:::i;4388:168::-;4461:9;;;4492;;4509:15;;;4503:22;;4489:37;4479:71;;4530:18;;:::i;4561:217::-;4601:1;4627;4617:132;;4671:10;4666:3;4662:20;4659:1;4652:31;4706:4;4703:1;4696:15;4734:4;4731:1;4724:15;4617:132;-1:-1:-1;4763:9:1;;4561:217::o;4783:125::-;4848:9;;;4869:10;;;4866:36;;;4882:18;;:::i;4913:398::-;5115:2;5097:21;;;5154:2;5134:18;;;5127:30;5193:34;5188:2;5173:18;;5166:62;-1:-1:-1;;;5259:2:1;5244:18;;5237:32;5301:3;5286:19;;4913:398::o;5671:356::-;5873:2;5855:21;;;5892:18;;;5885:30;5951:34;5946:2;5931:18;;5924:62;6018:2;6003:18;;5671:356::o

Swarm Source

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