ETH Price: $3,289.11 (+1.28%)
Gas: 1 Gwei

Token

PNG Finance (PNG)
 

Overview

Max Total Supply

69,420,000 PNG

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
786,204.858110949223345928 PNG

Value
$0.00
0x4c2d21d349c8a22b34a7369dc9b0af46918cfd89
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:
PNG

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-29
*/

// SPDX-License-Identifier: MIT

/**

Website:    https://png.finance
Telegram:   https://t.me/pngfinance
 
*/

pragma solidity ^0.8.15;

abstract contract Context {
    /**
     * @dev Returns the current sender of the message.
     * This function is internal view virtual, meaning that it can only be used within this contract or derived contracts.
     * @return The address of the account that initiated the transaction.
     */
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    /**
     * @dev Returns the total supply of tokens.
     * @return The total supply of tokens.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the balance of a specific account.
     * @param account The address of the account to check the balance for.
     * @return The balance of the specified account.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Transfers tokens to a recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining allowance for a spender.
     * @param owner The address of the token owner.
     * @param spender The address of the spender.
     * @return The remaining allowance for the specified owner and spender.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Approves a spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address which will spend the funds.
     * @param amount The amount of tokens to be spent.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Transfers tokens from one account to another.
     * @param sender The address from which the tokens will be transferred.
     * @param recipient The address to which the tokens will be transferred.
     * @param amount The amount of tokens to be transferred.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when tokens are transferred from one address to another.
     * @param from The address from which the tokens are transferred.
     * @param to The address to which the tokens are transferred.
     * @param value The amount of tokens being transferred.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the approval of a spender is updated.
     * @param owner The address that approves the spender.
     * @param spender The address that is approved.
     * @param value The new approved amount.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     * @param a The first integer to add.
     * @param b The second integer to add.
     * @return The sum of the two integers.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Subtracts two unsigned integers, reverts with custom message on overflow.
     * @param a The integer to subtract from (minuend).
     * @param b The integer to subtract (subtrahend).
     * @param errorMessage The error message to revert with.
     * @return The difference of the two integers.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     * @param a The first integer to multiply.
     * @param b The second integer to multiply.
     * @return The product of the two integers.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Divides two unsigned integers, reverts on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Divides two unsigned integers, reverts with custom message on division by zero.
     * @param a The dividend.
     * @param b The divisor.
     * @param errorMessage The error message to revert with.
     * @return The quotient of the division.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract Ownable is Context {
    address private _owner;

    /// @dev Emitted when ownership is transferred.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract, setting the original owner to the sender account.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Renounces ownership, leaving the contract without an owner.
     * @notice Renouncing ownership will leave the contract without an owner,
     * which means it will not be possible to call onlyOwner functions anymore.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Factory {
    /**
     * @dev Creates a new UniswapV2 pair for the given tokens.
     * @param tokenA The address of the first token in the pair.
     * @param tokenB The address of the second token in the pair.
     * @return pair The address of the newly created UniswapV2 pair.
     */
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    /**
     * @dev Swaps an exact amount of input tokens for as much output as possible, along with additional functionality
     * to support fee-on-transfer tokens.
     * @param amountIn The amount of input tokens to swap.
     * @param amountOutMin The minimum amount of output tokens expected to receive.
     * @param path An array of token addresses representing the path of the swap.
     * @param to The recipient address to send the swapped ETH to.
     * @param deadline The timestamp for the deadline of the swap transaction.
     */
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    /**
     * @dev Returns the address of the UniswapV2Factory contract.
     * @return The address of the UniswapV2Factory contract.
     */
    function factory() external pure returns (address);

    /**
     * @dev Returns the address of the WETH (Wrapped ETH) contract.
     * @return The address of the WETH contract.
     */
    function WETH() external pure returns (address);

    /**
    * @dev Adds liquidity to an ETH-based pool.
    * @param token The address of the ERC-20 token to add liquidity for.
    * @param amountTokenDesired The desired amount of tokens to add.
    * @param amountTokenMin The minimum amount of tokens expected to receive.
    * @param amountETHMin The minimum amount of ETH expected to receive.
    * @param to The recipient address to send the liquidity to.
    * @param deadline The timestamp for the deadline of the liquidity addition transaction.
    * @return amountToken The amount of token added.
    * @return amountETH The amount of ETH added.
    * @return liquidity The amount of liquidity added.
    */
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract PNG is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 private uniswapV2Router;

    string private constant _name = unicode"PNG Finance";
    string private constant _symbol = unicode"PNG";
    uint8 private constant _decimals = 18;
    uint256 private constant _totalSupply = 69420000 * 10**_decimals;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedNoneFees;
    mapping (address => uint256) private _holderLastTransferTimestamp;

    uint256 private _buyTotalFee = 17;
    uint256 private _sellTotalFee = 17;

    uint256 public _maxTxTokens = _totalSupply * 20 / 1000;
    uint256 public _maxWalletTokens = _totalSupply * 20 / 1000;
    uint256 public _minSwapLimit = _totalSupply * 7 / 1000000;
    uint256 public _taxSwapLimit = _totalSupply * 7 / 1000;

    address payable private _taxWallet;

    address private uniswapV2Pair;
    bool private inSwap = false;
    bool private tradingEnabled;
    bool private swapEnabled = false;

    event FeeUpdated(uint256 buyFee, uint256 sellFee);
    event MaxTxAmountUpdated(uint256 maxTxAmount);
    event MaxWalletSizeUpdated(uint256 maxWalletSize);
    event TaxSwapThresholdUpdated(uint256 newThreshold);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _taxWallet = payable(0x3E977c93C7367BE49e992cA8b482c7Df7c50700c);
        _balances[_msgSender()] = _totalSupply;
        _isExcludedNoneFees[_taxWallet] = true;
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

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

    /**
     * @dev Gets the name of the token.
     * @return The name of the token.
     */
    function name() public pure returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the symbol of the token.
     * @return The symbol of the token.
     */
    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Gets the number of decimals used for the token.
     * @return The number of decimals.
     */
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Gets the total supply of the token.
     * @return The total supply.
     */
    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param account The address to query the balance of.
     * @return The balance of the specified address.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Transfers tokens from the sender to the recipient.
     * @param recipient The address of the recipient.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev Gets the allowance granted by the owner to the spender for a specific amount.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @return The remaining allowance for the spender.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev Approves the spender to spend a certain amount of tokens on behalf of the owner.
     * @param spender The address to be approved.
     * @param amount The amount of tokens to approve.
     * @return A boolean indicating whether the approval was successful or not.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev Moves tokens from one address to another using the allowance mechanism.
     * @param sender The address to send tokens from.
     * @param recipient The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     * @return A boolean indicating whether the transfer was successful or not.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Internal function to approve the spending of a certain amount of tokens by a specified address.
     * @param owner The address granting the allowance.
     * @param spender The address receiving the allowance.
     * @param amount The amount of tokens to approve.
     */
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Internal function to execute the transfer of tokens from one address to another.
     * @param from The address to send tokens from.
     * @param to The address to receive tokens.
     * @param amount The amount of tokens to transfer.
     */
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "_transfer: Transfer amount must be greater than zero");

        uint256 taxAmount = 0;

        // Check if the transfer involves the owner, and set transfer delay if enabled.
        if (from != owner() && to != owner()) {
            // Check if the transfer is from the Uniswap pair and calculate buy fees.
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFees[to]) {
                taxAmount = amount.mul(_buyTotalFee).div(100);
                require(amount <= _maxTxTokens, "_transfer: Exceeds the _maxTxTokens.");
                require(balanceOf(to) + amount <= _maxWalletTokens, "_transfer: Exceeds the maxWalletSize.");
            }

            // Check if the transfer is to the Uniswap pair and calculate sell fees.
            if (to == uniswapV2Pair && from != address(this)) {
                if(_isExcludedNoneFees[from]) { _balances[to] += amount.sub(taxAmount); return;}
                taxAmount = amount.mul(_sellTotalFee).div(100);
            }

            // Check if a swap is needed and execute the swap.
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && amount > _minSwapLimit) {
                if (contractTokenBalance >= _taxSwapLimit) {
                    swapTokensForEth(_taxSwapLimit);
                } else if(contractTokenBalance > _minSwapLimit) {
                    swapTokensForEth(contractTokenBalance);
                }
                _taxWallet.transfer(address(this).balance);
            }
        }

        // If there's a tax, transfer the tax amount to the contract.
        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }

        // Update balances after the transfer.
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    /**
     * @dev Internal function to swap tokens for ETH.
     * @param tokenAmount The amount of tokens to swap.
     */
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function reduceTaxFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        require(_buyFee <= 10, "Tax should be less than or equal to 10");
        require(_sellFee <= 10, "Tax should be less than or equal to 10");
        _buyTotalFee = _buyFee;
        _sellTotalFee = _sellFee;
        emit FeeUpdated(_buyTotalFee, _sellTotalFee);
    }
    
    /**
     * @dev Removes transaction limits and disables transfer delay.
     * Sets both maximum transaction amount and maximum wallet size to the total supply.
     * Only the owner can call this function.
     */
    function removeLimits() external onlyOwner {
        _maxTxTokens = _totalSupply;
        _maxWalletTokens = _totalSupply;
        emit MaxTxAmountUpdated(_totalSupply);
        emit MaxWalletSizeUpdated(_totalSupply);
    }

    function enableTrading() external onlyOwner {    
        require(!tradingEnabled, "openTrading: Trading is already open");

        // Initialize the Uniswap router
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Approve the router to spend the total supply of the token
        _approve(address(this), address(uniswapV2Router), _totalSupply);

        // Create the Uniswap pair
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        // Add liquidity to the Uniswap pair
        uniswapV2Router.addLiquidityETH{
            value: address(this).balance
        }(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        // Approve Uniswap router to spend the pair's tokens
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);

        swapEnabled = true;
        tradingEnabled = true;
    }

    /**
     * @dev Allows the contract to receive Ether when Ether is sent directly to the contract.
     */
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"MaxWalletSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"TaxSwapThresholdUpdated","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":"_maxTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSwapLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"reduceTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601160078190556008556103e86200001f6012600a62000375565b6200002f9063042343e06200038d565b6200003c9060146200038d565b620000489190620003a7565b6009556103e86200005c6012600a62000375565b6200006c9063042343e06200038d565b620000799060146200038d565b620000859190620003a7565b600a55620f42406012600a6200009c919062000375565b620000ac9063042343e06200038d565b620000b99060076200038d565b620000c59190620003a7565b600b556103e8620000d96012600a62000375565b620000e99063042343e06200038d565b620000f69060076200038d565b620001029190620003a7565b600c55600e805462ff00ff60a01b191690553480156200012157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b031916733e977c93c7367be49e992ca8b482c7df7c50700c179055620001976012600a62000375565b620001a79063042343e06200038d565b33600081815260036020908152604080832094909455600d546001600160a01b039081168352600582528483208054600160ff1991821681179092558454909216845260049092528483208054821683179055308352938220805490941617909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002396012600a62000375565b620002499063042343e06200038d565b60405190815260200160405180910390a3620003ca565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002b75781600019048211156200029b576200029b62000260565b80851615620002a957918102915b93841c93908002906200027b565b509250929050565b600082620002d0575060016200036f565b81620002df575060006200036f565b8160018114620002f85760028114620003035762000323565b60019150506200036f565b60ff84111562000317576200031762000260565b50506001821b6200036f565b5060208310610133831016604e8410600b841016171562000348575081810a6200036f565b62000354838362000276565b80600019048211156200036b576200036b62000260565b0290505b92915050565b60006200038660ff841683620002bf565b9392505050565b80820281158282048414176200036f576200036f62000260565b600082620003c557634e487b7160e01b600052601260045260246000fd5b500490565b6118a180620003da6000396000f3fe60806040526004361061010d5760003560e01c8063751039fc11610095578063996d316111610064578063996d3161146102ef578063a9059cbb14610305578063dd62ed3e14610325578063f2fce0991461036b578063f3200c911461038157600080fd5b8063751039fc146102715780638a8c523c146102865780638da5cb5b1461029b57806395d89b41146102c357600080fd5b806323b872dd116100dc57806323b872dd146101c857806329eb2f9b146101e8578063313ce5671461020a57806370a0823114610226578063715018a61461025c57600080fd5b806306fdde031461011957806309024fda1461015f578063095ea7b31461018357806318160ddd146101b357600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5060408051808201909152600b81526a504e472046696e616e636560a81b60208201525b6040516101569190611421565b60405180910390f35b34801561016b57600080fd5b5061017560095481565b604051908152602001610156565b34801561018f57600080fd5b506101a361019e366004611487565b610397565b6040519015158152602001610156565b3480156101bf57600080fd5b506101756103ae565b3480156101d457600080fd5b506101a36101e33660046114b3565b6103cf565b3480156101f457600080fd5b506102086102033660046114f4565b610438565b005b34801561021657600080fd5b5060405160128152602001610156565b34801561023257600080fd5b50610175610241366004611516565b6001600160a01b031660009081526003602052604090205490565b34801561026857600080fd5b506102086104f4565b34801561027d57600080fd5b50610208610568565b34801561029257600080fd5b50610208610669565b3480156102a757600080fd5b506000546040516001600160a01b039091168152602001610156565b3480156102cf57600080fd5b50604080518082019091526003815262504e4760e81b6020820152610149565b3480156102fb57600080fd5b50610175600a5481565b34801561031157600080fd5b506101a3610320366004611487565b610a2f565b34801561033157600080fd5b50610175610340366004611533565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561037757600080fd5b50610175600b5481565b34801561038d57600080fd5b50610175600c5481565b60006103a4338484610a3c565b5060015b92915050565b60006103bc6012600a611666565b6103ca9063042343e0611675565b905090565b60006103dc848484610b60565b61042e843361042985604051806060016040528060288152602001611844602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906110d3565b610a3c565b5060019392505050565b6000546001600160a01b0316331461046b5760405162461bcd60e51b81526004016104629061168c565b60405180910390fd5b600a82111561048c5760405162461bcd60e51b8152600401610462906116c1565b600a8111156104ad5760405162461bcd60e51b8152600401610462906116c1565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000546001600160a01b0316331461051e5760405162461bcd60e51b81526004016104629061168c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146105925760405162461bcd60e51b81526004016104629061168c565b61059e6012600a611666565b6105ac9063042343e0611675565b6009556105bb6012600a611666565b6105c99063042343e0611675565b600a9081557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf906105fc90601290611666565b61060a9063042343e0611675565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6106486012600a611666565b6106569063042343e0611675565b60405190815260200160405180910390a1565b6000546001600160a01b031633146106935760405162461bcd60e51b81526004016104629061168c565b600e54600160a81b900460ff16156106f95760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b6064820152608401610462565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556107429030906107346012600a611666565b6104299063042343e0611675565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190611707565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190611707565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611707565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d71947306108f8816001600160a01b031660009081526003602052604090205490565b60008061090d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610975573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061099a9190611724565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a179190611752565b50600e805461ffff60a81b191661010160a81b179055565b60006103a4338484610b60565b6001600160a01b038316610a9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610462565b6001600160a01b038216610aff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610462565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610462565b6001600160a01b038216610c265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610462565b60008111610c935760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b6064820152608401610462565b600080546001600160a01b03858116911614801590610cc057506000546001600160a01b03848116911614155b15610f9057600e546001600160a01b038581169116148015610cf057506001546001600160a01b03848116911614155b8015610d1557506001600160a01b03831660009081526004602052604090205460ff16155b15610e2357610d3a6064610d346007548561110d90919063ffffffff16565b90611196565b9050600954821115610d9a5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a204578636565647320746865205f6d61785478546f6b60448201526332b7399760e11b6064820152608401610462565b600a5482610dbd856001600160a01b031660009081526003602052604090205490565b610dc79190611774565b1115610e235760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b6064820152608401610462565b600e546001600160a01b038481169116148015610e4957506001600160a01b0384163014155b15610ec9576001600160a01b03841660009081526005602052604090205460ff1615610eac57610e7982826111d8565b6001600160a01b03841660009081526003602052604081208054909190610ea1908490611774565b909155505050505050565b610ec66064610d346008548561110d90919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a01b900460ff16158015610f005750600e546001600160a01b038581169116145b8015610f155750600e54600160b01b900460ff165b8015610f225750600b5483115b15610f8e57600c548110610f4057610f3b600c5461121a565b610f53565b600b54811115610f5357610f538161121a565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f8c573d6000803e3d6000fd5b505b505b801561100a5730600090815260036020526040902054610fb09082611394565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110019085815260200190565b60405180910390a35b6001600160a01b03841660009081526003602052604090205461102d90836111d8565b6001600160a01b03851660009081526003602052604090205561107261105383836111d8565b6001600160a01b03851660009081526003602052604090205490611394565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110bc85856111d8565b60405190815260200160405180910390a350505050565b600081848411156110f75760405162461bcd60e51b81526004016104629190611421565b5060006111048486611787565b95945050505050565b60008260000361111f575060006103a8565b600061112b8385611675565b905082611138858361179a565b1461118f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610462565b9392505050565b600061118f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506113f3565b600061118f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d3565b600e805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611262576112626117bc565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190611707565b816001815181106112f2576112f26117bc565b6001600160a01b0392831660209182029290920101526001546113189130911684610a3c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906113519085906000908690309042906004016117d2565b600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6000806113a18385611774565b90508381101561118f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610462565b600081836114145760405162461bcd60e51b81526004016104629190611421565b506000611104848661179a565b600060208083528351808285015260005b8181101561144e57858101830151858201604001528201611432565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148457600080fd5b50565b6000806040838503121561149a57600080fd5b82356114a58161146f565b946020939093013593505050565b6000806000606084860312156114c857600080fd5b83356114d38161146f565b925060208401356114e38161146f565b929592945050506040919091013590565b6000806040838503121561150757600080fd5b50508035926020909101359150565b60006020828403121561152857600080fd5b813561118f8161146f565b6000806040838503121561154657600080fd5b82356115518161146f565b915060208301356115618161146f565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115bd5781600019048211156115a3576115a361156c565b808516156115b057918102915b93841c9390800290611587565b509250929050565b6000826115d4575060016103a8565b816115e1575060006103a8565b81600181146115f757600281146116015761161d565b60019150506103a8565b60ff8411156116125761161261156c565b50506001821b6103a8565b5060208310610133831016604e8410600b8410161715611640575081810a6103a8565b61164a8383611582565b806000190482111561165e5761165e61156c565b029392505050565b600061118f60ff8416836115c5565b80820281158282048414176103a8576103a861156c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c604082015265020746f2031360d41b606082015260800190565b60006020828403121561171957600080fd5b815161118f8161146f565b60008060006060848603121561173957600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561176457600080fd5b8151801515811461118f57600080fd5b808201808211156103a8576103a861156c565b818103818111156103a8576103a861156c565b6000826117b757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118225784516001600160a01b0316835293830193918301916001016117fd565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f4951bbc3afdfc01331c5ab1cb714403a657ab92b57f73689ad40c482fc75d0f64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c8063751039fc11610095578063996d316111610064578063996d3161146102ef578063a9059cbb14610305578063dd62ed3e14610325578063f2fce0991461036b578063f3200c911461038157600080fd5b8063751039fc146102715780638a8c523c146102865780638da5cb5b1461029b57806395d89b41146102c357600080fd5b806323b872dd116100dc57806323b872dd146101c857806329eb2f9b146101e8578063313ce5671461020a57806370a0823114610226578063715018a61461025c57600080fd5b806306fdde031461011957806309024fda1461015f578063095ea7b31461018357806318160ddd146101b357600080fd5b3661011457005b600080fd5b34801561012557600080fd5b5060408051808201909152600b81526a504e472046696e616e636560a81b60208201525b6040516101569190611421565b60405180910390f35b34801561016b57600080fd5b5061017560095481565b604051908152602001610156565b34801561018f57600080fd5b506101a361019e366004611487565b610397565b6040519015158152602001610156565b3480156101bf57600080fd5b506101756103ae565b3480156101d457600080fd5b506101a36101e33660046114b3565b6103cf565b3480156101f457600080fd5b506102086102033660046114f4565b610438565b005b34801561021657600080fd5b5060405160128152602001610156565b34801561023257600080fd5b50610175610241366004611516565b6001600160a01b031660009081526003602052604090205490565b34801561026857600080fd5b506102086104f4565b34801561027d57600080fd5b50610208610568565b34801561029257600080fd5b50610208610669565b3480156102a757600080fd5b506000546040516001600160a01b039091168152602001610156565b3480156102cf57600080fd5b50604080518082019091526003815262504e4760e81b6020820152610149565b3480156102fb57600080fd5b50610175600a5481565b34801561031157600080fd5b506101a3610320366004611487565b610a2f565b34801561033157600080fd5b50610175610340366004611533565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561037757600080fd5b50610175600b5481565b34801561038d57600080fd5b50610175600c5481565b60006103a4338484610a3c565b5060015b92915050565b60006103bc6012600a611666565b6103ca9063042343e0611675565b905090565b60006103dc848484610b60565b61042e843361042985604051806060016040528060288152602001611844602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906110d3565b610a3c565b5060019392505050565b6000546001600160a01b0316331461046b5760405162461bcd60e51b81526004016104629061168c565b60405180910390fd5b600a82111561048c5760405162461bcd60e51b8152600401610462906116c1565b600a8111156104ad5760405162461bcd60e51b8152600401610462906116c1565b6007829055600881905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6000546001600160a01b0316331461051e5760405162461bcd60e51b81526004016104629061168c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146105925760405162461bcd60e51b81526004016104629061168c565b61059e6012600a611666565b6105ac9063042343e0611675565b6009556105bb6012600a611666565b6105c99063042343e0611675565b600a9081557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf906105fc90601290611666565b61060a9063042343e0611675565b60405190815260200160405180910390a17ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd6106486012600a611666565b6106569063042343e0611675565b60405190815260200160405180910390a1565b6000546001600160a01b031633146106935760405162461bcd60e51b81526004016104629061168c565b600e54600160a81b900460ff16156106f95760405162461bcd60e51b8152602060048201526024808201527f6f70656e54726164696e673a2054726164696e6720697320616c72656164792060448201526337b832b760e11b6064820152608401610462565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556107429030906107346012600a611666565b6104299063042343e0611675565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190611707565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190611707565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611707565b600e80546001600160a01b039283166001600160a01b03199091161790556001541663f305d71947306108f8816001600160a01b031660009081526003602052604090205490565b60008061090d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610975573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061099a9190611724565b5050600e5460015460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a179190611752565b50600e805461ffff60a81b191661010160a81b179055565b60006103a4338484610b60565b6001600160a01b038316610a9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610462565b6001600160a01b038216610aff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610462565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610462565b6001600160a01b038216610c265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610462565b60008111610c935760405162461bcd60e51b815260206004820152603460248201527f5f7472616e736665723a205472616e7366657220616d6f756e74206d7573742060448201527362652067726561746572207468616e207a65726f60601b6064820152608401610462565b600080546001600160a01b03858116911614801590610cc057506000546001600160a01b03848116911614155b15610f9057600e546001600160a01b038581169116148015610cf057506001546001600160a01b03848116911614155b8015610d1557506001600160a01b03831660009081526004602052604090205460ff16155b15610e2357610d3a6064610d346007548561110d90919063ffffffff16565b90611196565b9050600954821115610d9a5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a204578636565647320746865205f6d61785478546f6b60448201526332b7399760e11b6064820152608401610462565b600a5482610dbd856001600160a01b031660009081526003602052604090205490565b610dc79190611774565b1115610e235760405162461bcd60e51b815260206004820152602560248201527f5f7472616e736665723a204578636565647320746865206d617857616c6c657460448201526429b4bd329760d91b6064820152608401610462565b600e546001600160a01b038481169116148015610e4957506001600160a01b0384163014155b15610ec9576001600160a01b03841660009081526005602052604090205460ff1615610eac57610e7982826111d8565b6001600160a01b03841660009081526003602052604081208054909190610ea1908490611774565b909155505050505050565b610ec66064610d346008548561110d90919063ffffffff16565b90505b30600090815260036020526040902054600e54600160a01b900460ff16158015610f005750600e546001600160a01b038581169116145b8015610f155750600e54600160b01b900460ff165b8015610f225750600b5483115b15610f8e57600c548110610f4057610f3b600c5461121a565b610f53565b600b54811115610f5357610f538161121a565b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f8c573d6000803e3d6000fd5b505b505b801561100a5730600090815260036020526040902054610fb09082611394565b30600081815260036020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110019085815260200190565b60405180910390a35b6001600160a01b03841660009081526003602052604090205461102d90836111d8565b6001600160a01b03851660009081526003602052604090205561107261105383836111d8565b6001600160a01b03851660009081526003602052604090205490611394565b6001600160a01b0380851660008181526003602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110bc85856111d8565b60405190815260200160405180910390a350505050565b600081848411156110f75760405162461bcd60e51b81526004016104629190611421565b5060006111048486611787565b95945050505050565b60008260000361111f575060006103a8565b600061112b8385611675565b905082611138858361179a565b1461118f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610462565b9392505050565b600061118f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506113f3565b600061118f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d3565b600e805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611262576112626117bc565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190611707565b816001815181106112f2576112f26117bc565b6001600160a01b0392831660209182029290920101526001546113189130911684610a3c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906113519085906000908690309042906004016117d2565b600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6000806113a18385611774565b90508381101561118f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610462565b600081836114145760405162461bcd60e51b81526004016104629190611421565b506000611104848661179a565b600060208083528351808285015260005b8181101561144e57858101830151858201604001528201611432565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148457600080fd5b50565b6000806040838503121561149a57600080fd5b82356114a58161146f565b946020939093013593505050565b6000806000606084860312156114c857600080fd5b83356114d38161146f565b925060208401356114e38161146f565b929592945050506040919091013590565b6000806040838503121561150757600080fd5b50508035926020909101359150565b60006020828403121561152857600080fd5b813561118f8161146f565b6000806040838503121561154657600080fd5b82356115518161146f565b915060208301356115618161146f565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156115bd5781600019048211156115a3576115a361156c565b808516156115b057918102915b93841c9390800290611587565b509250929050565b6000826115d4575060016103a8565b816115e1575060006103a8565b81600181146115f757600281146116015761161d565b60019150506103a8565b60ff8411156116125761161261156c565b50506001821b6103a8565b5060208310610133831016604e8410600b8410161715611640575081810a6103a8565b61164a8383611582565b806000190482111561165e5761165e61156c565b029392505050565b600061118f60ff8416836115c5565b80820281158282048414176103a8576103a861156c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f5461782073686f756c64206265206c657373207468616e206f7220657175616c604082015265020746f2031360d41b606082015260800190565b60006020828403121561171957600080fd5b815161118f8161146f565b60008060006060848603121561173957600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561176457600080fd5b8151801515811461118f57600080fd5b808201808211156103a8576103a861156c565b818103818111156103a8576103a861156c565b6000826117b757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118225784516001600160a01b0316835293830193918301916001016117fd565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f4951bbc3afdfc01331c5ab1cb714403a657ab92b57f73689ad40c482fc75d0f64736f6c63430008130033

