ETH Price: $3,122.60 (-0.03%)
 

Overview

Max Total Supply

139,460,747.176841148170625072 GLE

Holders

2,528

Transfers

-
6

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
GreenLifeEnergy

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-06-10
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

/**
 * @title Owner
 * @dev Set & change owner
 */
contract Ownable {

    address private owner;
    
    // event for EVM logging
    event OwnerSet(address indexed oldOwner, address indexed newOwner);
    
    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == owner, "Caller is not owner");
        _;
    }
    
    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    /**
     * @dev Return owner address 
     * @return address of owner
     */
    function getOwner() external view returns (address) {
        return owner;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

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

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

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

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

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

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

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

interface ISwapper {
    function buy(address recipient, uint256 minOut) external payable;
}

/**
    Modular Upgradeable-Tokenomics Immutable Token System Developed by DeFi Mark
 */
contract GreenLifeEnergy is IERC20, Ownable {

    // total supply
    uint256 private _totalSupply = 500_000_000 * 10**18;

    // token data
    string private constant _name = 'Green Life Energy';
    string private constant _symbol = 'GLE';
    uint8  private constant _decimals = 18;

    // balances
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    // Taxation on transfers
    uint256 public buyFee             = 500;
    uint256 public sellFee            = 500;
    uint256 public transferFee        = 0;
    uint256 public constant TAX_DENOM = 10000;

    // permissions
    struct Permissions {
        bool isFeeExempt;
        bool isLiquidityPool;
    }
    mapping ( address => Permissions ) public permissions;

    // Fee Recipients
    address public sellFeeRecipient;
    address public buyFeeRecipient;
    address public transferFeeRecipient;

    // Trigger Fee Recipients
    bool public triggerBuyRecipient = false;
    bool public triggerTransferRecipient = false;
    bool public triggerSellRecipient = false;

    // Swapper Contract
    address public swapper;
    
    constructor() {

        // exempt sender for tax-free initial distribution
        permissions[msg.sender].isFeeExempt = true;

        // initial supply allocation
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    /////////////////////////////////
    /////    ERC20 FUNCTIONS    /////
    /////////////////////////////////

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
    function name() public pure override returns (string memory) {
        return _name;
    }

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

    function decimals() public pure override returns (uint8) {
        return _decimals;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /** Transfer Function */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transfer(msg.sender, recipient, amount);
    }

    /** Transfer Function */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(
            _allowances[sender][msg.sender] >= amount,
            'Insufficient Allowance'
        );
        _allowances[sender][msg.sender] -= amount;
        return _transfer(sender, recipient, amount);
    }


    /////////////////////////////////
    /////   PUBLIC FUNCTIONS    /////
    /////////////////////////////////


    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function burnFrom(address account, uint256 amount) external {
        require(
            _allowances[account][msg.sender] >= amount,
            'Insufficient Allowance'
        );
        _allowances[account][msg.sender] -= amount;
        _burn(account, amount);
    }

    function buyFor(address recipient, uint256 minOut) external payable {
        ISwapper(swapper).buy{value: msg.value}(recipient, minOut);
    }

    receive() external payable {
        ISwapper(swapper).buy{value: msg.value}(msg.sender, 1);
    }

    /////////////////////////////////
    /////    OWNER FUNCTIONS    /////
    /////////////////////////////////

    function setSwapper(address _swapper) external onlyOwner {
        swapper = _swapper;
    }

    function withdrawTokens(address token) external onlyOwner {
        require(token != address(0), 'Zero');
        bool s = IERC20(token).transfer(msg.sender, IERC20(token).balanceOf(address(this)));
        require(s);
    }

    function withdrawNative() external onlyOwner {
        (bool s,) = payable(msg.sender).call{value: address(this).balance}("");
        require(s);
    }

    function setTransferFeeRecipient(address recipient) external onlyOwner {
        require(recipient != address(0), 'Zero');
        transferFeeRecipient = recipient;
        permissions[recipient].isFeeExempt = true;
    }

    function setBuyFeeRecipient(address recipient) external onlyOwner {
        require(recipient != address(0), 'Zero');
        buyFeeRecipient = recipient;
        permissions[recipient].isFeeExempt = true;
    }

    function setSellFeeRecipient(address recipient) external onlyOwner {
        require(recipient != address(0), 'Zero');
        sellFeeRecipient = recipient;
        permissions[recipient].isFeeExempt = true;
    }

    function registerAutomatedMarketMaker(address account) external onlyOwner {
        require(account != address(0), 'Zero Address');
        require(!permissions[account].isLiquidityPool, 'AMM');
        permissions[account].isLiquidityPool = true;
    }

    function unRegisterAutomatedMarketMaker(address account) external onlyOwner {
        require(account != address(0), 'Zero Address');
        require(permissions[account].isLiquidityPool, 'Not AMM');
        permissions[account].isLiquidityPool = false;
    }

    function setAutoTriggers(
        bool autoBuyTrigger,
        bool autoTransferTrigger,
        bool autoSellTrigger
    ) external onlyOwner {
        triggerBuyRecipient = autoBuyTrigger;
        triggerTransferRecipient = autoTransferTrigger;
        triggerSellRecipient = autoSellTrigger;
    }

    function setFees(uint _buyFee, uint _sellFee, uint _transferFee) external onlyOwner {
        require(
            _buyFee <= 1000,
            'Buy Fee Too High'
        );
        require(
            _sellFee <= 1000,
            'Sell Fee Too High'
        );
        require(
            _transferFee <= 1000,
            'Transfer Fee Too High'
        );

        buyFee = _buyFee;
        sellFee = _sellFee;
        transferFee = _transferFee;
    }

    function setFeeExempt(address account, bool isExempt) external onlyOwner {
        require(account != address(0), 'Zero Address');
        permissions[account].isFeeExempt = isExempt;
    }

    
    /////////////////////////////////
    /////     READ FUNCTIONS    /////
    /////////////////////////////////

    function getTax(address sender, address recipient, uint256 amount) public view returns (uint256, address, bool) {
        if ( permissions[sender].isFeeExempt || permissions[recipient].isFeeExempt ) {
            return (0, address(0), false);
        }
        return permissions[recipient].isLiquidityPool ? 
               ((amount * sellFee) / TAX_DENOM, sellFeeRecipient, triggerSellRecipient) :
               permissions[sender].isLiquidityPool ? 
                ((amount * buyFee) / TAX_DENOM, buyFeeRecipient, triggerBuyRecipient) : 
               ((amount * transferFee) / TAX_DENOM, transferFeeRecipient, triggerTransferRecipient);
    }

    //////////////////////////////////
    /////   INTERNAL FUNCTIONS   /////
    //////////////////////////////////

    /** Internal Transfer */
    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(
            recipient != address(0),
            'Zero Recipient'
        );
        require(
            amount > 0,
            'Zero Amount'
        );
        require(
            amount <= balanceOf(sender),
            'Insufficient Balance'
        );
        
        // decrement sender balance
        _balances[sender] -= amount;

        // fee for transaction
        (uint256 fee, address feeDestination, bool trigger) = getTax(sender, recipient, amount);

        // give amount to recipient less fee
        uint256 sendAmount = amount - fee;
        require(sendAmount > 0, 'Zero Amount');

        // allocate balance
        unchecked {
            _balances[recipient] += sendAmount;
        }
        emit Transfer(sender, recipient, sendAmount);

        // allocate fee if any
        if (fee > 0) {

            // if recipient field is valid
            bool isValidRecipient = feeDestination != address(0) && feeDestination != address(this);

            // allocate amount to recipient
            address feeRecipient = isValidRecipient ? feeDestination : address(this);

            // allocate fee
            unchecked {
                _balances[feeRecipient] += fee;
            }
            emit Transfer(sender, feeRecipient, fee);

            // if valid and trigger is enabled, trigger tokenomics mid transfer
            if (trigger && isValidRecipient) {
                (bool success,) = feeRecipient.call(
                    abi.encodeWithSelector(bytes4(keccak256(bytes('trigger()'))))
                );
                success;
            }
        }

        return true;
    }

    function _burn(address account, uint256 amount) internal returns (bool) {
        require(
            account != address(0),
            'Zero Address'
        );
        require(
            amount > 0,
            'Zero Amount'
        );
        require(
            amount <= _balances[account],
            'Insufficient Balance'
        );

        // delete from balance and supply
        _balances[account] -= amount;
        _totalSupply -= amount;

        // emit transfer
        emit Transfer(account, address(0), amount);
        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","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":"TAX_DENOM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"buyFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"isFeeExempt","type":"bool"},{"internalType":"bool","name":"isLiquidityPool","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAutomatedMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"autoBuyTrigger","type":"bool"},{"internalType":"bool","name":"autoTransferTrigger","type":"bool"},{"internalType":"bool","name":"autoSellTrigger","type":"bool"}],"name":"setAutoTriggers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setBuyFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setSellFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapper","type":"address"}],"name":"setSwapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setTransferFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"triggerBuyRecipient","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSellRecipient","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerTransferRecipient","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unRegisterAutomatedMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b019d971e4fe8401e740000006001556101f460048190556005555f600655600a805462ffffff60a01b1916905534801561003d575f80fd5b505f80546001600160a01b0319163390811782556040519091907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a3335f818152600760209081526040808320805460ff19166001908117909155546002835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a88806100e35f395ff3fe608060405260043610610220575f3560e01c806370a082311161011e578063a9059cbb116100a8578063d7ad21ac1161006d578063d7ad21ac146106eb578063dd62ed3e1461072f578063e87629f714610773578063f145d6ff14610793578063f89532a2146107b3575f80fd5b8063a9059cbb1461065a578063ac4dcb7614610679578063acb2ad6f14610698578063cec10c11146106ad578063d3c25899146106cc575f80fd5b806392a39d91116100ee57806392a39d91146105b357806395d89b41146105d25780639a44b9e3146105fd5780639c82f2a41461061c578063a6f9dae11461063b575f80fd5b806370a082311461052557806379cc679014610559578063893d20e8146105785780638ebfc79614610594575f80fd5b8063304561bb116101aa578063498e7cc71161016f578063498e7cc71461049457806349df728c146104b457806350431ce4146104d357806365fe050e146104e757806367ffa82814610506575f80fd5b8063304561bb14610407578063313ce567146104265780633eb193e21461044157806342966c6814610460578063470624021461047f575f80fd5b806318160ddd116101f057806318160ddd1461035f57806323b872dd1461037d5780632ac7b8241461039c5780632b14ca56146103bb5780632b3297f9146103d0575f80fd5b806301e882081461028857806306501a6a146102db57806306fdde03146102ee578063095ea7b314610330575f80fd5b3661028457600b5460405163cce7ec1360e01b8152336004820152600160248201526001600160a01b039091169063cce7ec139034906044015f604051808303818588803b158015610270575f80fd5b505af1158015610282573d5f803e3d5ffd5b005b5f80fd5b348015610293575f80fd5b506102bf6102a2366004611749565b60076020525f908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b6102826102e9366004611762565b6107c8565b3480156102f9575f80fd5b50604080518082019091526011815270477265656e204c69666520456e6572677960781b60208201525b6040516102d291906117ac565b34801561033b575f80fd5b5061034f61034a366004611762565b610830565b60405190151581526020016102d2565b34801561036a575f80fd5b506001545b6040519081526020016102d2565b348015610388575f80fd5b5061034f6103973660046117de565b61089c565b3480156103a7575f80fd5b506102826103b6366004611749565b610957565b3480156103c6575f80fd5b5061036f60055481565b3480156103db575f80fd5b50600b546103ef906001600160a01b031681565b6040516001600160a01b0390911681526020016102d2565b348015610412575f80fd5b50600a546103ef906001600160a01b031681565b348015610431575f80fd5b50604051601281526020016102d2565b34801561044c575f80fd5b5061028261045b366004611749565b610a1d565b34801561046b575f80fd5b5061028261047a366004611817565b610aa5565b34801561048a575f80fd5b5061036f60045481565b34801561049f575f80fd5b50600a5461034f90600160b01b900460ff1681565b3480156104bf575f80fd5b506102826104ce366004611749565b610ab3565b3480156104de575f80fd5b50610282610beb565b3480156104f2575f80fd5b50610282610501366004611749565b610c68565b348015610511575f80fd5b50610282610520366004611749565b610d2f565b348015610530575f80fd5b5061036f61053f366004611749565b6001600160a01b03165f9081526002602052604090205490565b348015610564575f80fd5b50610282610573366004611762565b610db7565b348015610583575f80fd5b505f546001600160a01b03166103ef565b34801561059f575f80fd5b506102826105ae36600461183b565b610e69565b3480156105be575f80fd5b506008546103ef906001600160a01b031681565b3480156105dd575f80fd5b50604080518082019091526003815262474c4560e81b6020820152610323565b348015610608575f80fd5b506009546103ef906001600160a01b031681565b348015610627575f80fd5b50610282610636366004611749565b610ee2565b348015610646575f80fd5b50610282610655366004611749565b610f2d565b348015610665575f80fd5b5061034f610674366004611762565b610faf565b348015610684575f80fd5b50610282610693366004611749565b610fc2565b3480156106a3575f80fd5b5061036f60065481565b3480156106b8575f80fd5b506102826106c7366004611870565b61104a565b3480156106d7575f80fd5b506102826106e6366004611899565b611156565b3480156106f6575f80fd5b5061070a6107053660046117de565b6111c9565b604080519384526001600160a01b0390921660208401521515908201526060016102d2565b34801561073a575f80fd5b5061036f6107493660046118e1565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b34801561077e575f80fd5b50600a5461034f90600160a01b900460ff1681565b34801561079e575f80fd5b50600a5461034f90600160a81b900460ff1681565b3480156107be575f80fd5b5061036f61271081565b600b5460405163cce7ec1360e01b81526001600160a01b038481166004830152602482018490529091169063cce7ec139034906044015f604051808303818588803b158015610815575f80fd5b505af1158015610827573d5f803e3d5ffd5b50505050505050565b335f8181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088a9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f90815260036020908152604080832033845290915281205482111561090c5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602090815260408083203384529091528120805484929061093e908490611926565b9091555061094f9050848484611320565b949350505050565b5f546001600160a01b031633146109805760405162461bcd60e51b815260040161090390611939565b6001600160a01b0381166109a65760405162461bcd60e51b815260040161090390611966565b6001600160a01b0381165f90815260076020526040902054610100900460ff166109fc5760405162461bcd60e51b81526020600482015260076024820152664e6f7420414d4d60c81b6044820152606401610903565b6001600160a01b03165f908152600760205260409020805461ff0019169055565b5f546001600160a01b03163314610a465760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610a6c5760405162461bcd60e51b81526004016109039061198c565b600980546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b610aaf3382611609565b5050565b5f546001600160a01b03163314610adc5760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610b025760405162461bcd60e51b81526004016109039061198c565b6040516370a0823160e01b81523060048201525f906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610b50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7491906119aa565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be091906119c1565b905080610aaf575f80fd5b5f546001600160a01b03163314610c145760405162461bcd60e51b815260040161090390611939565b6040515f90339047908381818185875af1925050503d805f8114610c53576040519150601f19603f3d011682016040523d82523d5f602084013e610c58565b606091505b5050905080610c65575f80fd5b50565b5f546001600160a01b03163314610c915760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610cb75760405162461bcd60e51b815260040161090390611966565b6001600160a01b0381165f90815260076020526040902054610100900460ff1615610d0a5760405162461bcd60e51b8152602060048201526003602482015262414d4d60e81b6044820152606401610903565b6001600160a01b03165f908152600760205260409020805461ff001916610100179055565b5f546001600160a01b03163314610d585760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610d7e5760405162461bcd60e51b81526004016109039061198c565b600880546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b6001600160a01b0382165f908152600360209081526040808320338452909152902054811115610e225760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610903565b6001600160a01b0382165f90815260036020908152604080832033845290915281208054839290610e54908490611926565b90915550610e6490508282611609565b505050565b5f546001600160a01b03163314610e925760405162461bcd60e51b815260040161090390611939565b6001600160a01b038216610eb85760405162461bcd60e51b815260040161090390611966565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f0b5760405162461bcd60e51b815260040161090390611939565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610f565760405162461bcd60e51b815260040161090390611939565b5f80546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610fbb338484611320565b9392505050565b5f546001600160a01b03163314610feb5760405162461bcd60e51b815260040161090390611939565b6001600160a01b0381166110115760405162461bcd60e51b81526004016109039061198c565b600a80546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b5f546001600160a01b031633146110735760405162461bcd60e51b815260040161090390611939565b6103e88311156110b85760405162461bcd60e51b815260206004820152601060248201526f084eaf2408ccaca40a8dede4090d2ced60831b6044820152606401610903565b6103e88211156110fe5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d8408ccaca40a8dede4090d2ced607b1b6044820152606401610903565b6103e88111156111485760405162461bcd60e51b81526020600482015260156024820152740a8e4c2dce6cccae4408ccaca40a8dede4090d2ced605b1b6044820152606401610903565b600492909255600555600655565b5f546001600160a01b0316331461117f5760405162461bcd60e51b815260040161090390611939565b600a8054911515600160b01b0260ff60b01b19931515600160a81b0260ff60a81b19951515600160a01b029590951661ffff60a01b19909316929092179390931791909116179055565b6001600160a01b0383165f908152600760205260408120548190819060ff168061120a57506001600160a01b0385165f9081526007602052604090205460ff165b1561121c57505f915081905080611317565b6001600160a01b0385165f90815260076020526040902054610100900460ff166112d8576001600160a01b0386165f90815260076020526040902054610100900460ff1661129c576127106006548561127591906119dc565b61127f91906119f3565b600a546001600160a01b03811690600160a81b900460ff16611310565b612710600454856112ad91906119dc565b6112b791906119f3565b600954600a546001600160a01b0390911690600160a01b900460ff16611310565b612710600554856112e991906119dc565b6112f391906119f3565b600854600a546001600160a01b0390911690600160b01b900460ff165b9250925092505b93509350939050565b5f6001600160a01b0383166113685760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b6044820152606401610903565b5f82116113875760405162461bcd60e51b815260040161090390611a12565b6001600160a01b0384165f908152600260205260409020548211156113e55760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610903565b6001600160a01b0384165f908152600260205260408120805484929061140c908490611926565b909155505f905080806114208787876111c9565b919450925090505f6114328487611926565b90505f81116114535760405162461bcd60e51b815260040161090390611a12565b6001600160a01b038088165f81815260026020526040908190208054850190555190918a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114a89085815260200190565b60405180910390a383156115fb575f6001600160a01b038416158015906114d857506001600160a01b0384163014155b90505f816114e657306114e8565b845b6001600160a01b038082165f818152600260205260409081902080548b0190555192935091908c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611540908a815260200190565b60405180910390a38380156115525750815b156115f857604080518082018252600981526874726967676572282960b81b60209182015281516004815260248101835290810180516001600160e01b0316630ffd91a760e31b17905290515f916001600160a01b038416916115b59190611a37565b5f604051808303815f865af19150503d805f81146115ee576040519150601f19603f3d011682016040523d82523d5f602084013e6115f3565b606091505b505050505b50505b506001979650505050505050565b5f6001600160a01b0383166116305760405162461bcd60e51b815260040161090390611966565b5f821161164f5760405162461bcd60e51b815260040161090390611a12565b6001600160a01b0383165f908152600260205260409020548211156116ad5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610903565b6001600160a01b0383165f90815260026020526040812080548492906116d4908490611926565b925050819055508160015f8282546116ec9190611926565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161088a565b80356001600160a01b0381168114611744575f80fd5b919050565b5f60208284031215611759575f80fd5b610fbb8261172e565b5f8060408385031215611773575f80fd5b61177c8361172e565b946020939093013593505050565b5f5b838110156117a457818101518382015260200161178c565b50505f910152565b602081525f82518060208401526117ca81604085016020870161178a565b601f01601f19169190910160400192915050565b5f805f606084860312156117f0575f80fd5b6117f98461172e565b92506118076020850161172e565b9150604084013590509250925092565b5f60208284031215611827575f80fd5b5035919050565b8015158114610c65575f80fd5b5f806040838503121561184c575f80fd5b6118558361172e565b915060208301356118658161182e565b809150509250929050565b5f805f60608486031215611882575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156118ab575f80fd5b83356118b68161182e565b925060208401356118c68161182e565b915060408401356118d68161182e565b809150509250925092565b5f80604083850312156118f2575f80fd5b6118fb8361172e565b91506119096020840161172e565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561089657610896611912565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600490820152635a65726f60e01b604082015260600190565b5f602082840312156119ba575f80fd5b5051919050565b5f602082840312156119d1575f80fd5b8151610fbb8161182e565b808202811582820484141761089657610896611912565b5f82611a0d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600b908201526a16995c9bc8105b5bdd5b9d60aa1b604082015260600190565b5f8251611a4881846020870161178a565b919091019291505056fea2646970667358221220a0e6499923ef54fc90bacf2938ad0a0bd425702de8eca9e0e49a897c5362ec8a64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610220575f3560e01c806370a082311161011e578063a9059cbb116100a8578063d7ad21ac1161006d578063d7ad21ac146106eb578063dd62ed3e1461072f578063e87629f714610773578063f145d6ff14610793578063f89532a2146107b3575f80fd5b8063a9059cbb1461065a578063ac4dcb7614610679578063acb2ad6f14610698578063cec10c11146106ad578063d3c25899146106cc575f80fd5b806392a39d91116100ee57806392a39d91146105b357806395d89b41146105d25780639a44b9e3146105fd5780639c82f2a41461061c578063a6f9dae11461063b575f80fd5b806370a082311461052557806379cc679014610559578063893d20e8146105785780638ebfc79614610594575f80fd5b8063304561bb116101aa578063498e7cc71161016f578063498e7cc71461049457806349df728c146104b457806350431ce4146104d357806365fe050e146104e757806367ffa82814610506575f80fd5b8063304561bb14610407578063313ce567146104265780633eb193e21461044157806342966c6814610460578063470624021461047f575f80fd5b806318160ddd116101f057806318160ddd1461035f57806323b872dd1461037d5780632ac7b8241461039c5780632b14ca56146103bb5780632b3297f9146103d0575f80fd5b806301e882081461028857806306501a6a146102db57806306fdde03146102ee578063095ea7b314610330575f80fd5b3661028457600b5460405163cce7ec1360e01b8152336004820152600160248201526001600160a01b039091169063cce7ec139034906044015f604051808303818588803b158015610270575f80fd5b505af1158015610282573d5f803e3d5ffd5b005b5f80fd5b348015610293575f80fd5b506102bf6102a2366004611749565b60076020525f908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b6102826102e9366004611762565b6107c8565b3480156102f9575f80fd5b50604080518082019091526011815270477265656e204c69666520456e6572677960781b60208201525b6040516102d291906117ac565b34801561033b575f80fd5b5061034f61034a366004611762565b610830565b60405190151581526020016102d2565b34801561036a575f80fd5b506001545b6040519081526020016102d2565b348015610388575f80fd5b5061034f6103973660046117de565b61089c565b3480156103a7575f80fd5b506102826103b6366004611749565b610957565b3480156103c6575f80fd5b5061036f60055481565b3480156103db575f80fd5b50600b546103ef906001600160a01b031681565b6040516001600160a01b0390911681526020016102d2565b348015610412575f80fd5b50600a546103ef906001600160a01b031681565b348015610431575f80fd5b50604051601281526020016102d2565b34801561044c575f80fd5b5061028261045b366004611749565b610a1d565b34801561046b575f80fd5b5061028261047a366004611817565b610aa5565b34801561048a575f80fd5b5061036f60045481565b34801561049f575f80fd5b50600a5461034f90600160b01b900460ff1681565b3480156104bf575f80fd5b506102826104ce366004611749565b610ab3565b3480156104de575f80fd5b50610282610beb565b3480156104f2575f80fd5b50610282610501366004611749565b610c68565b348015610511575f80fd5b50610282610520366004611749565b610d2f565b348015610530575f80fd5b5061036f61053f366004611749565b6001600160a01b03165f9081526002602052604090205490565b348015610564575f80fd5b50610282610573366004611762565b610db7565b348015610583575f80fd5b505f546001600160a01b03166103ef565b34801561059f575f80fd5b506102826105ae36600461183b565b610e69565b3480156105be575f80fd5b506008546103ef906001600160a01b031681565b3480156105dd575f80fd5b50604080518082019091526003815262474c4560e81b6020820152610323565b348015610608575f80fd5b506009546103ef906001600160a01b031681565b348015610627575f80fd5b50610282610636366004611749565b610ee2565b348015610646575f80fd5b50610282610655366004611749565b610f2d565b348015610665575f80fd5b5061034f610674366004611762565b610faf565b348015610684575f80fd5b50610282610693366004611749565b610fc2565b3480156106a3575f80fd5b5061036f60065481565b3480156106b8575f80fd5b506102826106c7366004611870565b61104a565b3480156106d7575f80fd5b506102826106e6366004611899565b611156565b3480156106f6575f80fd5b5061070a6107053660046117de565b6111c9565b604080519384526001600160a01b0390921660208401521515908201526060016102d2565b34801561073a575f80fd5b5061036f6107493660046118e1565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b34801561077e575f80fd5b50600a5461034f90600160a01b900460ff1681565b34801561079e575f80fd5b50600a5461034f90600160a81b900460ff1681565b3480156107be575f80fd5b5061036f61271081565b600b5460405163cce7ec1360e01b81526001600160a01b038481166004830152602482018490529091169063cce7ec139034906044015f604051808303818588803b158015610815575f80fd5b505af1158015610827573d5f803e3d5ffd5b50505050505050565b335f8181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088a9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f90815260036020908152604080832033845290915281205482111561090c5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602090815260408083203384529091528120805484929061093e908490611926565b9091555061094f9050848484611320565b949350505050565b5f546001600160a01b031633146109805760405162461bcd60e51b815260040161090390611939565b6001600160a01b0381166109a65760405162461bcd60e51b815260040161090390611966565b6001600160a01b0381165f90815260076020526040902054610100900460ff166109fc5760405162461bcd60e51b81526020600482015260076024820152664e6f7420414d4d60c81b6044820152606401610903565b6001600160a01b03165f908152600760205260409020805461ff0019169055565b5f546001600160a01b03163314610a465760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610a6c5760405162461bcd60e51b81526004016109039061198c565b600980546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b610aaf3382611609565b5050565b5f546001600160a01b03163314610adc5760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610b025760405162461bcd60e51b81526004016109039061198c565b6040516370a0823160e01b81523060048201525f906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610b50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7491906119aa565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be091906119c1565b905080610aaf575f80fd5b5f546001600160a01b03163314610c145760405162461bcd60e51b815260040161090390611939565b6040515f90339047908381818185875af1925050503d805f8114610c53576040519150601f19603f3d011682016040523d82523d5f602084013e610c58565b606091505b5050905080610c65575f80fd5b50565b5f546001600160a01b03163314610c915760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610cb75760405162461bcd60e51b815260040161090390611966565b6001600160a01b0381165f90815260076020526040902054610100900460ff1615610d0a5760405162461bcd60e51b8152602060048201526003602482015262414d4d60e81b6044820152606401610903565b6001600160a01b03165f908152600760205260409020805461ff001916610100179055565b5f546001600160a01b03163314610d585760405162461bcd60e51b815260040161090390611939565b6001600160a01b038116610d7e5760405162461bcd60e51b81526004016109039061198c565b600880546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b6001600160a01b0382165f908152600360209081526040808320338452909152902054811115610e225760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610903565b6001600160a01b0382165f90815260036020908152604080832033845290915281208054839290610e54908490611926565b90915550610e6490508282611609565b505050565b5f546001600160a01b03163314610e925760405162461bcd60e51b815260040161090390611939565b6001600160a01b038216610eb85760405162461bcd60e51b815260040161090390611966565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f0b5760405162461bcd60e51b815260040161090390611939565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610f565760405162461bcd60e51b815260040161090390611939565b5f80546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f610fbb338484611320565b9392505050565b5f546001600160a01b03163314610feb5760405162461bcd60e51b815260040161090390611939565b6001600160a01b0381166110115760405162461bcd60e51b81526004016109039061198c565b600a80546001600160a01b039092166001600160a01b0319909216821790555f908152600760205260409020805460ff19166001179055565b5f546001600160a01b031633146110735760405162461bcd60e51b815260040161090390611939565b6103e88311156110b85760405162461bcd60e51b815260206004820152601060248201526f084eaf2408ccaca40a8dede4090d2ced60831b6044820152606401610903565b6103e88211156110fe5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d8408ccaca40a8dede4090d2ced607b1b6044820152606401610903565b6103e88111156111485760405162461bcd60e51b81526020600482015260156024820152740a8e4c2dce6cccae4408ccaca40a8dede4090d2ced605b1b6044820152606401610903565b600492909255600555600655565b5f546001600160a01b0316331461117f5760405162461bcd60e51b815260040161090390611939565b600a8054911515600160b01b0260ff60b01b19931515600160a81b0260ff60a81b19951515600160a01b029590951661ffff60a01b19909316929092179390931791909116179055565b6001600160a01b0383165f908152600760205260408120548190819060ff168061120a57506001600160a01b0385165f9081526007602052604090205460ff165b1561121c57505f915081905080611317565b6001600160a01b0385165f90815260076020526040902054610100900460ff166112d8576001600160a01b0386165f90815260076020526040902054610100900460ff1661129c576127106006548561127591906119dc565b61127f91906119f3565b600a546001600160a01b03811690600160a81b900460ff16611310565b612710600454856112ad91906119dc565b6112b791906119f3565b600954600a546001600160a01b0390911690600160a01b900460ff16611310565b612710600554856112e991906119dc565b6112f391906119f3565b600854600a546001600160a01b0390911690600160b01b900460ff165b9250925092505b93509350939050565b5f6001600160a01b0383166113685760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc8149958da5c1a595b9d60921b6044820152606401610903565b5f82116113875760405162461bcd60e51b815260040161090390611a12565b6001600160a01b0384165f908152600260205260409020548211156113e55760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610903565b6001600160a01b0384165f908152600260205260408120805484929061140c908490611926565b909155505f905080806114208787876111c9565b919450925090505f6114328487611926565b90505f81116114535760405162461bcd60e51b815260040161090390611a12565b6001600160a01b038088165f81815260026020526040908190208054850190555190918a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114a89085815260200190565b60405180910390a383156115fb575f6001600160a01b038416158015906114d857506001600160a01b0384163014155b90505f816114e657306114e8565b845b6001600160a01b038082165f818152600260205260409081902080548b0190555192935091908c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611540908a815260200190565b60405180910390a38380156115525750815b156115f857604080518082018252600981526874726967676572282960b81b60209182015281516004815260248101835290810180516001600160e01b0316630ffd91a760e31b17905290515f916001600160a01b038416916115b59190611a37565b5f604051808303815f865af19150503d805f81146115ee576040519150601f19603f3d011682016040523d82523d5f602084013e6115f3565b606091505b505050505b50505b506001979650505050505050565b5f6001600160a01b0383166116305760405162461bcd60e51b815260040161090390611966565b5f821161164f5760405162461bcd60e51b815260040161090390611a12565b6001600160a01b0383165f908152600260205260409020548211156116ad5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610903565b6001600160a01b0383165f90815260026020526040812080548492906116d4908490611926565b925050819055508160015f8282546116ec9190611926565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161088a565b80356001600160a01b0381168114611744575f80fd5b919050565b5f60208284031215611759575f80fd5b610fbb8261172e565b5f8060408385031215611773575f80fd5b61177c8361172e565b946020939093013593505050565b5f5b838110156117a457818101518382015260200161178c565b50505f910152565b602081525f82518060208401526117ca81604085016020870161178a565b601f01601f19169190910160400192915050565b5f805f606084860312156117f0575f80fd5b6117f98461172e565b92506118076020850161172e565b9150604084013590509250925092565b5f60208284031215611827575f80fd5b5035919050565b8015158114610c65575f80fd5b5f806040838503121561184c575f80fd5b6118558361172e565b915060208301356118658161182e565b809150509250929050565b5f805f60608486031215611882575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156118ab575f80fd5b83356118b68161182e565b925060208401356118c68161182e565b915060408401356118d68161182e565b809150509250925092565b5f80604083850312156118f2575f80fd5b6118fb8361172e565b91506119096020840161172e565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561089657610896611912565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600490820152635a65726f60e01b604082015260600190565b5f602082840312156119ba575f80fd5b5051919050565b5f602082840312156119d1575f80fd5b8151610fbb8161182e565b808202811582820484141761089657610896611912565b5f82611a0d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600b908201526a16995c9bc8105b5bdd5b9d60aa1b604082015260600190565b5f8251611a4881846020870161178a565b919091019291505056fea2646970667358221220a0e6499923ef54fc90bacf2938ad0a0bd425702de8eca9e0e49a897c5362ec8a64736f6c63430008140033

