ETH Price: $3,506.41 (+2.50%)
Gas: 2 Gwei

Token

Bunny AI DEX (BUNAI)
 

Overview

Max Total Supply

1,000,000,000 BUNAI

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
25,515,215.495000134 BUNAI

Value
$0.00
0x46e3d123e78628255aaeeae581b8936f23f21619
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:
BUNAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

Website: https://bunnyaidex.com
DEX:  https://app.bunnyaidex.com
Twitter:  https://twitter.com/Bunny_AI_DEX
Telegram:  https://t.me/bunny_ai_dex

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function decimals() external view returns (uint8);

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

contract BUNAI is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Bunny AI DEX";
    string private constant _symbol = "BUNAI";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1_000_000_000 * (10**_decimals);
    uint256 private _maxTxSize = 20_000_000 * (10**_decimals);
    uint256 private _maxWalletSize = 20_000_000 * (10**_decimals);
    uint256 private _maxSwapSize = 10_000_000 * (10**_decimals);
    uint256 private _minSwapSize = 616 * (10**_decimals);
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExceptForBunny;
    IRouter router;
    address public pair;
    bool private _tradingAllowed = false;
    uint256 private liquidityFeePercent = 0;
    uint256 private marketingFeePercent = 2;
    uint256 private utilFeePercent = 0;
    uint256 private buyFee = 1;
    uint256 private sellFee = 1;
    uint256 private transferFee = 0;
    uint256 private denominator = 100;
    bool private _swapEnabled = true;
    bool private _inSwapping;
    modifier lockTheSwap() {
        _inSwapping = true;
        _;
        _inSwapping = false;
    }

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant _bunnyDex = 0x76f44132234823Ad716a8e95C737ba2B0F78e3Bd;
    address private _lpReceiver = msg.sender;

    constructor() Ownable() {
        _isExceptForBunny[address(this)] = true;
        _isExceptForBunny[_lpReceiver] = true;
        _isExceptForBunny[_bunnyDex] = true;
        _isExceptForBunny[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

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

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

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

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal pure {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);
        _checkTradingOpen(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        checkTxLimit(sender, recipient, amount);
        processSwapBack(sender, recipient, amount);
        (uint256 amountSent, uint256 amountReceived) = processFeeTake(
            sender,
            recipient,
            amount
        );
        _balances[sender] = _balances[sender].sub(amountSent);
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function removeLimit() external onlyOwner {
        _maxTxSize = type(uint256).max;
        _maxWalletSize = type(uint256).max;
    }

    function initiateBunnyDex() external onlyOwner {
        require(!_tradingAllowed, "Trading allowed");

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;

        addLiquidity(balanceOf(address(this)), address(this).balance);
    }

    function startBunnyAI() external onlyOwner {
        require(!_tradingAllowed, "Tradeing already allowed");
        marketingFeePercent = 30;
        buyFee = 30;
        sellFee = 30;
        _tradingAllowed = true;
    }

    function changeTaxFee(uint256 _newfees) external onlyOwner {
        marketingFeePercent = _newfees;
        buyFee = _newfees;
        sellFee = _newfees;

        require(buyFee <= 10 && sellFee <= 10);
    }

    function _checkTradingOpen(address sender, address recipient)
        internal
        view
    {
        if (!_isExceptForBunny[sender] && !_isExceptForBunny[recipient]) {
            require(_tradingAllowed, "Trading not allowed yet");
        }
    }

    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !_isExceptForBunny[sender] &&
            !_isExceptForBunny[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletSize,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function checkTxLimit(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(
            amount <= _maxTxSize ||
                _isExceptForBunny[sender] ||
                _isExceptForBunny[recipient],
            "TX Limit Exceeded"
        );
    }

    function _swapBackTokens(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liquidityFeePercent.add(1).add(marketingFeePercent).add(utilFeePercent)
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFeePercent).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = deltaBalance.div(_denominator.sub(liquidityFeePercent));
        uint256 ethForLpAdd = unitBalance.mul(liquidityFeePercent);
        if (ethForLpAdd > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ethForLpAdd);
        }
        uint256 marketingAmt = unitBalance.mul(2).mul(marketingFeePercent);
        if (marketingAmt > 0) {
            payable(_bunnyDex).transfer(marketingAmt);
        }
        uint256 remainingBalance = address(this).balance;
        if (remainingBalance > uint256(0)) {
            payable(_bunnyDex).transfer(remainingBalance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _lpReceiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _checkSwapBack(
        address sender,
        address recipient,
        uint256 amount
    ) internal view returns (bool) {
        bool aboveMin = amount >= _minSwapSize;
        bool aboveThreshold = balanceOf(address(this)) >= _minSwapSize;
        return
            !_inSwapping &&
            _swapEnabled &&
            _tradingAllowed &&
            aboveMin &&
            !_isExceptForBunny[sender] &&
            recipient == pair &&
            aboveThreshold;
    }

    function processSwapBack(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        if (_checkSwapBack(sender, recipient, amount)) {
            uint256 swapTokens = balanceOf(address(this));
            if (swapTokens > _maxSwapSize) swapTokens = _maxSwapSize;
            _swapBackTokens(swapTokens);
        }
    }

    function _calcFeePercent(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return buyFee;
        }
        return transferFee;
    }

    function _shouldFeeTake(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        return !_isExceptForBunny[sender] && !_isExceptForBunny[recipient];
    }

    function processFeeTake(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256, uint256) {
        uint256 xAmount = amount;
        uint256 yAmount = amount;
        uint256 feeAmount;
        if (sender != address(this) && recipient != address(this)) {
            if (_shouldFeeTake(sender, recipient)) {
                if (_calcFeePercent(sender, recipient) > 0) {
                    feeAmount = amount.div(denominator).mul(
                        _calcFeePercent(sender, recipient)
                    );
                    _balances[address(this)] = _balances[address(this)].add(
                        feeAmount
                    );
                    emit Transfer(sender, address(this), feeAmount);

                    yAmount = amount.sub(feeAmount);
                }
            } else {
                if (recipient == pair && sender != owner()) xAmount = feeAmount;
            }
        }
        return (xAmount, yAmount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newfees","type":"uint256"}],"name":"changeTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"initiateBunnyDex","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":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBunnyAI","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200030f565b6200002290633b9aca0062000326565b600155620000336009600a6200030f565b62000043906301312d0062000326565b600255620000546009600a6200030f565b62000064906301312d0062000326565b600355620000756009600a6200030f565b62000084906298968062000326565b600455620000956009600a6200030f565b620000a39061026862000326565b600555600a805460ff60a01b191690555f600b8190556002600c55600d8190556001600e819055600f81905560109190915560646011556012805461ff01600160b01b03191633620100000217909117905534801562000101575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350305f9081526008602090815260408083208054600160ff1991821681179092556012546001600160a01b036201000090910416855282852080548216831790557fae7c1d59d90071239c87e9c9db0780c8efaeaefe9fed6e657cd75a199c49581580548216831790553380865283862080549092168317909155905460068452828520819055915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000340565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200025457815f190482111562000238576200023862000200565b808516156200024657918102915b93841c939080029062000219565b509250929050565b5f826200026c5750600162000309565b816200027a57505f62000309565b81600181146200029357600281146200029e57620002be565b600191505062000309565b60ff841115620002b257620002b262000200565b50506001821b62000309565b5060208310610133831016604e8410600b8410161715620002e3575081810a62000309565b620002ef838362000214565b805f190482111562000305576200030562000200565b0290505b92915050565b5f6200031f60ff8416836200025c565b9392505050565b808202811582820484141762000309576200030962000200565b611706806200034e5f395ff3fe6080604052600436106100f2575f3560e01c8063715018a611610087578063a8aa1b3111610057578063a8aa1b31146102bc578063a9059cbb146102db578063d714a1c3146102fa578063dd62ed3e1461030e575f80fd5b8063715018a6146102375780638da5cb5b1461024b5780639418ad261461027b57806395d89b411461028f575f80fd5b8063313ce567116100c2578063313ce567146101b3578063584e8d2a146101ce57806362256589146101ef57806370a0823114610203575f80fd5b806306fdde03146100fd578063095ea7b31461014357806318160ddd1461017257806323b872dd14610194575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b5060408051808201909152600c81526b084eadcdcf240829240888ab60a31b60208201525b60405161013a9190611407565b60405180910390f35b34801561014e575f80fd5b5061016261015d366004611467565b610352565b604051901515815260200161013a565b34801561017d575f80fd5b50610186610368565b60405190815260200161013a565b34801561019f575f80fd5b506101626101ae366004611491565b6103d8565b3480156101be575f80fd5b506040516009815260200161013a565b3480156101d9575f80fd5b506101ed6101e83660046114cf565b61043f565b005b3480156101fa575f80fd5b506101ed61049f565b34801561020e575f80fd5b5061018661021d3660046114e6565b6001600160a01b03165f9081526006602052604090205490565b348015610242575f80fd5b506101ed6104d4565b348015610256575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161013a565b348015610286575f80fd5b506101ed610545565b34801561029a575f80fd5b5060408051808201909152600581526442554e414960d81b602082015261012d565b3480156102c7575f80fd5b50600a54610263906001600160a01b031681565b3480156102e6575f80fd5b506101626102f5366004611467565b61076d565b348015610305575f80fd5b506101ed610779565b348015610319575f80fd5b50610186610328366004611501565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b5f61035e338484610820565b5060015b92915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460015491926103d39290916103cd9190610943565b90610943565b905090565b5f6103e4848484610955565b6104358433610430856040518060600160405280602881526020016116a9602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190610a4f565b610820565b5060019392505050565b5f546001600160a01b031633146104715760405162461bcd60e51b815260040161046890611538565b60405180910390fd5b600c819055600e819055600f819055600a81118015906104945750600a600f5411155b61049c575f80fd5b50565b5f546001600160a01b031633146104c85760405162461bcd60e51b815260040161046890611538565b5f196002819055600355565b5f546001600160a01b031633146104fd5760405162461bcd60e51b815260040161046890611538565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461056e5760405162461bcd60e51b815260040161046890611538565b600a54600160a01b900460ff16156105ba5760405162461bcd60e51b815260206004820152600f60248201526e151c98591a5b99c8185b1b1bddd959608a1b6044820152606401610468565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610633919061156d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a2919061156d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156106ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610710919061156d565b600980546001600160a01b038086166001600160a01b031992831617909255600a8054928416929091169190911790559050610769610763306001600160a01b03165f9081526006602052604090205490565b47610a7a565b5050565b5f61035e338484610955565b5f546001600160a01b031633146107a25760405162461bcd60e51b815260040161046890611538565b600a54600160a01b900460ff16156107fc5760405162461bcd60e51b815260206004820152601860248201527f5472616465696e6720616c726561647920616c6c6f77656400000000000000006044820152606401610468565b601e600c819055600e819055600f55600a805460ff60a01b1916600160a01b179055565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610468565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610468565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61094e828461159c565b9392505050565b610960838383610b31565b61096a8383610c5d565b610975838383610cfb565b610980838383610de4565b61098b838383610e6e565b5f80610998858585610eab565b6001600160a01b0387165f9081526006602052604090205491935091506109bf9083610943565b6001600160a01b038087165f9081526006602052604080822093909355908616815220546109ed9082610fde565b6001600160a01b038086165f8181526006602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a409085815260200190565b60405180910390a35050505050565b5f8184841115610a725760405162461bcd60e51b81526004016104689190611407565b505050900390565b600954610a929030906001600160a01b031684610820565b60095460125460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0362010000909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015610b05573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b2a91906115af565b5050505050565b6001600160a01b038316610b955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610468565b6001600160a01b038216610bf75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610468565b5f8111610c585760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610468565b505050565b6001600160a01b0382165f9081526008602052604090205460ff16158015610c9d57506001600160a01b0381165f9081526008602052604090205460ff16155b1561076957600a54600160a01b900460ff166107695760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610468565b6001600160a01b0383165f9081526008602052604090205460ff16158015610d3b57506001600160a01b0382165f9081526008602052604090205460ff16155b8015610d555750600a546001600160a01b03838116911614155b8015610d6c57506001600160a01b03821661dead14155b15610c58576003546001600160a01b0383165f90815260066020526040902054610d969083610fde565b1115610c585760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610468565b60025481111580610e0c57506001600160a01b0383165f9081526008602052604090205460ff165b80610e2e57506001600160a01b0382165f9081526008602052604090205460ff165b610c585760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610468565b610e79838383610fe9565b15610c5857305f90815260066020526040902054600454811115610e9c57506004545b610ea58161108e565b50505050565b5f808280826001600160a01b0388163014801590610ed257506001600160a01b0387163014155b15610fd157610ee18888611213565b15610f9e575f610ef18989611257565b1115610f9957610f18610f048989611257565b601154610f129089906112a1565b906112ac565b305f90815260066020526040902054909150610f349082610fde565b305f81815260066020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f849085815260200190565b60405180910390a3610f968682610943565b91505b610fd1565b600a546001600160a01b038881169116148015610fc857505f546001600160a01b03898116911614155b15610fd1578092505b5090969095509350505050565b5f61094e82846115da565b600554305f908152600660205260408120546012549192808510159291101590610100900460ff16158015611020575060125460ff165b80156110355750600a54600160a01b900460ff165b801561103e5750815b801561106257506001600160a01b0386165f9081526008602052604090205460ff16155b801561107b5750600a546001600160a01b038681169116145b80156110845750805b9695505050505050565b6012805461ff001916610100179055600d54600c54600b545f926110c792600292610f1292916110c19182906001610fde565b90610fde565b90505f6110e9826110e3600b54866112ac90919063ffffffff16565b906112a1565b90505f6110f68483610943565b905047611102826112b7565b5f61110d4783610943565b90505f61112f611128600b548861094390919063ffffffff16565b83906112a1565b90505f611147600b54836112ac90919063ffffffff16565b90508015611159576111598682610a7a565b600c545f9061116d90610f128560026112ac565b905080156111b5576040517376f44132234823ad716a8e95c737ba2b0f78e3bd9082156108fc029083905f818181858888f193505050501580156111b3573d5f803e3d5ffd5b505b4780156111fc576040517376f44132234823ad716a8e95c737ba2b0f78e3bd9082156108fc029083905f818181858888f193505050501580156111fa573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001600160a01b0382165f9081526008602052604081205460ff1615801561094e5750506001600160a01b03165f9081526008602052604090205460ff1615919050565b600a545f906001600160a01b03908116908316036112785750600f54610362565b600a546001600160a01b03908116908416036112975750600e54610362565b5060105492915050565b5f61094e82846115ed565b5f61094e828461160c565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112ea576112ea611623565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611341573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611365919061156d565b8160018151811061137857611378611623565b6001600160a01b03928316602091820292909201015260095461139e9130911684610820565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906113d69085905f90869030904290600401611637565b5f604051808303815f87803b1580156113ed575f80fd5b505af11580156113ff573d5f803e3d5ffd5b505050505050565b5f602080835283518060208501525f5b8181101561143357858101830151858201604001528201611417565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461049c575f80fd5b5f8060408385031215611478575f80fd5b823561148381611453565b946020939093013593505050565b5f805f606084860312156114a3575f80fd5b83356114ae81611453565b925060208401356114be81611453565b929592945050506040919091013590565b5f602082840312156114df575f80fd5b5035919050565b5f602082840312156114f6575f80fd5b813561094e81611453565b5f8060408385031215611512575f80fd5b823561151d81611453565b9150602083013561152d81611453565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561157d575f80fd5b815161094e81611453565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561036257610362611588565b5f805f606084860312156115c1575f80fd5b8351925060208401519150604084015190509250925092565b8082018082111561036257610362611588565b5f8261160757634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761036257610362611588565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156116875784516001600160a01b031683529383019391830191600101611662565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a7a57fccfb95166aed87bd02354171ca41c6a5f0dcb66dd691502f290ffd33b864736f6c63430008160033

Deployed Bytecode

0x6080604052600436106100f2575f3560e01c8063715018a611610087578063a8aa1b3111610057578063a8aa1b31146102bc578063a9059cbb146102db578063d714a1c3146102fa578063dd62ed3e1461030e575f80fd5b8063715018a6146102375780638da5cb5b1461024b5780639418ad261461027b57806395d89b411461028f575f80fd5b8063313ce567116100c2578063313ce567146101b3578063584e8d2a146101ce57806362256589146101ef57806370a0823114610203575f80fd5b806306fdde03146100fd578063095ea7b31461014357806318160ddd1461017257806323b872dd14610194575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b5060408051808201909152600c81526b084eadcdcf240829240888ab60a31b60208201525b60405161013a9190611407565b60405180910390f35b34801561014e575f80fd5b5061016261015d366004611467565b610352565b604051901515815260200161013a565b34801561017d575f80fd5b50610186610368565b60405190815260200161013a565b34801561019f575f80fd5b506101626101ae366004611491565b6103d8565b3480156101be575f80fd5b506040516009815260200161013a565b3480156101d9575f80fd5b506101ed6101e83660046114cf565b61043f565b005b3480156101fa575f80fd5b506101ed61049f565b34801561020e575f80fd5b5061018661021d3660046114e6565b6001600160a01b03165f9081526006602052604090205490565b348015610242575f80fd5b506101ed6104d4565b348015610256575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161013a565b348015610286575f80fd5b506101ed610545565b34801561029a575f80fd5b5060408051808201909152600581526442554e414960d81b602082015261012d565b3480156102c7575f80fd5b50600a54610263906001600160a01b031681565b3480156102e6575f80fd5b506101626102f5366004611467565b61076d565b348015610305575f80fd5b506101ed610779565b348015610319575f80fd5b50610186610328366004611501565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b5f61035e338484610820565b5060015b92915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460015491926103d39290916103cd9190610943565b90610943565b905090565b5f6103e4848484610955565b6104358433610430856040518060600160405280602881526020016116a9602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190610a4f565b610820565b5060019392505050565b5f546001600160a01b031633146104715760405162461bcd60e51b815260040161046890611538565b60405180910390fd5b600c819055600e819055600f819055600a81118015906104945750600a600f5411155b61049c575f80fd5b50565b5f546001600160a01b031633146104c85760405162461bcd60e51b815260040161046890611538565b5f196002819055600355565b5f546001600160a01b031633146104fd5760405162461bcd60e51b815260040161046890611538565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461056e5760405162461bcd60e51b815260040161046890611538565b600a54600160a01b900460ff16156105ba5760405162461bcd60e51b815260206004820152600f60248201526e151c98591a5b99c8185b1b1bddd959608a1b6044820152606401610468565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610633919061156d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a2919061156d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156106ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610710919061156d565b600980546001600160a01b038086166001600160a01b031992831617909255600a8054928416929091169190911790559050610769610763306001600160a01b03165f9081526006602052604090205490565b47610a7a565b5050565b5f61035e338484610955565b5f546001600160a01b031633146107a25760405162461bcd60e51b815260040161046890611538565b600a54600160a01b900460ff16156107fc5760405162461bcd60e51b815260206004820152601860248201527f5472616465696e6720616c726561647920616c6c6f77656400000000000000006044820152606401610468565b601e600c819055600e819055600f55600a805460ff60a01b1916600160a01b179055565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610468565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610468565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61094e828461159c565b9392505050565b610960838383610b31565b61096a8383610c5d565b610975838383610cfb565b610980838383610de4565b61098b838383610e6e565b5f80610998858585610eab565b6001600160a01b0387165f9081526006602052604090205491935091506109bf9083610943565b6001600160a01b038087165f9081526006602052604080822093909355908616815220546109ed9082610fde565b6001600160a01b038086165f8181526006602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a409085815260200190565b60405180910390a35050505050565b5f8184841115610a725760405162461bcd60e51b81526004016104689190611407565b505050900390565b600954610a929030906001600160a01b031684610820565b60095460125460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0362010000909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015610b05573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b2a91906115af565b5050505050565b6001600160a01b038316610b955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610468565b6001600160a01b038216610bf75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610468565b5f8111610c585760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610468565b505050565b6001600160a01b0382165f9081526008602052604090205460ff16158015610c9d57506001600160a01b0381165f9081526008602052604090205460ff16155b1561076957600a54600160a01b900460ff166107695760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610468565b6001600160a01b0383165f9081526008602052604090205460ff16158015610d3b57506001600160a01b0382165f9081526008602052604090205460ff16155b8015610d555750600a546001600160a01b03838116911614155b8015610d6c57506001600160a01b03821661dead14155b15610c58576003546001600160a01b0383165f90815260066020526040902054610d969083610fde565b1115610c585760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610468565b60025481111580610e0c57506001600160a01b0383165f9081526008602052604090205460ff165b80610e2e57506001600160a01b0382165f9081526008602052604090205460ff165b610c585760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610468565b610e79838383610fe9565b15610c5857305f90815260066020526040902054600454811115610e9c57506004545b610ea58161108e565b50505050565b5f808280826001600160a01b0388163014801590610ed257506001600160a01b0387163014155b15610fd157610ee18888611213565b15610f9e575f610ef18989611257565b1115610f9957610f18610f048989611257565b601154610f129089906112a1565b906112ac565b305f90815260066020526040902054909150610f349082610fde565b305f81815260066020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f849085815260200190565b60405180910390a3610f968682610943565b91505b610fd1565b600a546001600160a01b038881169116148015610fc857505f546001600160a01b03898116911614155b15610fd1578092505b5090969095509350505050565b5f61094e82846115da565b600554305f908152600660205260408120546012549192808510159291101590610100900460ff16158015611020575060125460ff165b80156110355750600a54600160a01b900460ff165b801561103e5750815b801561106257506001600160a01b0386165f9081526008602052604090205460ff16155b801561107b5750600a546001600160a01b038681169116145b80156110845750805b9695505050505050565b6012805461ff001916610100179055600d54600c54600b545f926110c792600292610f1292916110c19182906001610fde565b90610fde565b90505f6110e9826110e3600b54866112ac90919063ffffffff16565b906112a1565b90505f6110f68483610943565b905047611102826112b7565b5f61110d4783610943565b90505f61112f611128600b548861094390919063ffffffff16565b83906112a1565b90505f611147600b54836112ac90919063ffffffff16565b90508015611159576111598682610a7a565b600c545f9061116d90610f128560026112ac565b905080156111b5576040517376f44132234823ad716a8e95c737ba2b0f78e3bd9082156108fc029083905f818181858888f193505050501580156111b3573d5f803e3d5ffd5b505b4780156111fc576040517376f44132234823ad716a8e95c737ba2b0f78e3bd9082156108fc029083905f818181858888f193505050501580156111fa573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001600160a01b0382165f9081526008602052604081205460ff1615801561094e5750506001600160a01b03165f9081526008602052604090205460ff1615919050565b600a545f906001600160a01b03908116908316036112785750600f54610362565b600a546001600160a01b03908116908416036112975750600e54610362565b5060105492915050565b5f61094e82846115ed565b5f61094e828461160c565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112ea576112ea611623565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611341573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611365919061156d565b8160018151811061137857611378611623565b6001600160a01b03928316602091820292909201015260095461139e9130911684610820565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906113d69085905f90869030904290600401611637565b5f604051808303815f87803b1580156113ed575f80fd5b505af11580156113ff573d5f803e3d5ffd5b505050505050565b5f602080835283518060208501525f5b8181101561143357858101830151858201604001528201611417565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461049c575f80fd5b5f8060408385031215611478575f80fd5b823561148381611453565b946020939093013593505050565b5f805f606084860312156114a3575f80fd5b83356114ae81611453565b925060208401356114be81611453565b929592945050506040919091013590565b5f602082840312156114df575f80fd5b5035919050565b5f602082840312156114f6575f80fd5b813561094e81611453565b5f8060408385031215611512575f80fd5b823561151d81611453565b9150602083013561152d81611453565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561157d575f80fd5b815161094e81611453565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561036257610362611588565b5f805f606084860312156115c1575f80fd5b8351925060208401519150604084015190509250925092565b8082018082111561036257610362611588565b5f8261160757634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761036257610362611588565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156116875784516001600160a01b031683529383019391830191600101611662565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a7a57fccfb95166aed87bd02354171ca41c6a5f0dcb66dd691502f290ffd33b864736f6c63430008160033

Deployed Bytecode Sourcemap

6203:11605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8065:83;;;;;;;;;;-1:-1:-1;8135:5:0;;;;;;;;;;;;-1:-1:-1;;;8135:5:0;;;;8065:83;;;;;;;:::i;:::-;;;;;;;;8866:191;;;;;;;;;;-1:-1:-1;8866:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;8866:191:0;1023:187:1;9065:148:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;9065:148:0;1215:177:1;16986:442:0;;;;;;;;;;-1:-1:-1;16986:442:0;;;;;:::i;:::-;;:::i;8251:83::-;;;;;;;;;;-1:-1:-1;8251:83:0;;6413:1;2000:36:1;;1988:2;1973:18;8251:83:0;1858:184:1;11201:216:0;;;;;;;;;;-1:-1:-1;11201:216:0;;;;;:::i;:::-;;:::i;:::-;;10364:136;;;;;;;;;;;;;:::i;8342:119::-;;;;;;;;;;-1:-1:-1;8342:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;8435:18:0;8408:7;8435:18;;;:9;:18;;;;;;;8342:119;4479:148;;;;;;;;;;;;;:::i;4265:79::-;;;;;;;;;;-1:-1:-1;4303:7:0;4330:6;-1:-1:-1;;;;;4330:6:0;4265:79;;;-1:-1:-1;;;;;2648:32:1;;;2630:51;;2618:2;2603:18;4265:79:0;2484:203:1;10508:449:0;;;;;;;;;;;;;:::i;8156:87::-;;;;;;;;;;-1:-1:-1;8228:7:0;;;;;;;;;;;;-1:-1:-1;;;8228:7:0;;;;8156:87;;6943:19;;;;;;;;;;-1:-1:-1;6943:19:0;;;;-1:-1:-1;;;;;6943:19:0;;;8469:197;;;;;;;;;;-1:-1:-1;8469:197:0;;;;;:::i;:::-;;:::i;10965:228::-;;;;;;;;;;;;;:::i;8674:184::-;;;;;;;;;;-1:-1:-1;8674:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;8823:18:0;;;8791:7;8823:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8674:184;8866:191;8968:4;8990:37;8999:10;9011:7;9020:6;8990:8;:37::i;:::-;-1:-1:-1;9045:4:0;8866:191;;;;;:::o;9065:148::-;8435:9;:18;;;;7503:42;9118:7;8435:18;;;;;9145:12;;9118:7;;9145:60;;8435:18;;9145:33;;:12;:16;:33::i;:::-;:37;;:60::i;:::-;9138:67;;9065:148;:::o;16986:442::-;17118:4;17135:36;17145:6;17153:9;17164:6;17135:9;:36::i;:::-;17182:216;17205:6;17226:10;17251:136;17305:6;17251:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17251:19:0;;;;;;:11;:19;;;;;;;;17271:10;17251:31;;;;;;;;;:136;:35;:136::i;:::-;17182:8;:216::i;:::-;-1:-1:-1;17416:4:0;16986:442;;;;;:::o;11201:216::-;4392:6;;-1:-1:-1;;;;;4392:6:0;340:10;4392:22;4384:67;;;;-1:-1:-1;;;4384:67:0;;;;;;;:::i;:::-;;;;;;;;;11271:19:::1;:30:::0;;;11312:6:::1;:17:::0;;;11340:7:::1;:18:::0;;;11389:2:::1;11379:12:::0;::::1;::::0;::::1;::::0;:29:::1;;;11406:2;11395:7;;:13;;11379:29;11371:38;;;::::0;::::1;;11201:216:::0;:::o;10364:136::-;4392:6;;-1:-1:-1;;;;;4392:6:0;340:10;4392:22;4384:67;;;;-1:-1:-1;;;4384:67:0;;;;;;;:::i;:::-;-1:-1:-1;;10417:10:0::1;:30:::0;;;10458:14:::1;:34:::0;10364:136::o;4479:148::-;4392:6;;-1:-1:-1;;;;;4392:6:0;340:10;4392:22;4384:67;;;;-1:-1:-1;;;4384:67:0;;;;;;;:::i;:::-;4586:1:::1;4570:6:::0;;4549:40:::1;::::0;-1:-1:-1;;;;;4570:6:0;;::::1;::::0;4549:40:::1;::::0;4586:1;;4549:40:::1;4617:1;4600:19:::0;;-1:-1:-1;;;;;;4600:19:0::1;::::0;;4479:148::o;10508:449::-;4392:6;;-1:-1:-1;;;;;4392:6:0;340:10;4392:22;4384:67;;;;-1:-1:-1;;;4384:67:0;;;;;;;:::i;:::-;10575:15:::1;::::0;-1:-1:-1;;;10575:15:0;::::1;;;10574:16;10566:44;;;::::0;-1:-1:-1;;;10566:44:0;;3648:2:1;10566:44:0::1;::::0;::::1;3630:21:1::0;3687:2;3667:18;;;3660:30;-1:-1:-1;;;3706:18:1;;;3699:45;3761:18;;10566:44:0::1;3446:339:1::0;10566:44:0::1;10623:15;10649:42;10623:69;;10703:13;10728:7;-1:-1:-1::0;;;;;10728:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10719:38:0::1;;10780:4;10800:7;-1:-1:-1::0;;;;;10800:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10719:106;::::0;-1:-1:-1;;;;;;10719:106:0::1;::::0;;;;;;-1:-1:-1;;;;;4276:15:1;;;10719:106:0::1;::::0;::::1;4258:34:1::0;4328:15;;4308:18;;;4301:43;4193:18;;10719:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10836:6;:16:::0;;-1:-1:-1;;;;;10836:16:0;;::::1;-1:-1:-1::0;;;;;;10836:16:0;;::::1;;::::0;;;10863:4:::1;:12:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;10703:122;-1:-1:-1;10888:61:0::1;10901:24;10919:4;-1:-1:-1::0;;;;;8435:18:0;8408:7;8435:18;;;:9;:18;;;;;;;8342:119;10901:24:::1;10927:21;10888:12;:61::i;:::-;10555:402;;10508:449::o:0;8469:197::-;8574:4;8596:40;8606:10;8618:9;8629:6;8596:9;:40::i;10965:228::-;4392:6;;-1:-1:-1;;;;;4392:6:0;340:10;4392:22;4384:67;;;;-1:-1:-1;;;4384:67:0;;;;;;;:::i;:::-;11028:15:::1;::::0;-1:-1:-1;;;11028:15:0;::::1;;;11027:16;11019:53;;;::::0;-1:-1:-1;;;11019:53:0;;4557:2:1;11019:53:0::1;::::0;::::1;4539:21:1::0;4596:2;4576:18;;;4569:30;4635:26;4615:18;;;4608:54;4679:18;;11019:53:0::1;4355:348:1::0;11019:53:0::1;11105:2;11083:19;:24:::0;;;11118:6:::1;:11:::0;;;11140:7:::1;:12:::0;11163:15:::1;:22:::0;;-1:-1:-1;;;;11163:22:0::1;-1:-1:-1::0;;;11163:22:0::1;::::0;;10965:228::o;17436:369::-;-1:-1:-1;;;;;17563:19:0;;17555:68;;;;-1:-1:-1;;;17555:68:0;;4910:2:1;17555:68:0;;;4892:21:1;4949:2;4929:18;;;4922:30;4988:34;4968:18;;;4961:62;-1:-1:-1;;;5039:18:1;;;5032:34;5083:19;;17555:68:0;4708:400:1;17555:68:0;-1:-1:-1;;;;;17642:21:0;;17634:68;;;;-1:-1:-1;;;17634:68:0;;5315:2:1;17634:68:0;;;5297:21:1;5354:2;5334:18;;;5327:30;5393:34;5373:18;;;5366:62;-1:-1:-1;;;5444:18:1;;;5437:32;5486:19;;17634:68:0;5113:398:1;17634:68:0;-1:-1:-1;;;;;17713:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17765:32;;1361:25:1;;;17765:32:0;;1334:18:1;17765:32:0;;;;;;;17436:369;;;:::o;495:98::-;553:7;580:5;584:1;580;:5;:::i;:::-;573:12;495:98;-1:-1:-1;;;495:98:0:o;9640:716::-;9763:37;9774:6;9782:9;9793:6;9763:10;:37::i;:::-;9811:36;9829:6;9837:9;9811:17;:36::i;:::-;9858:41;9873:6;9881:9;9892:6;9858:14;:41::i;:::-;9910:39;9923:6;9931:9;9942:6;9910:12;:39::i;:::-;9960:42;9976:6;9984:9;9995:6;9960:15;:42::i;:::-;10014:18;10034:22;10060:91;10089:6;10110:9;10134:6;10060:14;:91::i;:::-;-1:-1:-1;;;;;10182:17:0;;;;;;:9;:17;;;;;;10013:138;;-1:-1:-1;10013:138:0;-1:-1:-1;10182:33:0;;10013:138;10182:21;:33::i;:::-;-1:-1:-1;;;;;10162:17:0;;;;;;;:9;:17;;;;;;:53;;;;10249:20;;;;;;;:40;;10274:14;10249:24;:40::i;:::-;-1:-1:-1;;;;;10226:20:0;;;;;;;:9;:20;;;;;;;:63;;;;10305:43;;;;;;;;;;10333:14;1361:25:1;;1349:2;1334:18;;1215:177;10305:43:0;;;;;;;;9752:604;;9640:716;;;:::o;2195:240::-;2315:7;2376:12;2368:6;;;;2360:29;;;;-1:-1:-1;;;2360:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2411:5:0;;;2195:240::o;13724:346::-;13837:6;;13805:53;;13822:4;;-1:-1:-1;;;;;13837:6:0;13846:11;13805:8;:53::i;:::-;13869:6;;14010:11;;13869:193;;-1:-1:-1;;;13869:193:0;;13932:4;13869:193;;;6122:34:1;6172:18;;;6165:34;;;-1:-1:-1;6215:18:1;;;6208:34;;;6258:18;;;6251:34;-1:-1:-1;;;;;14010:11:0;;;;;;6301:19:1;;;6294:44;14036:15:0;6354:19:1;;;6347:35;13869:6:0;;;:22;;13899:9;;6056:19:1;;13869:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13724:346;;:::o;9221:411::-;-1:-1:-1;;;;;9359:20:0;;9351:70;;;;-1:-1:-1;;;9351:70:0;;6906:2:1;9351:70:0;;;6888:21:1;6945:2;6925:18;;;6918:30;6984:34;6964:18;;;6957:62;-1:-1:-1;;;7035:18:1;;;7028:35;7080:19;;9351:70:0;6704:401:1;9351:70:0;-1:-1:-1;;;;;9440:23:0;;9432:71;;;;-1:-1:-1;;;9432:71:0;;7312:2:1;9432:71:0;;;7294:21:1;7351:2;7331:18;;;7324:30;7390:34;7370:18;;;7363:62;-1:-1:-1;;;7441:18:1;;;7434:33;7484:19;;9432:71:0;7110:399:1;9432:71:0;9553:1;9536:6;:19;9514:110;;;;-1:-1:-1;;;9514:110:0;;7716:2:1;9514:110:0;;;7698:21:1;7755:2;7735:18;;;7728:30;7794:34;7774:18;;;7767:62;-1:-1:-1;;;7845:18:1;;;7838:39;7894:19;;9514:110:0;7514:405:1;9514:110:0;9221:411;;;:::o;11425:260::-;-1:-1:-1;;;;;11540:25:0;;;;;;:17;:25;;;;;;;;11539:26;:59;;;;-1:-1:-1;;;;;;11570:28:0;;;;;;:17;:28;;;;;;;;11569:29;11539:59;11535:143;;;11623:15;;-1:-1:-1;;;11623:15:0;;;;11615:51;;;;-1:-1:-1;;;11615:51:0;;8126:2:1;11615:51:0;;;8108:21:1;8165:2;8145:18;;;8138:30;8204:25;8184:18;;;8177:53;8247:18;;11615:51:0;7924:347:1;11693:500:0;-1:-1:-1;;;;;11846:25:0;;;;;;:17;:25;;;;;;;;11845:26;:72;;;;-1:-1:-1;;;;;;11889:28:0;;;;;;:17;:28;;;;;;;;11888:29;11845:72;:115;;;;-1:-1:-1;11955:4:0;;-1:-1:-1;;;;;11934:26:0;;;11955:4;;11934:26;;11845:115;:158;;;;-1:-1:-1;;;;;;11977:26:0;;7503:42;11977:26;;11845:158;11827:359;;;12094:14;;-1:-1:-1;;;;;12057:20:0;;;;;;:9;:20;;;;;;:32;;12082:6;12057:24;:32::i;:::-;12056:52;;12030:144;;;;-1:-1:-1;;;12030:144:0;;8478:2:1;12030:144:0;;;8460:21:1;8517:2;8497:18;;;8490:30;8556:32;8536:18;;;8529:60;8606:18;;12030:144:0;8276:354:1;12201:322:0;12365:10;;12355:6;:20;;:66;;;-1:-1:-1;;;;;;12396:25:0;;;;;;:17;:25;;;;;;;;12355:66;:115;;;-1:-1:-1;;;;;;12442:28:0;;;;;;:17;:28;;;;;;;;12355:115;12333:182;;;;-1:-1:-1;;;12333:182:0;;8837:2:1;12333:182:0;;;8819:21:1;8876:2;8856:18;;;8849:30;-1:-1:-1;;;8895:18:1;;;8888:47;8952:18;;12333:182:0;8635:341:1;15043:369:0;15177:41;15192:6;15200:9;15211:6;15177:14;:41::i;:::-;15173:232;;;15274:4;15235:18;8435;;;:9;:18;;;;;;15312:12;;15299:25;;15295:56;;;-1:-1:-1;15339:12:0;;15295:56;15366:27;15382:10;15366:15;:27::i;:::-;15220:185;15043:369;;;:::o;15946:1032::-;16073:7;;16120:6;;16073:7;-1:-1:-1;;;;;16204:23:0;;16222:4;16204:23;;;;:53;;-1:-1:-1;;;;;;16231:26:0;;16252:4;16231:26;;16204:53;16200:735;;;16278:33;16293:6;16301:9;16278:14;:33::i;:::-;16274:650;;;16373:1;16336:34;16352:6;16360:9;16336:15;:34::i;:::-;:38;16332:473;;;16411:111;16465:34;16481:6;16489:9;16465:15;:34::i;:::-;16422:11;;16411:23;;:6;;:10;:23::i;:::-;:27;;:111::i;:::-;16590:4;16572:24;;;;:9;:24;;;;;;16399:123;;-1:-1:-1;16572:87:0;;16399:123;16572:28;:87::i;:::-;16563:4;16545:24;;;;:9;:24;;;;;;;:114;;;;16687:42;;-1:-1:-1;;;;;16687:42:0;;;;;;;16719:9;1361:25:1;;1349:2;1334:18;;1215:177;16687:42:0;;;;;;;;16764:21;:6;16775:9;16764:10;:21::i;:::-;16754:31;;16332:473;16274:650;;;16862:4;;-1:-1:-1;;;;;16849:17:0;;;16862:4;;16849:17;:38;;;;-1:-1:-1;4303:7:0;4330:6;-1:-1:-1;;;;;16870:17:0;;;4330:6;;16870:17;;16849:38;16845:63;;;16899:9;16889:19;;16845:63;-1:-1:-1;16953:7:0;;;;-1:-1:-1;15946:1032:0;-1:-1:-1;;;;15946:1032:0:o;389:98::-;447:7;474:5;478:1;474;:5;:::i;14530:505::-;14705:12;;14768:4;14662;8435:18;;;:9;:18;;;;;;14822:11;;14662:4;;14695:22;;;;;-1:-1:-1;;14750:40:0;;14822:11;;;;;14821:12;:41;;;;-1:-1:-1;14850:12:0;;;;14821:41;:73;;;;-1:-1:-1;14879:15:0;;-1:-1:-1;;;14879:15:0;;;;14821:73;:98;;;;;14911:8;14821:98;:141;;;;-1:-1:-1;;;;;;14937:25:0;;;;;;:17;:25;;;;;;;;14936:26;14821:141;:175;;;;-1:-1:-1;14992:4:0;;-1:-1:-1;;;;;14979:17:0;;;14992:4;;14979:17;14821:175;:206;;;;;15013:14;14821:206;14801:226;14530:505;-1:-1:-1;;;;;;14530:505:0:o;12531:1185::-;7394:11;:18;;-1:-1:-1;;7394:18:0;;;;;12697:14:::1;::::0;12672:19:::1;::::0;12641::::1;::::0;7394:18;;12626:104:::1;::::0;12728:1:::1;::::0;12641:71:::1;::::0;12697:14;12641:51:::1;::::0;;;7408:4;12641:23:::1;:26::i;:::-;:30:::0;::::1;:51::i;12626:104::-;12603:127;;12741:32;12776:73;12826:12;12776:31;12787:19;;12776:6;:10;;:31;;;;:::i;:::-;:35:::0;::::1;:73::i;:::-;12741:108:::0;-1:-1:-1;12860:14:0::1;12877:36;:6:::0;12741:108;12877:10:::1;:36::i;:::-;12860:53:::0;-1:-1:-1;12949:21:0::1;12981:24;12860:53:::0;12981:16:::1;:24::i;:::-;13016:20;13039:41;:21;13065:14:::0;13039:25:::1;:41::i;:::-;13016:64;;13091:19;13113:55;13130:37;13147:19;;13130:12;:16;;:37;;;;:::i;:::-;13113:12:::0;;:16:::1;:55::i;:::-;13091:77;;13179:19;13201:36;13217:19;;13201:11;:15;;:36;;;;:::i;:::-;13179:58:::0;-1:-1:-1;13252:24:0;;13248:108:::1;;13293:51;13306:24;13332:11;13293:12;:51::i;:::-;13412:19;::::0;13366:20:::1;::::0;13389:43:::1;::::0;:18:::1;:11:::0;13405:1:::1;13389:15;:18::i;:43::-;13366:66:::0;-1:-1:-1;13447:16:0;;13443:90:::1;;13480:41;::::0;7590:42:::1;::::0;13480:41;::::1;;;::::0;13508:12;;13480:41:::1;::::0;;;13508:12;7590:42;13480:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13443:90;13570:21;13606:29:::0;;13602:107:::1;;13652:45;::::0;7590:42:::1;::::0;13652:45;::::1;;;::::0;13680:16;;13652:45:::1;::::0;;;13680:16;7590:42;13652:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13602:107;-1:-1:-1::0;;7435:11:0;:19;;-1:-1:-1;;7435:19:0;;;-1:-1:-1;;;;;;;;12531:1185:0:o;15733:205::-;-1:-1:-1;;;;;15872:25:0;;15842:4;15872:25;;;:17;:25;;;;;;;;15871:26;:59;;;;-1:-1:-1;;;;;;;15902:28:0;;;;;:17;:28;;;;;;;;15901:29;;15733:205;-1:-1:-1;15733:205:0:o;15420:305::-;15572:4;;15530:7;;-1:-1:-1;;;;;15572:4:0;;;15559:17;;;;15555:64;;-1:-1:-1;15600:7:0;;15593:14;;15555:64;15643:4;;-1:-1:-1;;;;;15643:4:0;;;15633:14;;;;15629:60;;-1:-1:-1;15671:6:0;;15664:13;;15629:60;-1:-1:-1;15706:11:0;;15420:305;;;;:::o;707:98::-;765:7;792:5;796:1;792;:5;:::i;601:98::-;659:7;686:5;690:1;686;:5;:::i;14078:444::-;14168:16;;;14182:1;14168:16;;;;;;;;14144:21;;14168:16;;;;;;;;;;-1:-1:-1;14168:16:0;14144:40;;14213:4;14195;14200:1;14195:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14195:23:0;;;:7;;;;;;;;;;:23;;;;14239:6;;:13;;;-1:-1:-1;;;14239:13:0;;;;:6;;;;;:11;;:13;;;;;14195:7;;14239:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14229:4;14234:1;14229:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14229:23:0;;;:7;;;;;;;;;:23;14295:6;;14263:53;;14280:4;;14295:6;14304:11;14263:8;:53::i;:::-;14327:6;;:187;;-1:-1:-1;;;14327:187:0;;-1:-1:-1;;;;;14327:6:0;;;;:57;;:187;;14399:11;;14327:6;;14441:4;;14468;;14488:15;;14327:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14133:389;14078:444;:::o;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;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703: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;2047:180::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;-1:-1:-1;2198:23:1;;2047:180;-1:-1:-1;2047:180:1:o;2232:247::-;2291:6;2344:2;2332:9;2323:7;2319:23;2315:32;2312:52;;;2360:1;2357;2350:12;2312:52;2399:9;2386:23;2418:31;2443:5;2418:31;:::i;2692:388::-;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:52;;;2837:1;2834;2827:12;2789:52;2876:9;2863:23;2895:31;2920:5;2895:31;:::i;:::-;2945:5;-1:-1:-1;3002:2:1;2987:18;;2974:32;3015:33;2974:32;3015:33;:::i;:::-;3067:7;3057:17;;;2692:388;;;;;:::o;3085:356::-;3287:2;3269:21;;;3306:18;;;3299:30;3365:34;3360:2;3345:18;;3338:62;3432:2;3417:18;;3085:356::o;3790:251::-;3860:6;3913:2;3901:9;3892:7;3888:23;3884:32;3881:52;;;3929:1;3926;3919:12;3881:52;3961:9;3955:16;3980:31;4005:5;3980:31;:::i;5516:127::-;5577:10;5572:3;5568:20;5565:1;5558:31;5608:4;5605:1;5598:15;5632:4;5629:1;5622:15;5648:128;5715:9;;;5736:11;;;5733:37;;;5750:18;;:::i;6393:306::-;6481:6;6489;6497;6550:2;6538:9;6529:7;6525:23;6521:32;6518:52;;;6566:1;6563;6556:12;6518:52;6595:9;6589:16;6579:26;;6645:2;6634:9;6630:18;6624:25;6614:35;;6689:2;6678:9;6674:18;6668:25;6658:35;;6393:306;;;;;:::o;8981:125::-;9046:9;;;9067:10;;;9064:36;;;9080:18;;:::i;9111:217::-;9151:1;9177;9167:132;;9221:10;9216:3;9212:20;9209:1;9202:31;9256:4;9253:1;9246:15;9284:4;9281:1;9274:15;9167:132;-1:-1:-1;9313:9:1;;9111:217::o;9333:168::-;9406:9;;;9437;;9454:15;;;9448:22;;9434:37;9424:71;;9475:18;;:::i;9638:127::-;9699:10;9694:3;9690:20;9687:1;9680:31;9730:4;9727:1;9720:15;9754:4;9751:1;9744:15;9770:980;10032:4;10080:3;10069:9;10065:19;10111:6;10100:9;10093:25;10137:2;10175:6;10170:2;10159:9;10155:18;10148:34;10218:3;10213:2;10202:9;10198:18;10191:31;10242:6;10277;10271:13;10308:6;10300;10293:22;10346:3;10335:9;10331:19;10324:26;;10385:2;10377:6;10373:15;10359:29;;10406:1;10416:195;10430:6;10427:1;10424:13;10416:195;;;10495:13;;-1:-1:-1;;;;;10491:39:1;10479:52;;10586:15;;;;10551:12;;;;10527:1;10445:9;10416:195;;;-1:-1:-1;;;;;;;10667:32:1;;;;10662:2;10647:18;;10640:60;-1:-1:-1;;;10731:3:1;10716:19;10709:35;10628:3;9770:980;-1:-1:-1;;;9770:980:1:o

Swarm Source

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