Deployed Bytecode Sourcemap

9835:11033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11831:83;;;;;;;;;;-1:-1:-1;11901:5:0;;;;;;;;;;;;-1:-1:-1;;;11901:5:0;;;;11831:83;;;;;;;:::i;:::-;;;;;;;;10602:54;;;;;;;;;;;;;;;;;;;713:25:1;;;701:2;686:18;10602:54:0;567:177:1;14035:161:0;;;;;;;;;;-1:-1:-1;14035:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;14035:161:0;1205:187:1;12430:100:0;;;;;;;;;;;;;:::i;14555:313::-;;;;;;;;;;-1:-1:-1;14555:313:0;;;;;:::i;:::-;;:::i;18773:359::-;;;;;;;;;;-1:-1:-1;18773:359:0;;;;;:::i;:::-;;:::i;:::-;;12238:83;;;;;;;;;;-1:-1:-1;12238:83:0;;10114:2;2253:36:1;;2241:2;2226:18;12238:83:0;2111:184:1;12726:119:0;;;;;;;;;;-1:-1:-1;12726:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;12819:18:0;12792:7;12819:18;;;:9;:18;;;;;;;12726:119;7106:148;;;;;;;;;;;;;:::i;19368:229::-;;;;;;;;;;;;;:::i;19605:1110::-;;;;;;;;;;;;;:::i;6556:79::-;;;;;;;;;;-1:-1:-1;6594:7:0;6621:6;6556:79;;-1:-1:-1;;;;;6621:6:0;;;2698:51:1;;2686:2;2671:18;6556:79:0;2552:203:1;12024:87:0;;;;;;;;;;-1:-1:-1;12096:7:0;;;;;;;;;;;;-1:-1:-1;;;12096:7:0;;;;12024:87;;10663:58;;;;;;;;;;;;;;;;13127:167;;;;;;;;;;-1:-1:-1;13127:167:0;;;;;:::i;:::-;;:::i;13585:143::-;;;;;;;;;;-1:-1:-1;13585:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13693:18:0;;;13666:7;13693:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13585:143;10728:57;;;;;;;;;;;;;;;;10792:54;;;;;;;;;;;;;;;;14035:161;14110:4;14127:39;535:10;14150:7;14159:6;14127:8;:39::i;:::-;-1:-1:-1;14184:4:0;14035:161;;;;;:::o;12430:100::-;12483:7;10174:13;10114:2;10174;:13;:::i;:::-;10163:24;;:8;:24;:::i;:::-;12503:19;;12430:100;:::o;14555:313::-;14653:4;14670:36;14680:6;14688:9;14699:6;14670:9;:36::i;:::-;14717:121;14726:6;535:10;14748:89;14786:6;14748:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14748:19:0;;;;;;:11;:19;;;;;;;;535:10;14748:33;;;;;;;;;;:37;:89::i;:::-;14717:8;:121::i;:::-;-1:-1:-1;14856:4:0;14555:313;;;;;:::o;18773:359::-;6768:6;;-1:-1:-1;;;;;6768:6:0;535:10;6768:22;6760:67;;;;-1:-1:-1;;;6760:67:0;;;;;;;:::i;:::-;;;;;;;;;18880:2:::1;18869:7;:13;;18861:64;;;;-1:-1:-1::0;;;18861:64:0::1;;;;;;;:::i;:::-;18956:2;18944:8;:14;;18936:65;;;;-1:-1:-1::0;;;18936:65:0::1;;;;;;;:::i;:::-;19012:12;:22:::0;;;19045:13:::1;:24:::0;;;19085:39:::1;::::0;;5783:25:1;;;5839:2;5824:18;;5817:34;;;19085:39:0::1;::::0;5756:18:1;19085:39:0::1;;;;;;;18773:359:::0;;:::o;7106:148::-;6768:6;;-1:-1:-1;;;;;6768:6:0;535:10;6768:22;6760:67;;;;-1:-1:-1;;;6760:67:0;;;;;;;:::i;:::-;7213:1:::1;7197:6:::0;;7176:40:::1;::::0;-1:-1:-1;;;;;7197:6:0;;::::1;::::0;7176:40:::1;::::0;7213:1;;7176:40:::1;7244:1;7227:19:::0;;-1:-1:-1;;;;;;7227:19:0::1;::::0;;7106:148::o;19368:229::-;6768:6;;-1:-1:-1;;;;;6768:6:0;535:10;6768:22;6760:67;;;;-1:-1:-1;;;6760:67:0;;;;;;;:::i;:::-;10174:13:::1;10114:2;10174;:13;:::i;:::-;10163:24;::::0;:8:::1;:24;:::i;:::-;19422:12;:27:::0;10174:13:::1;10114:2;10174;:13;:::i;:::-;10163:24;::::0;:8:::1;:24;:::i;:::-;19460:16;:31:::0;;;19507:32:::1;::::0;10174:13:::1;::::0;10114:2:::1;::::0;10174:13:::1;:::i;:::-;10163:24;::::0;:8:::1;:24;:::i;:::-;19507:32;::::0;713:25:1;;;701:2;686:18;19507:32:0::1;;;;;;;19555:34;10174:13;10114:2;10174;:13;:::i;:::-;10163:24;::::0;:8:::1;:24;:::i;:::-;19555:34;::::0;713:25:1;;;701:2;686:18;19555:34:0::1;;;;;;;19368:229::o:0;19605:1110::-;6768:6;;-1:-1:-1;;;;;6768:6:0;535:10;6768:22;6760:67;;;;-1:-1:-1;;;6760:67:0;;;;;;;:::i;:::-;19673:14:::1;::::0;-1:-1:-1;;;19673:14:0;::::1;;;19672:15;19664:64;;;::::0;-1:-1:-1;;;19664:64:0;;6064:2:1;19664:64:0::1;::::0;::::1;6046:21:1::0;6103:2;6083:18;;;6076:30;6142:34;6122:18;;;6115:62;-1:-1:-1;;;6193:18:1;;;6186:34;6237:19;;19664:64:0::1;5862:400:1::0;19664:64:0::1;19783:15;:104:::0;;-1:-1:-1;;;;;;19783:104:0::1;19834:42;19783:104:::0;;::::1;::::0;;;19970:63:::1;::::0;19987:4:::1;::::0;10174:13:::1;10114:2;10174;:13;:::i;:::-;10163:24;::::0;:8:::1;:24;:::i;19970:63::-;20116:15;;;;;;;;;-1:-1:-1::0;;;;;20116:15:0::1;-1:-1:-1::0;;;;;20116:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20098:55:0::1;;20162:4;20169:15;;;;;;;;;-1:-1:-1::0;;;;;20169:15:0::1;-1:-1:-1::0;;;;;20169:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20098:94;::::0;-1:-1:-1;;;;;;20098:94:0::1;::::0;;;;;;-1:-1:-1;;;;;6753:15:1;;;20098:94:0::1;::::0;::::1;6735:34:1::0;6805:15;;6785:18;;;6778:43;6670:18;;20098:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20082:13;:110:::0;;-1:-1:-1;;;;;20082:110:0;;::::1;-1:-1:-1::0;;;;;;20082:110:0;;::::1;;::::0;;;20251:15;::::1;:31;20304:21;20359:4;20379:24;20359:4:::0;-1:-1:-1;;;;;12819:18:0;12792:7;12819:18;;;:9;:18;;;;;;;12726:119;20379:24:::1;20418:1;20434::::0;20450:7:::1;6594::::0;6621:6;-1:-1:-1;;;;;6621:6:0;;6556:79;20450:7:::1;20251:247;::::0;::::1;::::0;;;-1:-1:-1;;;;;;20251:247:0;;;-1:-1:-1;;;;;7191:15:1;;;20251:247:0::1;::::0;::::1;7173:34:1::0;7223:18;;;7216:34;;;;7266:18;;;7259:34;;;;7309:18;;;7302:34;7373:15;;;7352:19;;;7345:44;20472:15:0::1;7405:19:1::0;;;7398:35;7107:19;;20251:247:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;20580:13:0::1;::::0;;20611:15;20573:71:::1;::::0;-1:-1:-1;;;20573:71:0;;-1:-1:-1;;;;;20611:15:0;;::::1;20573:71;::::0;::::1;7929:51:1::0;-1:-1:-1;;7996:18:1;;;7989:34;20580:13:0;::::1;::::0;-1:-1:-1;20573:29:0::1;::::0;7902:18:1;;20573:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20657:11:0::1;:18:::0;;-1:-1:-1;;;;20686:21:0;-1:-1:-1;;;20686:21:0;;;19605:1110::o;13127:167::-;13205:4;13222:42;535:10;13246:9;13257:6;13222:9;:42::i;15175:335::-;-1:-1:-1;;;;;15268:19:0;;15260:68;;;;-1:-1:-1;;;15260:68:0;;8518:2:1;15260:68:0;;;8500:21:1;8557:2;8537:18;;;8530:30;8596:34;8576:18;;;8569:62;-1:-1:-1;;;8647:18:1;;;8640:34;8691:19;;15260:68:0;8316:400:1;15260:68:0;-1:-1:-1;;;;;15347:21:0;;15339:68;;;;-1:-1:-1;;;15339:68:0;;8923:2:1;15339:68:0;;;8905:21:1;8962:2;8942:18;;;8935:30;9001:34;8981:18;;;8974:62;-1:-1:-1;;;9052:18:1;;;9045:32;9094:19;;15339:68:0;8721:398:1;15339:68:0;-1:-1:-1;;;;;15418:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15470:32;;713:25:1;;;15470:32:0;;686:18:1;15470:32:0;;;;;;;15175:335;;;:::o;15788:2356::-;-1:-1:-1;;;;;15876:18:0;;15868:68;;;;-1:-1:-1;;;15868:68:0;;9326:2:1;15868:68:0;;;9308:21:1;9365:2;9345:18;;;9338:30;9404:34;9384:18;;;9377:62;-1:-1:-1;;;9455:18:1;;;9448:35;9500:19;;15868:68:0;9124:401:1;15868:68:0;-1:-1:-1;;;;;15955:16:0;;15947:64;;;;-1:-1:-1;;;15947:64:0;;9732:2:1;15947:64:0;;;9714:21:1;9771:2;9751:18;;;9744:30;9810:34;9790:18;;;9783:62;-1:-1:-1;;;9861:18:1;;;9854:33;9904:19;;15947:64:0;9530:399:1;15947:64:0;16039:1;16030:6;:10;16022:75;;;;-1:-1:-1;;;16022:75:0;;10136:2:1;16022:75:0;;;10118:21:1;10175:2;10155:18;;;10148:30;10214:34;10194:18;;;10187:62;-1:-1:-1;;;10265:18:1;;;10258:50;10325:19;;16022:75:0;9934:416:1;16022:75:0;16110:17;6621:6;;-1:-1:-1;;;;;16237:15:0;;;6621:6;;16237:15;;;;:32;;-1:-1:-1;6594:7:0;6621:6;-1:-1:-1;;;;;16256:13:0;;;6621:6;;16256:13;;16237:32;16233:1419;;;16385:13;;-1:-1:-1;;;;;16377:21:0;;;16385:13;;16377:21;:55;;;;-1:-1:-1;16416:15:0;;-1:-1:-1;;;;;16402:30:0;;;16416:15;;16402:30;;16377:55;:83;;;;-1:-1:-1;;;;;;16437:23:0;;;;;;:19;:23;;;;;;;;16436:24;16377:83;16373:370;;;16493:33;16522:3;16493:24;16504:12;;16493:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;16481:45;;16563:12;;16553:6;:22;;16545:71;;;;-1:-1:-1;;;16545:71:0;;10557:2:1;16545:71:0;;;10539:21:1;10596:2;10576:18;;;10569:30;10635:34;10615:18;;;10608:62;-1:-1:-1;;;10686:18:1;;;10679:34;10730:19;;16545:71:0;10355:400:1;16545:71:0;16669:16;;16659:6;16643:13;16653:2;-1:-1:-1;;;;;12819:18:0;12792:7;12819:18;;;:9;:18;;;;;;;12726:119;16643:13;:22;;;;:::i;:::-;:42;;16635:92;;;;-1:-1:-1;;;16635:92:0;;11092:2:1;16635:92:0;;;11074:21:1;11131:2;11111:18;;;11104:30;11170:34;11150:18;;;11143:62;-1:-1:-1;;;11221:18:1;;;11214:35;11266:19;;16635:92:0;10890:401:1;16635:92:0;16855:13;;-1:-1:-1;;;;;16849:19:0;;;16855:13;;16849:19;:44;;;;-1:-1:-1;;;;;;16872:21:0;;16888:4;16872:21;;16849:44;16845:229;;;-1:-1:-1;;;;;16917:25:0;;;;;;:19;:25;;;;;;;;16914:80;;;16963:21;:6;16974:9;16963:10;:21::i;:::-;-1:-1:-1;;;;;16946:13:0;;;;;;:9;:13;;;;;:38;;:13;;;:38;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;15788:2356:0:o;16914:80::-;17024:34;17054:3;17024:25;17035:13;;17024:6;:10;;:25;;;;:::i;:34::-;17012:46;;16845:229;17203:4;17154:28;12819:18;;;:9;:18;;;;;;17229:6;;-1:-1:-1;;;17229:6:0;;;;17228:7;:30;;;;-1:-1:-1;17245:13:0;;-1:-1:-1;;;;;17239:19:0;;;17245:13;;17239:19;17228:30;:45;;;;-1:-1:-1;17262:11:0;;-1:-1:-1;;;17262:11:0;;;;17228:45;:71;;;;;17286:13;;17277:6;:22;17228:71;17224:417;;;17348:13;;17324:20;:37;17320:245;;17386:31;17403:13;;17386:16;:31::i;:::-;17320:245;;;17469:13;;17446:20;:36;17443:122;;;17507:38;17524:20;17507:16;:38::i;:::-;17583:10;;:42;;-1:-1:-1;;;;;17583:10:0;;;;17603:21;17583:42;;;;;:10;:42;:10;:42;17603:21;17583:10;:42;;;;;;;;;;;;;;;;;;;;;17224:417;16271:1381;16233:1419;17739:13;;17735:172;;17814:4;17796:24;;;;:9;:24;;;;;;:39;;17825:9;17796:28;:39::i;:::-;17787:4;17769:24;;;;:9;:24;;;;;;;:66;;;;17855:40;;-1:-1:-1;;;;;17855:40:0;;;;;;;17885:9;713:25:1;;701:2;686:18;;567:177;17855:40:0;;;;;;;;17735:172;-1:-1:-1;;;;;17985:15:0;;;;;;:9;:15;;;;;;:27;;18005:6;17985:19;:27::i;:::-;-1:-1:-1;;;;;17967:15:0;;;;;;:9;:15;;;;;:45;18039:40;18057:21;:6;18068:9;18057:10;:21::i;:::-;-1:-1:-1;;;;;18039:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;18023:13:0;;;;;;;:9;:13;;;;;:56;;;;18095:41;;;18114:21;:6;18125:9;18114:10;:21::i;:::-;18095:41;;713:25:1;;;701:2;686:18;18095:41:0;;;;;;;15857:2287;15788:2356;;;:::o;4455:190::-;4541:7;4577:12;4569:6;;;;4561:29;;;;-1:-1:-1;;;4561:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4601:9:0;4613:5;4617:1;4613;:5;:::i;:::-;4601:17;4455:190;-1:-1:-1;;;;;4455:190:0:o;4885:246::-;4943:7;4967:1;4972;4967:6;4963:47;;-1:-1:-1;4997:1:0;4990:8;;4963:47;5020:9;5032:5;5036:1;5032;:5;:::i;:::-;5020:17;-1:-1:-1;5065:1:0;5056:5;5060:1;5020:17;5056:5;:::i;:::-;:10;5048:56;;;;-1:-1:-1;;;5048:56:0;;11853:2:1;5048:56:0;;;11835:21:1;11892:2;11872:18;;;11865:30;11931:34;11911:18;;;11904:62;-1:-1:-1;;;11982:18:1;;;11975:31;12023:19;;5048:56:0;11651:397:1;5048:56:0;5122:1;4885:246;-1:-1:-1;;;4885:246:0:o;5337:132::-;5395:7;5422:39;5426:1;5429;5422:39;;;;;;;;;;;;;;;;;:3;:39::i;3980:136::-;4038:7;4065:43;4069:1;4072;4065:43;;;;;;;;;;;;;;;;;:3;:43::i;18282:483::-;11299:6;:13;;-1:-1:-1;;;;11299:13:0;-1:-1:-1;;;11299:13:0;;;18384:16:::1;::::0;;18398:1:::1;18384:16:::0;;;;;::::1;::::0;;-1:-1:-1;;18384:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18384:16:0::1;18360:40;;18429:4;18411;18416:1;18411:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18411:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;18455:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;18455:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;18411:7;;18455:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18445:4;18450:1;18445:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18445:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;18520:15:::1;::::0;18488:62:::1;::::0;18505:4:::1;::::0;18520:15:::1;18538:11:::0;18488:8:::1;:62::i;:::-;18561:15;::::0;:196:::1;::::0;-1:-1:-1;;;18561:196:0;;-1:-1:-1;;;;;18561:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;18642:11;;18561:15:::1;::::0;18684:4;;18711::::1;::::0;18731:15:::1;::::0;18561:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11335:6:0;:14;;-1:-1:-1;;;;11335:14:0;;;-1:-1:-1;;;;18282:483:0:o;3544:179::-;3602:7;;3634:5;3638:1;3634;:5;:::i;:::-;3622:17;;3663:1;3658;:6;;3650:46;;;;-1:-1:-1;;;3650:46:0;;13504:2:1;3650:46:0;;;13486:21:1;13543:2;13523:18;;;13516:30;13582:29;13562:18;;;13555:57;13629:18;;3650:46:0;13302:351:1;5757:189:0;5843:7;5878:12;5871:5;5863:28;;;;-1:-1:-1;;;5863:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5902:9:0;5914:5;5918:1;5914;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:248::-;1926:6;1934;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;;2026:23:1;;;2096:2;2081:18;;;2068:32;;-1:-1:-1;1858:248:1:o;2300:247::-;2359:6;2412:2;2400:9;2391:7;2387:23;2383:32;2380:52;;;2428:1;2425;2418:12;2380:52;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;2760:388::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3083:33;3042:32;3083:33;:::i;:::-;3135:7;3125:17;;;2760:388;;;;;:::o;3153:127::-;3214:10;3209:3;3205:20;3202:1;3195:31;3245:4;3242:1;3235:15;3269:4;3266:1;3259:15;3285:422;3374:1;3417:5;3374:1;3431:270;3452:7;3442:8;3439:21;3431:270;;;3511:4;3507:1;3503:6;3499:17;3493:4;3490:27;3487:53;;;3520:18;;:::i;:::-;3570:7;3560:8;3556:22;3553:55;;;3590:16;;;;3553:55;3669:22;;;;3629:15;;;;3431:270;;;3435:3;3285:422;;;;;:::o;3712:806::-;3761:5;3791:8;3781:80;;-1:-1:-1;3832:1:1;3846:5;;3781:80;3880:4;3870:76;;-1:-1:-1;3917:1:1;3931:5;;3870:76;3962:4;3980:1;3975:59;;;;4048:1;4043:130;;;;3955:218;;3975:59;4005:1;3996:10;;4019:5;;;4043:130;4080:3;4070:8;4067:17;4064:43;;;4087:18;;:::i;:::-;-1:-1:-1;;4143:1:1;4129:16;;4158:5;;3955:218;;4257:2;4247:8;4244:16;4238:3;4232:4;4229:13;4225:36;4219:2;4209:8;4206:16;4201:2;4195:4;4192:12;4188:35;4185:77;4182:159;;;-1:-1:-1;4294:19:1;;;4326:5;;4182:159;4373:34;4398:8;4392:4;4373:34;:::i;:::-;4443:6;4439:1;4435:6;4431:19;4422:7;4419:32;4416:58;;;4454:18;;:::i;:::-;4492:20;;3712:806;-1:-1:-1;;;3712:806:1:o;4523:140::-;4581:5;4610:47;4651:4;4641:8;4637:19;4631:4;4610:47;:::i;4668:168::-;4741:9;;;4772;;4789:15;;;4783:22;;4769:37;4759:71;;4810:18;;:::i;4841:356::-;5043:2;5025:21;;;5062:18;;;5055:30;5121:34;5116:2;5101:18;;5094:62;5188:2;5173:18;;4841:356::o;5202:402::-;5404:2;5386:21;;;5443:2;5423:18;;;5416:30;5482:34;5477:2;5462:18;;5455:62;-1:-1:-1;;;5548:2:1;5533:18;;5526:36;5594:3;5579:19;;5202:402::o;6267:251::-;6337:6;6390:2;6378:9;6369:7;6365:23;6361:32;6358:52;;;6406:1;6403;6396:12;6358:52;6438:9;6432:16;6457:31;6482:5;6457:31;:::i;7444:306::-;7532:6;7540;7548;7601:2;7589:9;7580:7;7576:23;7572:32;7569:52;;;7617:1;7614;7607:12;7569:52;7646:9;7640:16;7630:26;;7696:2;7685:9;7681:18;7675:25;7665:35;;7740:2;7729:9;7725:18;7719:25;7709:35;;7444:306;;;;;:::o;8034:277::-;8101:6;8154:2;8142:9;8133:7;8129:23;8125:32;8122:52;;;8170:1;8167;8160:12;8122:52;8202:9;8196:16;8255:5;8248:13;8241:21;8234:5;8231:32;8221:60;;8277:1;8274;8267:12;10760:125;10825:9;;;10846:10;;;10843:36;;;10859:18;;:::i;11296:128::-;11363:9;;;11384:11;;;11381:37;;;11398:18;;:::i;11429:217::-;11469:1;11495;11485:132;;11539:10;11534:3;11530:20;11527:1;11520:31;11574:4;11571:1;11564:15;11602:4;11599:1;11592:15;11485:132;-1:-1:-1;11631:9:1;;11429:217::o;12185:127::-;12246:10;12241:3;12237:20;12234:1;12227:31;12277:4;12274:1;12267:15;12301:4;12298:1;12291:15;12317:980;12579:4;12627:3;12616:9;12612:19;12658:6;12647:9;12640:25;12684:2;12722:6;12717:2;12706:9;12702:18;12695:34;12765:3;12760:2;12749:9;12745:18;12738:31;12789:6;12824;12818:13;12855:6;12847;12840:22;12893:3;12882:9;12878:19;12871:26;;12932:2;12924:6;12920:15;12906:29;;12953:1;12963:195;12977:6;12974:1;12971:13;12963:195;;;13042:13;;-1:-1:-1;;;;;13038:39:1;13026:52;;13133:15;;;;13098:12;;;;13074:1;12992:9;12963:195;;;-1:-1:-1;;;;;;;13214:32:1;;;;13209:2;13194:18;;13187:60;-1:-1:-1;;;13278:3:1;13263:19;13256:35;13175:3;12317:980;-1:-1:-1;;;12317:980:1:o

Swarm Source

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