Deployed Bytecode Sourcemap

4546:10015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8330:7;;8321:54;;-1:-1:-1;;;8321:54:0;;8361:10;8321:54;;;196:51:1;8330:7:0;263:18:1;;;256:34;-1:-1:-1;;;;;8330:7:0;;;;8321:21;;8350:9;;169:18:1;;8321:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4546:10015;;;;5325:53;;;;;;;;;;-1:-1:-1;5325:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;857:14:1;;850:22;832:41;;916:14;;909:22;904:2;889:18;;882:50;805:18;5325:53:0;;;;;;;;8130:145;;;;;;:::i;:::-;;:::i;6529:92::-;;;;;;;;;;-1:-1:-1;6608:5:0;;;;;;;;;;;;-1:-1:-1;;;6608:5:0;;;;6529:92;;;;;;;:::i;6833:216::-;;;;;;;;;;-1:-1:-1;6833:216:0;;;;;:::i;:::-;;:::i;:::-;;;2023:14:1;;2016:22;1998:41;;1986:2;1971:18;6833:216:0;1858:187:1;6179:88:0;;;;;;;;;;-1:-1:-1;6252:12:0;;6179:88;;;2196:25:1;;;2184:2;2169:18;6179:88:0;2050:177:1;7277:344:0;;;;;;;;;;-1:-1:-1;7277:344:0;;;;;:::i;:::-;;:::i;9957:263::-;;;;;;;;;;-1:-1:-1;9957:263:0;;;;;:::i;:::-;;:::i;5074:39::-;;;;;;;;;;;;;;;;5731:22;;;;;;;;;;-1:-1:-1;5731:22:0;;;;-1:-1:-1;;;;;5731:22:0;;;;;;-1:-1:-1;;;;;2729:32:1;;;2711:51;;2699:2;2684:18;5731:22:0;2565:203:1;5485:35:0;;;;;;;;;;-1:-1:-1;5485:35:0;;;;-1:-1:-1;;;;;5485:35:0;;;6733:92;;;;;;;;;;-1:-1:-1;6733:92:0;;4839:2;2915:36:1;;2903:2;2888:18;6733:92:0;2773:184:1;9244:215:0;;;;;;;;;;-1:-1:-1;9244:215:0;;;;;:::i;:::-;;:::i;7752:83::-;;;;;;;;;;-1:-1:-1;7752:83:0;;;;;:::i;:::-;;:::i;5028:39::-;;;;;;;;;;;;;;;;5657:40;;;;;;;;;;-1:-1:-1;5657:40:0;;;;-1:-1:-1;;;5657:40:0;;;;;;8612:228;;;;;;;;;;-1:-1:-1;8612:228:0;;;;;:::i;:::-;;:::i;8848:155::-;;;;;;;;;;;;;:::i;9692:257::-;;;;;;;;;;-1:-1:-1;9692:257:0;;;;;:::i;:::-;;:::i;9467:217::-;;;;;;;;;;-1:-1:-1;9467:217:0;;;;;:::i;:::-;;:::i;6273:105::-;;;;;;;;;;-1:-1:-1;6273:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;6357:18:0;6339:7;6357:18;;;:9;:18;;;;;;;6273:105;7843:279;;;;;;;;;;-1:-1:-1;7843:279:0;;;;;:::i;:::-;;:::i;1437:83::-;;;;;;;;;;-1:-1:-1;1480:7:0;1507:5;-1:-1:-1;;;;;1507:5:0;1437:83;;11027:192;;;;;;;;;;-1:-1:-1;11027:192:0;;;;;:::i;:::-;;:::i;5410:31::-;;;;;;;;;;-1:-1:-1;5410:31:0;;;;-1:-1:-1;;;;;5410:31:0;;;6629:96;;;;;;;;;;-1:-1:-1;6710:7:0;;;;;;;;;;;;-1:-1:-1;;;6710:7:0;;;;6629:96;;5448:30;;;;;;;;;;-1:-1:-1;5448:30:0;;;;-1:-1:-1;;;;;5448:30:0;;;8510:94;;;;;;;;;;-1:-1:-1;8510:94:0;;;;;:::i;:::-;;:::i;1211:132::-;;;;;;;;;;-1:-1:-1;1211:132:0;;;;;:::i;:::-;;:::i;7087:152::-;;;;;;;;;;-1:-1:-1;7087:152:0;;;;;:::i;:::-;;:::i;9011:225::-;;;;;;;;;;-1:-1:-1;9011:225:0;;;;;:::i;:::-;;:::i;5120:37::-;;;;;;;;;;;;;;;;10544:475;;;;;;;;;;-1:-1:-1;10544:475:0;;;;;:::i;:::-;;:::i;10228:308::-;;;;;;;;;;-1:-1:-1;10228:308:0;;;;;:::i;:::-;;:::i;11352:659::-;;;;;;;;;;-1:-1:-1;11352:659:0;;;;;:::i;:::-;;:::i;:::-;;;;4623:25:1;;;-1:-1:-1;;;;;4684:32:1;;;4679:2;4664:18;;4657:60;4760:14;4753:22;4733:18;;;4726:50;4611:2;4596:18;11352:659:0;4427:355:1;6384:133:0;;;;;;;;;;-1:-1:-1;6384:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;6486:19:0;;;6468:7;6486:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;6384:133;5560:39;;;;;;;;;;-1:-1:-1;5560:39:0;;;;-1:-1:-1;;;5560:39:0;;;;;;5606:44;;;;;;;;;;-1:-1:-1;5606:44:0;;;;-1:-1:-1;;;5606:44:0;;;;;;5164:41;;;;;;;;;;;;5200:5;5164:41;;8130:145;8218:7;;8209:58;;-1:-1:-1;;;8209:58:0;;-1:-1:-1;;;;;214:32:1;;;8209:58:0;;;196:51:1;263:18;;;256:34;;;8218:7:0;;;;8209:21;;8238:9;;169:18:1;;8209:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8130:145;;:::o;6833:216::-;6937:10;6908:4;6925:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6925:32:0;;;;;;;;;;:41;;;6982:37;6908:4;;6925:32;;6982:37;;;;6960:6;2196:25:1;;2184:2;2169:18;;2050:177;6982:37:0;;;;;;;;-1:-1:-1;7037:4:0;6833:216;;;;;:::o;7277:344::-;-1:-1:-1;;;;;7416:19:0;;7377:4;7416:19;;;:11;:19;;;;;;;;7436:10;7416:31;;;;;;;;:41;-1:-1:-1;7416:41:0;7394:113;;;;-1:-1:-1;;;7394:113:0;;5533:2:1;7394:113:0;;;5515:21:1;5572:2;5552:18;;;5545:30;-1:-1:-1;;;5591:18:1;;;5584:52;5653:18;;7394:113:0;;;;;;;;;-1:-1:-1;;;;;7518:19:0;;;;;;:11;:19;;;;;;;;7538:10;7518:31;;;;;;;:41;;7553:6;;7518:19;:41;;7553:6;;7518:41;:::i;:::-;;;;-1:-1:-1;7577:36:0;;-1:-1:-1;7587:6:0;7595:9;7606:6;7577:9;:36::i;:::-;7570:43;7277:344;-1:-1:-1;;;;7277:344:0:o;9957:263::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10052:21:0;::::1;10044:46;;;;-1:-1:-1::0;;;10044:46:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10109:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;:36;::::1;::::0;::::1;;;10101:56;;;::::0;-1:-1:-1;;;10101:56:0;;6838:2:1;10101:56:0::1;::::0;::::1;6820:21:1::0;6877:1;6857:18;;;6850:29;-1:-1:-1;;;6895:18:1;;;6888:37;6942:18;;10101:56:0::1;6636:330:1::0;10101:56:0::1;-1:-1:-1::0;;;;;10168:20:0::1;10207:5;10168:20:::0;;;:11:::1;:20;::::0;;;;:44;;-1:-1:-1;;10168:44:0::1;::::0;;9957:263::o;9244:215::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9329:23:0;::::1;9321:40;;;;-1:-1:-1::0;;;9321:40:0::1;;;;;;;:::i;:::-;9372:15;:27:::0;;-1:-1:-1;;;;;9372:27:0;;::::1;-1:-1:-1::0;;;;;;9372:27:0;;::::1;::::0;::::1;::::0;;:15:::1;9410:22:::0;;;:11:::1;:22;::::0;;;;:41;;-1:-1:-1;;9410:41:0::1;9372:27:::0;9410:41:::1;::::0;;9244:215::o;7752:83::-;7802:25;7808:10;7820:6;7802:5;:25::i;:::-;;7752:83;:::o;8612:228::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8689:19:0;::::1;8681:36;;;;-1:-1:-1::0;;;8681:36:0::1;;;;;;;:::i;:::-;8772:38;::::0;-1:-1:-1;;;8772:38:0;;8804:4:::1;8772:38;::::0;::::1;2711:51:1::0;8728:6:0::1;::::0;-1:-1:-1;;;;;8737:22:0;::::1;::::0;::::1;::::0;8760:10:::1;::::0;8737:22;;8772:23:::1;::::0;2684:18:1;;8772:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8737:74;::::0;-1:-1:-1;;;;;;8737:74:0::1;::::0;;;;;;-1:-1:-1;;;;;214:32:1;;;8737:74:0::1;::::0;::::1;196:51:1::0;263:18;;;256:34;169:18;;8737:74:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8728:83;;8830:1;8822:10;;;::::0;::::1;8848:155:::0;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;8916:58:::1;::::0;8905:6:::1;::::0;8924:10:::1;::::0;8948:21:::1;::::0;8905:6;8916:58;8905:6;8916:58;8948:21;8924:10;8916:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8904:70;;;8993:1;8985:10;;;::::0;::::1;;8893:110;8848:155::o:0;9692:257::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9785:21:0;::::1;9777:46;;;;-1:-1:-1::0;;;9777:46:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9843:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;:36;::::1;::::0;::::1;;;9842:37;9834:53;;;::::0;-1:-1:-1;;;9834:53:0;;8154:2:1;9834:53:0::1;::::0;::::1;8136:21:1::0;8193:1;8173:18;;;8166:29;-1:-1:-1;;;8211:18:1;;;8204:33;8254:18;;9834:53:0::1;7952:326:1::0;9834:53:0::1;-1:-1:-1::0;;;;;9898:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:43;;-1:-1:-1;;9898:43:0::1;;;::::0;;9692:257::o;9467:217::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9553:23:0;::::1;9545:40;;;;-1:-1:-1::0;;;9545:40:0::1;;;;;;;:::i;:::-;9596:16;:28:::0;;-1:-1:-1;;;;;9596:28:0;;::::1;-1:-1:-1::0;;;;;;9596:28:0;;::::1;::::0;::::1;::::0;;:16:::1;9635:22:::0;;;:11:::1;:22;::::0;;;;:41;;-1:-1:-1;;9635:41:0::1;9596:28:::0;9635:41:::1;::::0;;9467:217::o;7843:279::-;-1:-1:-1;;;;;7936:20:0;;;;;;:11;:20;;;;;;;;7957:10;7936:32;;;;;;;;:42;-1:-1:-1;7936:42:0;7914:114;;;;-1:-1:-1;;;7914:114:0;;5533:2:1;7914:114:0;;;5515:21:1;5572:2;5552:18;;;5545:30;-1:-1:-1;;;5591:18:1;;;5584:52;5653:18;;7914:114:0;5331:346:1;7914:114:0;-1:-1:-1;;;;;8039:20:0;;;;;;:11;:20;;;;;;;;8060:10;8039:32;;;;;;;:42;;8075:6;;8039:20;:42;;8075:6;;8039:42;:::i;:::-;;;;-1:-1:-1;8092:22:0;;-1:-1:-1;8098:7:0;8107:6;8092:5;:22::i;:::-;;7843:279;;:::o;11027:192::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11119:21:0;::::1;11111:46;;;;-1:-1:-1::0;;;11111:46:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11168:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:43;;-1:-1:-1;;11168:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11027:192::o;8510:94::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;8578:7:::1;:18:::0;;-1:-1:-1;;;;;;8578:18:0::1;-1:-1:-1::0;;;;;8578:18:0;;;::::1;::::0;;;::::1;::::0;;8510:94::o;1211:132::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;1292:5:::1;::::0;;1283:25:::1;::::0;-1:-1:-1;;;;;1283:25:0;;::::1;::::0;1292:5;::::1;::::0;1283:25:::1;::::0;::::1;1319:5;:16:::0;;-1:-1:-1;;;;;;1319:16:0::1;-1:-1:-1::0;;;;;1319:16:0;;;::::1;::::0;;;::::1;::::0;;1211:132::o;7087:152::-;7167:4;7191:40;7201:10;7213:9;7224:6;7191:9;:40::i;:::-;7184:47;7087:152;-1:-1:-1;;;7087:152:0:o;9011:225::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9101:23:0;::::1;9093:40;;;;-1:-1:-1::0;;;9093:40:0::1;;;;;;;:::i;:::-;9144:20;:32:::0;;-1:-1:-1;;;;;9144:32:0;;::::1;-1:-1:-1::0;;;;;;9144:32:0;;::::1;::::0;::::1;::::0;;:20:::1;9187:22:::0;;;:11:::1;:22;::::0;;;;:41;;-1:-1:-1;;9187:41:0::1;9144:32:::0;9187:41:::1;::::0;;9011:225::o;10544:475::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;10672:4:::1;10661:7;:15;;10639:81;;;::::0;-1:-1:-1;;;10639:81:0;;8485:2:1;10639:81:0::1;::::0;::::1;8467:21:1::0;8524:2;8504:18;;;8497:30;-1:-1:-1;;;8543:18:1;;;8536:46;8599:18;;10639:81:0::1;8283:340:1::0;10639:81:0::1;10765:4;10753:8;:16;;10731:83;;;::::0;-1:-1:-1;;;10731:83:0;;8830:2:1;10731:83:0::1;::::0;::::1;8812:21:1::0;8869:2;8849:18;;;8842:30;-1:-1:-1;;;8888:18:1;;;8881:47;8945:18;;10731:83:0::1;8628:341:1::0;10731:83:0::1;10863:4;10847:12;:20;;10825:91;;;::::0;-1:-1:-1;;;10825:91:0;;9176:2:1;10825:91:0::1;::::0;::::1;9158:21:1::0;9215:2;9195:18;;;9188:30;-1:-1:-1;;;9234:18:1;;;9227:51;9295:18;;10825:91:0::1;8974:345:1::0;10825:91:0::1;10929:6;:16:::0;;;;10956:7:::1;:18:::0;10985:11:::1;:26:::0;10544:475::o;10228:308::-;818:5;;-1:-1:-1;;;;;818:5:0;804:10;:19;796:51;;;;-1:-1:-1;;;796:51:0;;;;;;;:::i;:::-;10386:19:::1;:36:::0;;10490:38;::::1;;-1:-1:-1::0;;;10490:38:0::1;-1:-1:-1::0;;;;10433:46:0;::::1;;-1:-1:-1::0;;;10433:46:0::1;-1:-1:-1::0;;;;10386:36:0;::::1;;-1:-1:-1::0;;;10386:36:0::1;10433:46:::0;;;;-1:-1:-1;;;;10433:46:0;;;;;;;;;;::::1;10490:38:::0;;;::::1;;::::0;;10228:308::o;11352:659::-;-1:-1:-1;;;;;11480:19:0;;11440:7;11480:19;;;:11;:19;;;;;:31;11440:7;;;;11480:31;;;:69;;-1:-1:-1;;;;;;11515:22:0;;;;;;:11;:22;;;;;:34;;;11480:69;11475:133;;;-1:-1:-1;11575:1:0;;-1:-1:-1;11575:1:0;;-1:-1:-1;11575:1:0;11567:29;;11475:133;-1:-1:-1;;;;;11625:22:0;;;;;;:11;:22;;;;;:38;;;;;;:378;;-1:-1:-1;;;;;11774:19:0;;;;;;:11;:19;;;;;:35;;;;;;:229;;5200:5;11930:11;;11921:6;:20;;;;:::i;:::-;11920:34;;;;:::i;:::-;11956:20;;-1:-1:-1;;;;;11956:20:0;;;-1:-1:-1;;;11978:24:0;;;;11625:378;;11774:229;5200:5;11841:6;;11832;:15;;;;:::i;:::-;11831:29;;;;:::i;:::-;11862:15;;11879:19;;-1:-1:-1;;;;;11862:15:0;;;;-1:-1:-1;;;11879:19:0;;;;11625:378;;;5200:5;11694:7;;11685:6;:16;;;;:::i;:::-;11684:30;;;;:::i;:::-;11716:16;;11734:20;;-1:-1:-1;;;;;11716:16:0;;;;-1:-1:-1;;;11734:20:0;;;;11625:378;11618:385;;;;;;11352:659;;;;;;;;:::o;12171:1794::-;12259:4;-1:-1:-1;;;;;12298:23:0;;12276:87;;;;-1:-1:-1;;;12276:87:0;;9921:2:1;12276:87:0;;;9903:21:1;9960:2;9940:18;;;9933:30;-1:-1:-1;;;9979:18:1;;;9972:44;10033:18;;12276:87:0;9719:338:1;12276:87:0;12405:1;12396:6;:10;12374:71;;;;-1:-1:-1;;;12374:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6357:18:0;;6339:7;6357:18;;;:9;:18;;;;;;12478:6;:27;;12456:97;;;;-1:-1:-1;;;12456:97:0;;10604:2:1;12456:97:0;;;10586:21:1;10643:2;10623:18;;;10616:30;-1:-1:-1;;;10662:18:1;;;10655:50;10722:18;;12456:97:0;10402:344:1;12456:97:0;-1:-1:-1;;;;;12611:17:0;;;;;;:9;:17;;;;;:27;;12632:6;;12611:17;:27;;12632:6;;12611:27;:::i;:::-;;;;-1:-1:-1;12684:11:0;;-1:-1:-1;12684:11:0;;12737:33;12744:6;12752:9;12763:6;12737;:33::i;:::-;12683:87;;-1:-1:-1;12683:87:0;-1:-1:-1;12683:87:0;-1:-1:-1;12829:18:0;12850:12;12683:87;12850:6;:12;:::i;:::-;12829:33;;12894:1;12881:10;:14;12873:38;;;;-1:-1:-1;;;12873:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12978:20:0;;;;;;;:9;:20;;;;;;;:34;;;;;;13039:39;12978:20;;13039:39;;;;;;;13002:10;2196:25:1;;2184:2;2169:18;;2050:177;13039:39:0;;;;;;;;13127:7;;13123:811;;13197:21;-1:-1:-1;;;;;13221:28:0;;;;;;:63;;-1:-1:-1;;;;;;13253:31:0;;13279:4;13253:31;;13221:63;13197:87;;13346:20;13369:16;:49;;13413:4;13369:49;;;13388:14;13369:49;-1:-1:-1;;;;;13493:23:0;;;;;;;:9;:23;;;;;;;:30;;;;;;13558:35;13346:72;;-1:-1:-1;13493:23:0;13558:35;;;;;;;;13520:3;2196:25:1;;2184:2;2169:18;;2050:177;13558:35:0;;;;;;;;13695:7;:27;;;;;13706:16;13695:27;13691:232;;;13841:18;;;;;;;;;;;-1:-1:-1;;;13841:18:0;;;;;13801:61;;;;;;;;;;;;;;;-1:-1:-1;;;;;13801:61:0;-1:-1:-1;;;13801:61:0;;;13761:120;;13744:12;;-1:-1:-1;;;;;13761:17:0;;;:120;;13801:61;13761:120;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;13691:232:0;13136:798;;13123:811;-1:-1:-1;13953:4:0;;12171:1794;-1:-1:-1;;;;;;;12171:1794:0:o;13973:585::-;14039:4;-1:-1:-1;;;;;14078:21:0;;14056:83;;;;-1:-1:-1;;;14056:83:0;;;;;;;:::i;:::-;14181:1;14172:6;:10;14150:71;;;;-1:-1:-1;;;14150:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14264:18:0;;;;;;:9;:18;;;;;;14254:28;;;14232:98;;;;-1:-1:-1;;;14232:98:0;;10604:2:1;14232:98:0;;;10586:21:1;10643:2;10623:18;;;10616:30;-1:-1:-1;;;10662:18:1;;;10655:50;10722:18;;14232:98:0;10402:344:1;14232:98:0;-1:-1:-1;;;;;14386:18:0;;;;;;:9;:18;;;;;:28;;14408:6;;14386:18;:28;;14408:6;;14386:28;:::i;:::-;;;;;;;;14441:6;14425:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;14491:37:0;;2196:25:1;;;14517:1:0;;-1:-1:-1;;;;;14491:37:0;;;;;2184:2:1;2169:18;14491:37:0;2050:177:1;301:173;369:20;;-1:-1:-1;;;;;418:31:1;;408:42;;398:70;;464:1;461;454:12;398:70;301:173;;;:::o;479:186::-;538:6;591:2;579:9;570:7;566:23;562:32;559:52;;;607:1;604;597:12;559:52;630:29;649:9;630:29;:::i;943:254::-;1011:6;1019;1072:2;1060:9;1051:7;1047:23;1043:32;1040:52;;;1088:1;1085;1078:12;1040:52;1111:29;1130:9;1111:29;:::i;:::-;1101:39;1187:2;1172:18;;;;1159:32;;-1:-1:-1;;;943:254:1:o;1202:250::-;1287:1;1297:113;1311:6;1308:1;1305:13;1297:113;;;1387:11;;;1381:18;1368:11;;;1361:39;1333:2;1326:10;1297:113;;;-1:-1:-1;;1444:1:1;1426:16;;1419:27;1202:250::o;1457:396::-;1606:2;1595:9;1588:21;1569:4;1638:6;1632:13;1681:6;1676:2;1665:9;1661:18;1654:34;1697:79;1769:6;1764:2;1753:9;1749:18;1744:2;1736:6;1732:15;1697:79;:::i;:::-;1837:2;1816:15;-1:-1:-1;;1812:29:1;1797:45;;;;1844:2;1793:54;;1457:396;-1:-1:-1;;1457:396:1:o;2232:328::-;2309:6;2317;2325;2378:2;2366:9;2357:7;2353:23;2349:32;2346:52;;;2394:1;2391;2384:12;2346:52;2417:29;2436:9;2417:29;:::i;:::-;2407:39;;2465:38;2499:2;2488:9;2484:18;2465:38;:::i;:::-;2455:48;;2550:2;2539:9;2535:18;2522:32;2512:42;;2232:328;;;;;:::o;2962:180::-;3021:6;3074:2;3062:9;3053:7;3049:23;3045:32;3042:52;;;3090:1;3087;3080:12;3042:52;-1:-1:-1;3113:23:1;;2962:180;-1:-1:-1;2962:180:1:o;3147:118::-;3233:5;3226:13;3219:21;3212:5;3209:32;3199:60;;3255:1;3252;3245:12;3270:315;3335:6;3343;3396:2;3384:9;3375:7;3371:23;3367:32;3364:52;;;3412:1;3409;3402:12;3364:52;3435:29;3454:9;3435:29;:::i;:::-;3425:39;;3514:2;3503:9;3499:18;3486:32;3527:28;3549:5;3527:28;:::i;:::-;3574:5;3564:15;;;3270:315;;;;;:::o;3590:316::-;3667:6;3675;3683;3736:2;3724:9;3715:7;3711:23;3707:32;3704:52;;;3752:1;3749;3742:12;3704:52;-1:-1:-1;;3775:23:1;;;3845:2;3830:18;;3817:32;;-1:-1:-1;3896:2:1;3881:18;;;3868:32;;3590:316;-1:-1:-1;3590:316:1:o;3911:511::-;3979:6;3987;3995;4048:2;4036:9;4027:7;4023:23;4019:32;4016:52;;;4064:1;4061;4054:12;4016:52;4103:9;4090:23;4122:28;4144:5;4122:28;:::i;:::-;4169:5;-1:-1:-1;4226:2:1;4211:18;;4198:32;4239:30;4198:32;4239:30;:::i;:::-;4288:7;-1:-1:-1;4347:2:1;4332:18;;4319:32;4360:30;4319:32;4360:30;:::i;:::-;4409:7;4399:17;;;3911:511;;;;;:::o;4787:260::-;4855:6;4863;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4955:29;4974:9;4955:29;:::i;:::-;4945:39;;5003:38;5037:2;5026:9;5022:18;5003:38;:::i;:::-;4993:48;;4787:260;;;;;:::o;5682:127::-;5743:10;5738:3;5734:20;5731:1;5724:31;5774:4;5771:1;5764:15;5798:4;5795:1;5788:15;5814:128;5881:9;;;5902:11;;;5899:37;;;5916:18;;:::i;5947:343::-;6149:2;6131:21;;;6188:2;6168:18;;;6161:30;-1:-1:-1;;;6222:2:1;6207:18;;6200:49;6281:2;6266:18;;5947:343::o;6295:336::-;6497:2;6479:21;;;6536:2;6516:18;;;6509:30;-1:-1:-1;;;6570:2:1;6555:18;;6548:42;6622:2;6607:18;;6295:336::o;6971:327::-;7173:2;7155:21;;;7212:1;7192:18;;;7185:29;-1:-1:-1;;;7245:2:1;7230:18;;7223:34;7289:2;7274:18;;6971:327::o;7303:184::-;7373:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:52;;;7442:1;7439;7432:12;7394:52;-1:-1:-1;7465:16:1;;7303:184;-1:-1:-1;7303:184:1:o;7492:245::-;7559:6;7612:2;7600:9;7591:7;7587:23;7583:32;7580:52;;;7628:1;7625;7618:12;7580:52;7660:9;7654:16;7679:28;7701:5;7679:28;:::i;9324:168::-;9397:9;;;9428;;9445:15;;;9439:22;;9425:37;9415:71;;9466:18;;:::i;9497:217::-;9537:1;9563;9553:132;;9607:10;9602:3;9598:20;9595:1;9588:31;9642:4;9639:1;9632:15;9670:4;9667:1;9660:15;9553:132;-1:-1:-1;9699:9:1;;9497:217::o;10062:335::-;10264:2;10246:21;;;10303:2;10283:18;;;10276:30;-1:-1:-1;;;10337:2:1;10322:18;;10315:41;10388:2;10373:18;;10062:335::o;10751:287::-;10880:3;10918:6;10912:13;10934:66;10993:6;10988:3;10981:4;10973:6;10969:17;10934:66;:::i;:::-;11016:16;;;;;10751:287;-1:-1:-1;;10751:287:1:o

Swarm Source

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