ETH Price: $2,409.56 (+3.73%)
Gas: 7.67 Gwei

Token

RETNIRP (TNRP)
 

Overview

Max Total Supply

1,000,000,000,000,000 TNRP

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
2,707,855,490,265.887107 TNRP

Value
$0.00
0x8c1ba46484d4c110464fbf8244ac878dc12854d4
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:
RETNIRP

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-30
*/

// SPDX-License-Identifier: Unlicense

/***                   
    Earn LSVR Rewards while holding $RETNIRP. 
    The marketing tax "LSVR LP" will be used to add LSVR LP.

    Telegram: t.me/retnirp
    Website: retnirp.io/
***/

pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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 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 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 getOwner() external view returns (address);

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

abstract contract Auth {
    address internal owner;
    mapping(address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED");
        _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded; // excluded dividend
        uint256 totalRealised;
    }

    IERC20 LSVR = IERC20(0x79A06aCb8bdd138BEEECcE0f1605971f3AC7c09B);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IRouter router;

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed; // to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 10 * (10**18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token);
        _;
    }

    constructor(address _router) {
        router = _router != address(0)
            ? IRouter(_router)
            : IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = LSVR.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(LSVR);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: msg.value
        }(0, path, address(this), block.timestamp);

        uint256 amount = LSVR.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            LSVR.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    /*
        returns the  unpaid earnings
    */
    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract RETNIRP is IERC20, Auth {
    using SafeMath for uint256;

    address LSVR = 0x79A06aCb8bdd138BEEECcE0f1605971f3AC7c09B;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "RETNIRP";
    string constant _symbol = "TNRP";
    uint8 constant _decimals = 6;

    uint256 _totalSupply = 1_000_000_000_000_000 * (10**_decimals);
    uint256 public _maxTxAmount = _totalSupply.div(40); // 2,5%
    uint256 public _maxWallet = _totalSupply.div(40); // 2,5%

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public _isFree;

    uint256 liquidityFee = 100;
    uint256 reflectionFee = 200;
    uint256 marketingFee = 300;
    uint256 totalFee = 1700;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver =
        0x2551Fd55DDb806bDDe08d6Cf2FBEdF164d9BF1a3;
    address public marketingFeeReceiver =
        0x2551Fd55DDb806bDDe08d6Cf2FBEdF164d9BF1a3;

    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

    IRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    bool public autoBuybackEnabled = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 5000; // 0.0025%
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IRouter(_router);
        pair = IFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router);
        distributorAddress = address(distributor);

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;

        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

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

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

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

    function getOwner() external view override returns (address) {
        return owner;
    }

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

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        // Max TX Check
        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        bool isSell = recipient == pair || recipient == routerAddress;
        checkTxLimit(sender, amount);

        // Max wallet check excluding pair and router
        if (!isSell && !_isFree[recipient]) {
            require(
                (_balances[recipient] + amount) < _maxWallet,
                "Max wallet has been triggered"
            );
        }

        // No swapping on buy and tx
        if (isSell) {
            if (shouldSwapBack()) {
                swapBack();
            }
            if (shouldAutoBuyback()) {
                triggerAutoBuyback();
            }
        }

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 amountReceived = shouldTakeFee(sender)
            ? takeFee(sender, recipient, amount)
            : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try
                distributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

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

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        return totalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(
            feeDenominator
        );

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
            ? 0
            : liquidityFee;
        uint256 amountToLiquify = swapThreshold
            .mul(dynamicLiquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(dynamicLiquidityFee)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(
            totalETHFee
        );
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        try distributor.deposit{value: amountETHReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountETHMarketing);

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function shouldAutoBuyback() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            autoBuybackEnabled &&
            autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number && // After N blocks from last buyback
            address(this).balance >= autoBuybackAmount;
    }

    function triggerZeusBuyback(uint256 amount, bool triggerBuybackMultiplier)
        external
        authorized
    {
        buyTokens(amount, DEAD);
        if (triggerBuybackMultiplier) {}
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if (autoBuybackAccumulator > autoBuybackCap) {
            autoBuybackEnabled = false;
        }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, to, block.timestamp);
    }

    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function setAutoBuybackSettings(
        bool _enabled,
        uint256 _cap,
        uint256 _amount,
        uint256 _period
    ) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public authorized {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
    }

    function setMaxWallet(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        authorized
    {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt)
        external
        authorized
    {
        isTxLimitExempt[holder] = exempt;
    }

    function setFree(address holder) public onlyOwner {
        _isFree[holder] = true;
    }

    function unSetFree(address holder) public onlyOwner {
        _isFree[holder] = false;
    }

    function checkFree(address holder) public view returns (bool) {
        return _isFree[holder];
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _feeDenominator
    ) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 4);
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _marketingFeeReceiver
    ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount)
        external
        authorized
    {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator)
        external
        authorized
    {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy)
        public
        view
        returns (uint256)
    {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy)
        public
        view
        returns (bool)
    {
        return getLiquidityBacking(accuracy) > target;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b03199081167379a06acb8bdd138beeecce0f1605971f3ac7c09b1790915560038054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560048054821661dead1790556005805490911690556200006e6006600a62000611565b620000819066038d7ea4c68000620006d0565b600655620000a16028600654620004e160201b620014441790919060201c565b600755620000c16028600654620004e160201b620014441790919060201c565b6008556064600f81905560c860105561012c6011556106a460125561271060135560148054732551fd55ddb806bdde08d6cf2fbedf164d9bf1a36001600160a01b03199182168117909255601580549091169091179055600a601655601755601c805460ff199081169091556207a120602455602580549091166001179055600654620001529061138890620005a5565b6026553480156200016257600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560188054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b815292519192839263c45a015592600480840193919291829003018186803b158015620001e857600080fd5b505afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000223919062000573565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200027057600080fd5b505af115801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000573565b601980546001600160a01b0319166001600160a01b03928316179055600654306000908152600a6020908152604080832060188054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c4648926004808201939291829003018186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000360919062000573565b600380546001600160a01b0319166001600160a01b03929092169190911790556040518190620003909062000565565b6001600160a01b039091168152602001604051809103906000f080158015620003bd573d6000803e3d6000fd5b50602280546001600160a01b039283166001600160a01b03199182168117909255602380548216909217909155336000818152600b60209081526040808320805460ff199081166001908117909255600c8452828520805482168317905560195488168552600d909352818420805484168217905530845281842080548416821790556004549096168352909120805490911690931790925560148054909116909117905560065462000472908290620004f8565b506019546006546200048e916001600160a01b031690620004f8565b5060065433600081815260096020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000708565b6000620004ef8284620005a5565b90505b92915050565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005549086815260200190565b60405180910390a350600192915050565b610e588062002b3183390190565b6000602082840312156200058657600080fd5b81516001600160a01b03811681146200059e57600080fd5b9392505050565b600082620005c357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000609578160001904821115620005ed57620005ed620006f2565b80851615620005fb57918102915b93841c9390800290620005cd565b509250929050565b6000620004ef60ff8416836000826200062d57506001620004f2565b816200063c57506000620004f2565b8160018114620006555760028114620006605762000680565b6001915050620004f2565b60ff841115620006745762000674620006f2565b50506001821b620004f2565b5060208310610133831016604e8410600b8410161715620006a5575081810a620004f2565b620006b18383620005c8565b8060001904821115620006c857620006c8620006f2565b029392505050565b6000816000190483118215151615620006ed57620006ed620006f2565b500290565b634e487b7160e01b600052601160045260246000fd5b61241980620007186000396000f3fe6080604052600436106103545760003560e01c80637d1db4a5116101c6578063c6d2577d116100f7578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610a55578063f84ba65d14610a75578063f887ea4014610a95578063fe9fbb8014610ab557600080fd5b8063f1f3bca3146109f3578063f2fde38b14610a15578063f5cfec0a14610a3557600080fd5b8063dd62ed3e116100d1578063dd62ed3e1461094d578063df20fd4914610993578063e96fada2146109b3578063f0b37c04146109d357600080fd5b8063c6d2577d146108f7578063ca33e64c1461090d578063d51ed1c81461092d57600080fd5b8063a4b45c0011610164578063a9059cbb1161013e578063a9059cbb14610881578063ad5c4648146108a1578063b6a5d7de146108c1578063bf56b371146108e157600080fd5b8063a4b45c0014610821578063a51af4c514610841578063a8aa1b311461086157600080fd5b806389ef69f6116101a057806389ef69f6146107845780638b42507f146107a457806395d89b41146107d45780639d1944f51461080157600080fd5b80637d1db4a51461072657806382247ec01461073c578063893d20e81461075257600080fd5b80632f54bf6e116102a05780635c85974f1161023e5780636ddd1713116102185780636ddd1713146106a15780636fcba377146106bb5780637088fb7f146106db57806370a08231146106f057600080fd5b80635c85974f146106415780635d0044ca14610661578063658d4b7f1461068157600080fd5b80633bb8a8d41161027a5780633bb8a8d4146105a75780633f4218e0146105c15780634355855a146105f1578063571ac8b01461062157600080fd5b80632f54bf6e1461053c578063313ce5671461056b5780633425c0011461058757600080fd5b80631161ae391161030d57806323b872dd116102e757806323b872dd146104b7578063296020e7146104d75780632b112e49146105075780632d48e8961461051c57600080fd5b80631161ae391461046257806318160ddd14610482578063201e79911461049757600080fd5b806301339c21146103605780630445b66714610377578063048c7baf146103a057806306fdde03146103c057806307c89fe8146103f9578063095ea7b31461044257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610ad5565b005b34801561038357600080fd5b5061038d60265481565b6040519081526020015b60405180910390f35b3480156103ac57600080fd5b506103756103bb3660046120e9565b610b54565b3480156103cc57600080fd5b5060408051808201909152600781526605245544e4952560cc1b60208201525b6040516103979190612259565b34801561040557600080fd5b50610432610414366004611fba565b6001600160a01b03166000908152600e602052604090205460ff1690565b6040519015158152602001610397565b34801561044e57600080fd5b5061043261045d366004612086565b610ba2565b34801561046e57600080fd5b5061043261047d36600461215e565b610c0e565b34801561048e57600080fd5b5060065461038d565b3480156104a357600080fd5b506103756104b236600461215e565b610c22565b3480156104c357600080fd5b506104326104d2366004612010565b610c52565b3480156104e357600080fd5b506104326104f2366004611fba565b600e6020526000908152604090205460ff1681565b34801561051357600080fd5b5061038d610d16565b34801561052857600080fd5b5061037561053736600461215e565b610d68565b34801561054857600080fd5b50610432610557366004611fba565b6000546001600160a01b0391821691161490565b34801561057757600080fd5b5060405160068152602001610397565b34801561059357600080fd5b506103756105a2366004611fba565b610df7565b3480156105b357600080fd5b50601c546104329060ff1681565b3480156105cd57600080fd5b506104326105dc366004611fba565b600b6020526000908152604090205460ff1681565b3480156105fd57600080fd5b5061043261060c366004611fba565b600d6020526000908152604090205460ff1681565b34801561062d57600080fd5b5061043261063c366004611fba565b610e42565b34801561064d57600080fd5b5061037561065c366004612122565b610e56565b34801561066d57600080fd5b5061037561067c366004612122565b610e9c565b34801561068d57600080fd5b5061037561069c366004612051565b610ee2565b3480156106ad57600080fd5b506025546104329060ff1681565b3480156106c757600080fd5b506103756106d63660046121ae565b610f32565b3480156106e757600080fd5b50610375610fa0565b3480156106fc57600080fd5b5061038d61070b366004611fba565b6001600160a01b031660009081526009602052604090205490565b34801561073257600080fd5b5061038d60075481565b34801561074857600080fd5b5061038d60085481565b34801561075e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610397565b34801561079057600080fd5b5061037561079f366004611fba565b610ffd565b3480156107b057600080fd5b506104326107bf366004611fba565b600c6020526000908152604090205460ff1681565b3480156107e057600080fd5b506040805180820190915260048152630544e52560e41b60208201526103ec565b34801561080d57600080fd5b5061037561081c366004612122565b61104b565b34801561082d57600080fd5b5061037561083c366004611fd7565b611084565b34801561084d57600080fd5b5060235461076c906001600160a01b031681565b34801561086d57600080fd5b5060195461076c906001600160a01b031681565b34801561088d57600080fd5b5061043261089c366004612086565b6110d7565b3480156108ad57600080fd5b5060035461076c906001600160a01b031681565b3480156108cd57600080fd5b506103756108dc366004611fba565b6110e4565b3480156108ed57600080fd5b5061038d601a5481565b34801561090357600080fd5b5061038d601b5481565b34801561091957600080fd5b5060145461076c906001600160a01b031681565b34801561093957600080fd5b5061038d610948366004612122565b611135565b34801561095957600080fd5b5061038d610968366004611fd7565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561099f57600080fd5b506103756109ae3660046120cd565b611179565b3480156109bf57600080fd5b5060155461076c906001600160a01b031681565b3480156109df57600080fd5b506103756109ee366004611fba565b6111b5565b3480156109ff57600080fd5b5061038d610a0e3660046120b2565b5060125490565b348015610a2157600080fd5b50610375610a30366004611fba565b611200565b348015610a4157600080fd5b50610375610a5036600461213b565b611296565b348015610a6157600080fd5b50610375610a70366004612051565b6112d2565b348015610a8157600080fd5b50610375610a90366004612051565b6113d6565b348015610aa157600080fd5b5060185461076c906001600160a01b031681565b348015610ac157600080fd5b50610432610ad0366004611fba565b611426565b610ade33611426565b610b035760405162461bcd60e51b8152600401610afa906122ce565b60405180910390fd5b601a5415610b4a5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610afa565b43601a5542601b55565b610b5d33611426565b610b795760405162461bcd60e51b8152600401610afa906122ce565b601c805460ff191694151594909417909355601d919091556000601e55601f5560205543602155565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bfd9086815260200190565b60405180910390a350600192915050565b600082610c1a83611135565b119392505050565b610c2b33611426565b610c475760405162461bcd60e51b8152600401610afa906122ce565b601691909155601755565b6006546001600160a01b0384166000908152600a60209081526040808320338452909152812054909114610d01576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610cdc918490611450565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610d0c84848461147c565b90505b9392505050565b6005546001600160a01b0316600090815260096020526040812054610d63906004546001600160a01b0316600090815260096020526040902054610d5d9060065490611869565b90611869565b905090565b610d7133611426565b610d8d5760405162461bcd60e51b8152600401610afa906122ce565b6022546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000610e5082600654610ba2565b92915050565b610e5f33611426565b610e7b5760405162461bcd60e51b8152600401610afa906122ce565b6103e8600654610e8b9190612347565b811015610e9757600080fd5b600755565b610ea533611426565b610ec15760405162461bcd60e51b8152600401610afa906122ce565b6103e8600654610ed19190612347565b811015610edd57600080fd5b600855565b610eeb33611426565b610f075760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610f3b33611426565b610f575760405162461bcd60e51b8152600401610afa906122ce565b600f84905560108390556011829055610f7a82610f748686611875565b90611875565b6012556013819055610f8d600482612347565b60125410610f9a57600080fd5b50505050565b6000546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610afa906122ae565b6040514790339082156108fc029083906000818181858888f19350505050158015610ff9573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61105433611426565b6110705760405162461bcd60e51b8152600401610afa906122ce565b620b71b0811061107f57600080fd5b602455565b61108d33611426565b6110a95760405162461bcd60e51b8152600401610afa906122ce565b601480546001600160a01b039384166001600160a01b03199182161790915560158054929093169116179055565b6000610d0f33848461147c565b6000546001600160a01b0316331461110e5760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610e50611142610d16565b6019546001600160a01b03166000908152600960205260409020546111739061116c906002611881565b8590611881565b90611444565b61118233611426565b61119e5760405162461bcd60e51b8152600401610afa906122ce565b6025805460ff191692151592909217909155602655565b6000546001600160a01b031633146111df5760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610afa906122ae565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61129f33611426565b6112bb5760405162461bcd60e51b8152600401610afa906122ce565b600454610ff99083906001600160a01b031661188d565b6112db33611426565b6112f75760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b038216301480159061131e57506019546001600160a01b03838116911614155b61132757600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561138d57602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610dc1565b6022546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610dc1565b6113df33611426565b6113fb5760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610d0f8284612347565b600081848411156114745760405162461bcd60e51b8152600401610afa9190612259565b505050900390565b60275460009060ff161561149c57611495848484611996565b9050610d0f565b601954737a250d5630b4cf539739df2c5dacb4c659f2488d906000906001600160a01b03868116911614806114e25750816001600160a01b0316856001600160a01b0316145b90506114ee8685611a39565b8015801561151557506001600160a01b0385166000908152600e602052604090205460ff16155b1561158e576008546001600160a01b03861660009081526009602052604090205461154190869061232f565b1061158e5760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610afa565b80156115be5761159c611aa2565b156115a9576115a9611af1565b6115b1611e5f565b156115be576115be611eba565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260099091529190912054611610918690611450565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff16156116455784611650565b611650878787611f01565b6001600160a01b0387166000908152600960205260409020549091506116769082611875565b6001600160a01b03808816600090815260096020908152604080832094909455918a168152600d909152205460ff1661171a576022546001600160a01b0388811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561170757600080fd5b505af1925050508015611718575060015b505b6001600160a01b0386166000908152600d602052604090205460ff166117ab576022546001600160a01b0387811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561179857600080fd5b505af19250505080156117a9575060015b505b6022546024546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916117e39160040190815260200190565b600060405180830381600087803b1580156117fd57600080fd5b505af192505050801561180e575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185491815260200190565b60405180910390a35060019695505050505050565b6000610d0f8284612388565b6000610d0f828461232f565b6000610d0f8284612369565b6027805460ff19166001179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906118db576118db6123b5565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061190f5761190f6123b5565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de9590859061195590600090869088904290600401612224565b6000604051808303818588803b15801561196e57600080fd5b505af1158015611982573d6000803e3d6000fd5b50506027805460ff19169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526009909152918220546119e7918490611450565b6001600160a01b038086166000908152600960205260408082209390935590851681522054611a169083611875565b6001600160a01b0384166000908152600960205260409020555060019392505050565b60075481111580611a6257506001600160a01b0382166000908152600c602052604090205460ff165b610ff95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b6019546000906001600160a01b03163314801590611ac3575060275460ff16155b8015611ad1575060255460ff165b8015610d6357505060265430600090815260096020526040902054101590565b6027805460ff19166001179055601654601754600091611b1091610c0e565b611b1c57600f54611b1f565b60005b90506000611b4360026111736012546111738660265461188190919063ffffffff16565b90506000611b5c8260265461186990919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b9657611b966123b5565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611bc757611bc76123b5565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac94790611c119086906000908790309042906004016122f3565b600060405180830381600087803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b505050506000611c58824761186990919063ffffffff16565b90506000611c73611c6a886002611444565b60125490611869565b90506000611c8860026111738481878d611881565b90506000611ca5836111736010548761188190919063ffffffff16565b90506000611cc2846111736011548861188190919063ffffffff16565b9050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1457600080fd5b505af193505050508015611d26575060015b506015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d61573d6000803e3d6000fd5b508815611e495760185460145460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e0c9190612180565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050565b6019546000906001600160a01b03163314801590611e80575060275460ff16155b8015611e8e5750601c5460ff165b8015611ea9575043602054602154611ea6919061232f565b11155b8015610d63575050601f5447101590565b601f54600454611ed391906001600160a01b031661188d565b43602155601f54601e54611ee691611875565b601e819055601d541015611eff57601c805460ff191690555b565b6013546012546000918291611f1c9190611173908690611881565b30600090815260096020526040902054909150611f399082611875565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f8a9085815260200190565b60405180910390a3611f9c8382611869565b95945050505050565b80358015158114611fb557600080fd5b919050565b600060208284031215611fcc57600080fd5b8135610d0f816123cb565b60008060408385031215611fea57600080fd5b8235611ff5816123cb565b91506020830135612005816123cb565b809150509250929050565b60008060006060848603121561202557600080fd5b8335612030816123cb565b92506020840135612040816123cb565b929592945050506040919091013590565b6000806040838503121561206457600080fd5b823561206f816123cb565b915061207d60208401611fa5565b90509250929050565b6000806040838503121561209957600080fd5b82356120a4816123cb565b946020939093013593505050565b6000602082840312156120c457600080fd5b610d0f82611fa5565b600080604083850312156120e057600080fd5b6120a483611fa5565b600080600080608085870312156120ff57600080fd5b61210885611fa5565b966020860135965060408601359560600135945092505050565b60006020828403121561213457600080fd5b5035919050565b6000806040838503121561214e57600080fd5b8235915061207d60208401611fa5565b6000806040838503121561217157600080fd5b50508035926020909101359150565b60008060006060848603121561219557600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156121c457600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156122195781516001600160a01b0316875295820195908201906001016121f4565b509495945050505050565b84815260806020820152600061223d60808301866121e0565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156122865785810183015185820160400152820161226a565b81811115612298576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a06040820152600061231260a08301866121e0565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156123425761234261239f565b500190565b60008261236457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123835761238361239f565b500290565b60008282101561239a5761239a61239f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146123e057600080fd5b5056fea2646970667358221220699f1577e680deebc97a42f0eec482ff2bf3dd22545d4dc3e673c9ba82a399f364736f6c634300080700336080604052600180546001600160a01b03199081167379a06acb8bdd138beeecce0f1605971f3ac7c09b179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55678ac7230489e80000600e5534801561007d57600080fd5b50604051610e58380380610e5883398101604081905261009c916100f6565b6001600160a01b0381166100c457737a250d5630b4cf539739df2c5dacb4c659f2488d6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610126565b60006020828403121561010857600080fd5b81516001600160a01b038116811461011f57600080fd5b9392505050565b610d23806101356000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610b16565b610285565b005b34801561013957600080fd5b506100f8610148366004610afb565b6103fd565b34801561015957600080fd5b5061012b610168366004610b94565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610afb565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106f5565b34801561025b57600080fd5b5061012b61026a366004610b62565b610700565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c382610800565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b15610382576103828261092b565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a40565b90610a53565b6008556001600160a01b03821660009081526007602052604090208190556103da81610a5f565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610a5f565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610a40565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610b7b565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061058157610581610cd7565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105b1576105b1610cd7565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105f790600090869030904290600401610bb6565b6000604051808303818588803b15801561061057600080fd5b505af1158015610624573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106b393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561067557600080fd5b505afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad9190610b7b565b90610a40565b6009549091506106c39082610a53565b600955600854600c546106ed916106e4916106de9085610a82565b90610a8e565b600b5490610a53565b600b55505050565b6106fe33610800565b565b6000546001600160a01b0316331461071757600080fd5b60045480610723575050565b6000805a905060005b848310801561073a57508381105b156107f95783600f541061074e576000600f555b6107806004600f548154811061076657610766610cd7565b6000918252602090912001546001600160a01b0316610a9a565b156107b7576107b76004600f548154811061079d5761079d610cd7565b6000918252602090912001546001600160a01b0316610800565b6107cc6107c55a8490610a40565b8490610a53565b92505a600f805491935060006107e183610c90565b919050555080806107f190610c90565b91505061072c565b5050505050565b6001600160a01b0381166000908152600760205260409020546108205750565b600061082b826103fd565b9050801561092757600a546108409082610a53565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561089157600080fd5b505af11580156108a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c99190610b40565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108fd9082610a53565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610a5f565b5050565b6004805461093b90600190610c79565b8154811061094b5761094b610cd7565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061098957610989610cd7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109d590600190610c79565b815481106109e5576109e5610cd7565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a1b57610a1b610cc1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a4c8284610c79565b9392505050565b6000610a4c8284610c20565b6000610a7c600c546106de600b5485610a8290919063ffffffff16565b92915050565b6000610a4c8284610c5a565b6000610a4c8284610c38565b600d546001600160a01b03821660009081526006602052604081205490914291610ac49190610c20565b108015610a7c5750600e54610ad8836103fd565b1192915050565b80356001600160a01b0381168114610af657600080fd5b919050565b600060208284031215610b0d57600080fd5b610a4c82610adf565b60008060408385031215610b2957600080fd5b610b3283610adf565b946020939093013593505050565b600060208284031215610b5257600080fd5b81518015158114610a4c57600080fd5b600060208284031215610b7457600080fd5b5035919050565b600060208284031215610b8d57600080fd5b5051919050565b60008060408385031215610ba757600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610c005784516001600160a01b031683529383019391830191600101610bdb565b50506001600160a01b039690961660408501525050506060015292915050565b60008219821115610c3357610c33610cab565b500190565b600082610c5557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610c7457610c74610cab565b500290565b600082821015610c8b57610c8b610cab565b500390565b6000600019821415610ca457610ca4610cab565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f61ccd2448c4ac8154e94044d9ba3e93b04c08938f9ba9278f8f42d6184b1cf064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80637d1db4a5116101c6578063c6d2577d116100f7578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610a55578063f84ba65d14610a75578063f887ea4014610a95578063fe9fbb8014610ab557600080fd5b8063f1f3bca3146109f3578063f2fde38b14610a15578063f5cfec0a14610a3557600080fd5b8063dd62ed3e116100d1578063dd62ed3e1461094d578063df20fd4914610993578063e96fada2146109b3578063f0b37c04146109d357600080fd5b8063c6d2577d146108f7578063ca33e64c1461090d578063d51ed1c81461092d57600080fd5b8063a4b45c0011610164578063a9059cbb1161013e578063a9059cbb14610881578063ad5c4648146108a1578063b6a5d7de146108c1578063bf56b371146108e157600080fd5b8063a4b45c0014610821578063a51af4c514610841578063a8aa1b311461086157600080fd5b806389ef69f6116101a057806389ef69f6146107845780638b42507f146107a457806395d89b41146107d45780639d1944f51461080157600080fd5b80637d1db4a51461072657806382247ec01461073c578063893d20e81461075257600080fd5b80632f54bf6e116102a05780635c85974f1161023e5780636ddd1713116102185780636ddd1713146106a15780636fcba377146106bb5780637088fb7f146106db57806370a08231146106f057600080fd5b80635c85974f146106415780635d0044ca14610661578063658d4b7f1461068157600080fd5b80633bb8a8d41161027a5780633bb8a8d4146105a75780633f4218e0146105c15780634355855a146105f1578063571ac8b01461062157600080fd5b80632f54bf6e1461053c578063313ce5671461056b5780633425c0011461058757600080fd5b80631161ae391161030d57806323b872dd116102e757806323b872dd146104b7578063296020e7146104d75780632b112e49146105075780632d48e8961461051c57600080fd5b80631161ae391461046257806318160ddd14610482578063201e79911461049757600080fd5b806301339c21146103605780630445b66714610377578063048c7baf146103a057806306fdde03146103c057806307c89fe8146103f9578063095ea7b31461044257600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610ad5565b005b34801561038357600080fd5b5061038d60265481565b6040519081526020015b60405180910390f35b3480156103ac57600080fd5b506103756103bb3660046120e9565b610b54565b3480156103cc57600080fd5b5060408051808201909152600781526605245544e4952560cc1b60208201525b6040516103979190612259565b34801561040557600080fd5b50610432610414366004611fba565b6001600160a01b03166000908152600e602052604090205460ff1690565b6040519015158152602001610397565b34801561044e57600080fd5b5061043261045d366004612086565b610ba2565b34801561046e57600080fd5b5061043261047d36600461215e565b610c0e565b34801561048e57600080fd5b5060065461038d565b3480156104a357600080fd5b506103756104b236600461215e565b610c22565b3480156104c357600080fd5b506104326104d2366004612010565b610c52565b3480156104e357600080fd5b506104326104f2366004611fba565b600e6020526000908152604090205460ff1681565b34801561051357600080fd5b5061038d610d16565b34801561052857600080fd5b5061037561053736600461215e565b610d68565b34801561054857600080fd5b50610432610557366004611fba565b6000546001600160a01b0391821691161490565b34801561057757600080fd5b5060405160068152602001610397565b34801561059357600080fd5b506103756105a2366004611fba565b610df7565b3480156105b357600080fd5b50601c546104329060ff1681565b3480156105cd57600080fd5b506104326105dc366004611fba565b600b6020526000908152604090205460ff1681565b3480156105fd57600080fd5b5061043261060c366004611fba565b600d6020526000908152604090205460ff1681565b34801561062d57600080fd5b5061043261063c366004611fba565b610e42565b34801561064d57600080fd5b5061037561065c366004612122565b610e56565b34801561066d57600080fd5b5061037561067c366004612122565b610e9c565b34801561068d57600080fd5b5061037561069c366004612051565b610ee2565b3480156106ad57600080fd5b506025546104329060ff1681565b3480156106c757600080fd5b506103756106d63660046121ae565b610f32565b3480156106e757600080fd5b50610375610fa0565b3480156106fc57600080fd5b5061038d61070b366004611fba565b6001600160a01b031660009081526009602052604090205490565b34801561073257600080fd5b5061038d60075481565b34801561074857600080fd5b5061038d60085481565b34801561075e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610397565b34801561079057600080fd5b5061037561079f366004611fba565b610ffd565b3480156107b057600080fd5b506104326107bf366004611fba565b600c6020526000908152604090205460ff1681565b3480156107e057600080fd5b506040805180820190915260048152630544e52560e41b60208201526103ec565b34801561080d57600080fd5b5061037561081c366004612122565b61104b565b34801561082d57600080fd5b5061037561083c366004611fd7565b611084565b34801561084d57600080fd5b5060235461076c906001600160a01b031681565b34801561086d57600080fd5b5060195461076c906001600160a01b031681565b34801561088d57600080fd5b5061043261089c366004612086565b6110d7565b3480156108ad57600080fd5b5060035461076c906001600160a01b031681565b3480156108cd57600080fd5b506103756108dc366004611fba565b6110e4565b3480156108ed57600080fd5b5061038d601a5481565b34801561090357600080fd5b5061038d601b5481565b34801561091957600080fd5b5060145461076c906001600160a01b031681565b34801561093957600080fd5b5061038d610948366004612122565b611135565b34801561095957600080fd5b5061038d610968366004611fd7565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561099f57600080fd5b506103756109ae3660046120cd565b611179565b3480156109bf57600080fd5b5060155461076c906001600160a01b031681565b3480156109df57600080fd5b506103756109ee366004611fba565b6111b5565b3480156109ff57600080fd5b5061038d610a0e3660046120b2565b5060125490565b348015610a2157600080fd5b50610375610a30366004611fba565b611200565b348015610a4157600080fd5b50610375610a5036600461213b565b611296565b348015610a6157600080fd5b50610375610a70366004612051565b6112d2565b348015610a8157600080fd5b50610375610a90366004612051565b6113d6565b348015610aa157600080fd5b5060185461076c906001600160a01b031681565b348015610ac157600080fd5b50610432610ad0366004611fba565b611426565b610ade33611426565b610b035760405162461bcd60e51b8152600401610afa906122ce565b60405180910390fd5b601a5415610b4a5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610afa565b43601a5542601b55565b610b5d33611426565b610b795760405162461bcd60e51b8152600401610afa906122ce565b601c805460ff191694151594909417909355601d919091556000601e55601f5560205543602155565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bfd9086815260200190565b60405180910390a350600192915050565b600082610c1a83611135565b119392505050565b610c2b33611426565b610c475760405162461bcd60e51b8152600401610afa906122ce565b601691909155601755565b6006546001600160a01b0384166000908152600a60209081526040808320338452909152812054909114610d01576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610cdc918490611450565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610d0c84848461147c565b90505b9392505050565b6005546001600160a01b0316600090815260096020526040812054610d63906004546001600160a01b0316600090815260096020526040902054610d5d9060065490611869565b90611869565b905090565b610d7133611426565b610d8d5760405162461bcd60e51b8152600401610afa906122ce565b6022546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e215760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000610e5082600654610ba2565b92915050565b610e5f33611426565b610e7b5760405162461bcd60e51b8152600401610afa906122ce565b6103e8600654610e8b9190612347565b811015610e9757600080fd5b600755565b610ea533611426565b610ec15760405162461bcd60e51b8152600401610afa906122ce565b6103e8600654610ed19190612347565b811015610edd57600080fd5b600855565b610eeb33611426565b610f075760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610f3b33611426565b610f575760405162461bcd60e51b8152600401610afa906122ce565b600f84905560108390556011829055610f7a82610f748686611875565b90611875565b6012556013819055610f8d600482612347565b60125410610f9a57600080fd5b50505050565b6000546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610afa906122ae565b6040514790339082156108fc029083906000818181858888f19350505050158015610ff9573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61105433611426565b6110705760405162461bcd60e51b8152600401610afa906122ce565b620b71b0811061107f57600080fd5b602455565b61108d33611426565b6110a95760405162461bcd60e51b8152600401610afa906122ce565b601480546001600160a01b039384166001600160a01b03199182161790915560158054929093169116179055565b6000610d0f33848461147c565b6000546001600160a01b0316331461110e5760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610e50611142610d16565b6019546001600160a01b03166000908152600960205260409020546111739061116c906002611881565b8590611881565b90611444565b61118233611426565b61119e5760405162461bcd60e51b8152600401610afa906122ce565b6025805460ff191692151592909217909155602655565b6000546001600160a01b031633146111df5760405162461bcd60e51b8152600401610afa906122ae565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610afa906122ae565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61129f33611426565b6112bb5760405162461bcd60e51b8152600401610afa906122ce565b600454610ff99083906001600160a01b031661188d565b6112db33611426565b6112f75760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b038216301480159061131e57506019546001600160a01b03838116911614155b61132757600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561138d57602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610dc1565b6022546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610dc1565b6113df33611426565b6113fb5760405162461bcd60e51b8152600401610afa906122ce565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610d0f8284612347565b600081848411156114745760405162461bcd60e51b8152600401610afa9190612259565b505050900390565b60275460009060ff161561149c57611495848484611996565b9050610d0f565b601954737a250d5630b4cf539739df2c5dacb4c659f2488d906000906001600160a01b03868116911614806114e25750816001600160a01b0316856001600160a01b0316145b90506114ee8685611a39565b8015801561151557506001600160a01b0385166000908152600e602052604090205460ff16155b1561158e576008546001600160a01b03861660009081526009602052604090205461154190869061232f565b1061158e5760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610afa565b80156115be5761159c611aa2565b156115a9576115a9611af1565b6115b1611e5f565b156115be576115be611eba565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260099091529190912054611610918690611450565b6001600160a01b038716600090815260096020908152604080832093909355600b90529081205460ff16156116455784611650565b611650878787611f01565b6001600160a01b0387166000908152600960205260409020549091506116769082611875565b6001600160a01b03808816600090815260096020908152604080832094909455918a168152600d909152205460ff1661171a576022546001600160a01b0388811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561170757600080fd5b505af1925050508015611718575060015b505b6001600160a01b0386166000908152600d602052604090205460ff166117ab576022546001600160a01b0387811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561179857600080fd5b505af19250505080156117a9575060015b505b6022546024546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916117e39160040190815260200190565b600060405180830381600087803b1580156117fd57600080fd5b505af192505050801561180e575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185491815260200190565b60405180910390a35060019695505050505050565b6000610d0f8284612388565b6000610d0f828461232f565b6000610d0f8284612369565b6027805460ff19166001179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906118db576118db6123b5565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061190f5761190f6123b5565b6001600160a01b03928316602091820292909201015260185460405163b6f9de9560e01b815291169063b6f9de9590859061195590600090869088904290600401612224565b6000604051808303818588803b15801561196e57600080fd5b505af1158015611982573d6000803e3d6000fd5b50506027805460ff19169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526009909152918220546119e7918490611450565b6001600160a01b038086166000908152600960205260408082209390935590851681522054611a169083611875565b6001600160a01b0384166000908152600960205260409020555060019392505050565b60075481111580611a6257506001600160a01b0382166000908152600c602052604090205460ff165b610ff95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610afa565b6019546000906001600160a01b03163314801590611ac3575060275460ff16155b8015611ad1575060255460ff165b8015610d6357505060265430600090815260096020526040902054101590565b6027805460ff19166001179055601654601754600091611b1091610c0e565b611b1c57600f54611b1f565b60005b90506000611b4360026111736012546111738660265461188190919063ffffffff16565b90506000611b5c8260265461186990919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b9657611b966123b5565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611bc757611bc76123b5565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b81524792919091169063791ac94790611c119086906000908790309042906004016122f3565b600060405180830381600087803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b505050506000611c58824761186990919063ffffffff16565b90506000611c73611c6a886002611444565b60125490611869565b90506000611c8860026111738481878d611881565b90506000611ca5836111736010548761188190919063ffffffff16565b90506000611cc2846111736011548861188190919063ffffffff16565b9050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1457600080fd5b505af193505050508015611d26575060015b506015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d61573d6000803e3d6000fd5b508815611e495760185460145460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e0c9190612180565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050565b6019546000906001600160a01b03163314801590611e80575060275460ff16155b8015611e8e5750601c5460ff165b8015611ea9575043602054602154611ea6919061232f565b11155b8015610d63575050601f5447101590565b601f54600454611ed391906001600160a01b031661188d565b43602155601f54601e54611ee691611875565b601e819055601d541015611eff57601c805460ff191690555b565b6013546012546000918291611f1c9190611173908690611881565b30600090815260096020526040902054909150611f399082611875565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f8a9085815260200190565b60405180910390a3611f9c8382611869565b95945050505050565b80358015158114611fb557600080fd5b919050565b600060208284031215611fcc57600080fd5b8135610d0f816123cb565b60008060408385031215611fea57600080fd5b8235611ff5816123cb565b91506020830135612005816123cb565b809150509250929050565b60008060006060848603121561202557600080fd5b8335612030816123cb565b92506020840135612040816123cb565b929592945050506040919091013590565b6000806040838503121561206457600080fd5b823561206f816123cb565b915061207d60208401611fa5565b90509250929050565b6000806040838503121561209957600080fd5b82356120a4816123cb565b946020939093013593505050565b6000602082840312156120c457600080fd5b610d0f82611fa5565b600080604083850312156120e057600080fd5b6120a483611fa5565b600080600080608085870312156120ff57600080fd5b61210885611fa5565b966020860135965060408601359560600135945092505050565b60006020828403121561213457600080fd5b5035919050565b6000806040838503121561214e57600080fd5b8235915061207d60208401611fa5565b6000806040838503121561217157600080fd5b50508035926020909101359150565b60008060006060848603121561219557600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156121c457600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156122195781516001600160a01b0316875295820195908201906001016121f4565b509495945050505050565b84815260806020820152600061223d60808301866121e0565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156122865785810183015185820160400152820161226a565b81811115612298576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a06040820152600061231260a08301866121e0565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156123425761234261239f565b500190565b60008261236457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123835761238361239f565b500290565b60008282101561239a5761239a61239f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146123e057600080fd5b5056fea2646970667358221220699f1577e680deebc97a42f0eec482ff2bf3dd22545d4dc3e673c9ba82a399f364736f6c63430008070033

Deployed Bytecode Sourcemap

14031:15483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25874:187;;;;;;;;;;;;;:::i;:::-;;15958:50;;;;;;;;;;;;;;;;;;;9878:25:1;;;9866:2;9851:18;15958:50:0;;;;;;;;25366:402;;;;;;;;;;-1:-1:-1;25366:402:0;;;;;:::i;:::-;;:::i;17398:94::-;;;;;;;;;;-1:-1:-1;17479:5:0;;;;;;;;;;;;-1:-1:-1;;;17479:5:0;;;;17398:94;;;;;;;:::i;27245:103::-;;;;;;;;;;-1:-1:-1;27245:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;27325:15:0;27301:4;27325:15;;;:7;:15;;;;;;;;;27245:103;;;;6638:14:1;;6631:22;6613:41;;6601:2;6586:18;27245:103:0;6473:187:1;17923:248:0;;;;;;;;;;-1:-1:-1;17923:248:0;;;;;:::i;:::-;;:::i;29211:182::-;;;;;;;;;;-1:-1:-1;29211:182:0;;;;;:::i;:::-;;:::i;17080:102::-;;;;;;;;;;-1:-1:-1;17162:12:0;;17080:102;;28280:206;;;;;;;;;;-1:-1:-1;28280:206:0;;;;;:::i;:::-;;:::i;18500:419::-;;;;;;;;;;-1:-1:-1;18500:419:0;;;;;:::i;:::-;;:::i;14957:39::-;;;;;;;;;;-1:-1:-1;14957:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28854:142;;;;;;;;;;;;;:::i;28494:208::-;;;;;;;;;;-1:-1:-1;28494:208:0;;;;;:::i;:::-;;:::i;5126:103::-;;;;;;;;;;-1:-1:-1;5126:103:0;;;;;:::i;:::-;5181:4;5216:5;-1:-1:-1;;;;;5205:16:0;;;5216:5;;5205:16;;5126:103;17190:94;;;;;;;;;;-1:-1:-1;17190:94:0;;14477:1;10896:36:1;;10884:2;10869:18;17190:94:0;10754:184:1;27143:94:0;;;;;;;;;;-1:-1:-1;27143:94:0;;;;;:::i;:::-;;:::i;15584:38::-;;;;;;;;;;-1:-1:-1;15584:38:0;;;;;;;;14798:43;;;;;;;;;;-1:-1:-1;14798:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14902:48;;;;;;;;;;-1:-1:-1;14902:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18179:117;;;;;;;;;;-1:-1:-1;18179:117:0;;;;;:::i;:::-;;:::i;26222:145::-;;;;;;;;;;-1:-1:-1;26222:145:0;;;;;:::i;:::-;;:::i;26069:::-;;;;;;;;;;-1:-1:-1;26069:145:0;;;;;:::i;:::-;;:::i;26757:120::-;;;;;;;;;;-1:-1:-1;26757:120:0;;;;;:::i;:::-;;:::i;15921:30::-;;;;;;;;;;-1:-1:-1;15921:30:0;;;;;;;;27356:468;;;;;;;;;;-1:-1:-1;27356:468:0;;;;;:::i;:::-;;:::i;25216:142::-;;;;;;;;;;;;;:::i;17600:119::-;;;;;;;;;;-1:-1:-1;17600:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17693:18:0;17666:7;17693:18;;;:9;:18;;;;;;;17600:119;14556:50;;;;;;;;;;;;;;;;14621:48;;;;;;;;;;;;;;;;17500:92;;;;;;;;;;-1:-1:-1;17552:7:0;17579:5;-1:-1:-1;;;;;17579:5:0;17500:92;;;-1:-1:-1;;;;;5035:32:1;;;5017:51;;5005:2;4990:18;17500:92:0;4871:203:1;27044:91:0;;;;;;;;;;-1:-1:-1;27044:91:0;;;;;:::i;:::-;;:::i;14848:47::-;;;;;;;;;;-1:-1:-1;14848:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17292:98;;;;;;;;;;-1:-1:-1;17375:7:0;;;;;;;;;;;;-1:-1:-1;;;17375:7:0;;;;17292:98;;28710:136;;;;;;;;;;-1:-1:-1;28710:136:0;;;;;:::i;:::-;;:::i;27832:253::-;;;;;;;;;;-1:-1:-1;27832:253:0;;;;;:::i;:::-;;:::i;15839:33::-;;;;;;;;;;-1:-1:-1;15839:33:0;;;;-1:-1:-1;;;;;15839:33:0;;;15481:19;;;;;;;;;;-1:-1:-1;15481:19:0;;;;-1:-1:-1;;;;;15481:19:0;;;18304:188;;;;;;;;;;-1:-1:-1;18304:188:0;;;;;:::i;:::-;;:::i;14170:64::-;;;;;;;;;;-1:-1:-1;14170:64:0;;;;-1:-1:-1;;;;;14170:64:0;;;4799:94;;;;;;;;;;-1:-1:-1;4799:94:0;;;;;:::i;:::-;;:::i;15509:25::-;;;;;;;;;;;;;;;;15541:34;;;;;;;;;;;;;;;;15174:90;;;;;;;;;;-1:-1:-1;15174:90:0;;;;-1:-1:-1;;;;;15174:90:0;;;29004:199;;;;;;;;;;-1:-1:-1;29004:199:0;;;;;:::i;:::-;;:::i;17727:188::-;;;;;;;;;;-1:-1:-1;17727:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;17879:19:0;;;17847:7;17879:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17727:188;28093:179;;;;;;;;;;-1:-1:-1;28093:179:0;;;;;:::i;:::-;;:::i;15271:89::-;;;;;;;;;;-1:-1:-1;15271:89:0;;;;-1:-1:-1;;;;;15271:89:0;;;4969:97;;;;;;;;;;-1:-1:-1;4969:97:0;;;;;:::i;:::-;;:::i;21369:99::-;;;;;;;;;;-1:-1:-1;21369:99:0;;;;;:::i;:::-;-1:-1:-1;21452:8:0;;;21369:99;5526:173;;;;;;;;;;-1:-1:-1;5526:173:0;;;;;:::i;:::-;;:::i;24341:202::-;;;;;;;;;;-1:-1:-1;24341:202:0;;;;;:::i;:::-;;:::i;26375:374::-;;;;;;;;;;-1:-1:-1;26375:374:0;;;;;:::i;:::-;;:::i;26885:151::-;;;;;;;;;;-1:-1:-1;26885:151:0;;;;;:::i;:::-;;:::i;15453:21::-;;;;;;;;;;-1:-1:-1;15453:21:0;;;;-1:-1:-1;;;;;15453:21:0;;;5300:107;;;;;;;;;;-1:-1:-1;5300:107:0;;;;;:::i;:::-;;:::i;25874:187::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;;;;;;;;;25929:10:::1;::::0;:15;25921:48:::1;;;::::0;-1:-1:-1;;;25921:48:0;;8911:2:1;25921:48:0::1;::::0;::::1;8893:21:1::0;8950:2;8930:18;;;8923:30;-1:-1:-1;;;8969:18:1;;;8962:50;9029:18;;25921:48:0::1;8709:344:1::0;25921:48:0::1;25993:12;25980:10;:25:::0;26038:15:::1;26016:19;:37:::0;25874:187::o;25366:402::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;25535:18:::1;:29:::0;;-1:-1:-1;;25535:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25575:14:::1;:21:::0;;;;-1:-1:-1;25607:22:0::1;:26:::0;25644:17:::1;:27:::0;25682:22:::1;:32:::0;25748:12:::1;25725:20;:35:::0;25366:402::o;17923:248::-;18059:10;18025:4;18047:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18047:32:0;;;;;;;;;;:41;;;18104:37;18025:4;;18047:32;;18104:37;;;;18082:6;9878:25:1;;9866:2;9851:18;;9732:177;18104:37:0;;;;;;;;-1:-1:-1;18159:4:0;17923:248;;;;:::o;29211:182::-;29318:4;29379:6;29347:29;29367:8;29347:19;:29::i;:::-;:38;;29211:182;-1:-1:-1;;;29211:182:0:o;28280:206::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;28401:15:::1;:25:::0;;;;28437:26:::1;:41:::0;28280:206::o;18500:419::-;18690:12;;-1:-1:-1;;;;;18655:19:0;;18634:4;18655:19;;;:11;:19;;;;;;;;18675:10;18655:31;;;;;;;;18634:4;;18655:47;18651:201;;18753:87;;;;;;;;;;;-1:-1:-1;;;18753:87:0;;;;;;;;-1:-1:-1;;;;;18753:19:0;;-1:-1:-1;18753:19:0;;;:11;:19;;;;;18773:10;18753:31;;;;;;;;;;:87;;18807:6;;18753:53;:87::i;:::-;-1:-1:-1;;;;;18719:19:0;;;;;;:11;:19;;;;;;;;18739:10;18719:31;;;;;;;:121;18651:201;18871:40;18885:6;18893:9;18904:6;18871:13;:40::i;:::-;18864:47;;18500:419;;;;;;:::o;28854:142::-;28982:4;;-1:-1:-1;;;;;28982:4:0;28907:7;17693:18;;;:9;:18;;;;;;28934:54;;28961:4;;-1:-1:-1;;;;;28961:4:0;17666:7;17693:18;;;:9;:18;;;;;;28934:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;28927:61;;28854:142;:::o;28494:208::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;28629:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;28629:65:0;;::::1;::::0;::::1;10675:25:1::0;;;10716:18;;;10709:34;;;-1:-1:-1;;;;;28629:11:0;;::::1;::::0;:35:::1;::::0;10648:18:1;;28629:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28494:208:::0;;:::o;27143:94::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27206:15:0::1;27224:5;27206:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;27206:23:0::1;::::0;;27143:94::o;18179:117::-;18234:4;18258:30;18266:7;18275:12;;18258:7;:30::i;:::-;18251:37;18179:117;-1:-1:-1;;18179:117:0:o;26222:145::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;26322:4:::1;26307:12;;:19;;;;:::i;:::-;26297:6;:29;;26289:38;;;::::0;::::1;;26338:12;:21:::0;26222:145::o;26069:::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;26171:4:::1;26156:12;;:19;;;;:::i;:::-;26146:6;:29;;26138:38;;;::::0;::::1;;26187:10;:19:::0;26069:145::o;26757:120::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26841:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26841:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26757:120::o;27356:468::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;27542:12:::1;:28:::0;;;27581:13:::1;:30:::0;;;27622:12:::1;:28:::0;;;27672:52:::1;27637:13:::0;27672:33:::1;27557:13:::0;27597:14;27672:17:::1;:33::i;:::-;:37:::0;::::1;:52::i;:::-;27661:8;:63:::0;27735:14:::1;:32:::0;;;27797:18:::1;27814:1;27752:15:::0;27797:18:::1;:::i;:::-;27786:8;;:29;27778:38;;;::::0;::::1;;27356:468:::0;;;;:::o;25216:142::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;25313:37:::1;::::0;25281:21:::1;::::0;25321:10:::1;::::0;25313:37;::::1;;;::::0;25281:21;;25263:15:::1;25313:37:::0;25263:15;25313:37;25281:21;25321:10;25313:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25252:106;25216:142::o:0;27044:91::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27105:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;27105:22:0::1;27123:4;27105:22;::::0;;27044:91::o;28710:136::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;28800:6:::1;28794:3;:12;28786:21;;;::::0;::::1;;28818:14;:20:::0;28710:136::o;27832:253::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;27976:21:::1;:46:::0;;-1:-1:-1;;;;;27976:46:0;;::::1;-1:-1:-1::0;;;;;;27976:46:0;;::::1;;::::0;;;28033:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;27832:253::o;18304:188::-;18411:4;18440:44;18454:10;18466:9;18477:6;18440:13;:44::i;4799:94::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4859:19:0::1;;::::0;;;4881:4:::1;4859:19;::::0;;;;;;;:26;;-1:-1:-1;;4859:26:0::1;::::0;;::::1;::::0;;4799:94::o;29004:199::-;29099:7;29131:64;29172:22;:20;:22::i;:::-;29154:4;;-1:-1:-1;;;;;29154:4:0;17666:7;17693:18;;;:9;:18;;;;;;29131:36;;29144:22;;29164:1;29144:19;:22::i;:::-;29131:8;;:12;:36::i;:::-;:40;;:64::i;28093:179::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;28208:11:::1;:22:::0;;-1:-1:-1;;28208:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;28241:13:::1;:23:::0;28093:179::o;4969:97::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5031:19:0::1;5053:5;5031:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;5031:27:0::1;::::0;;4969:97::o;5526:173::-;5181:4;5216:5;-1:-1:-1;;;;;5216:5:0;4505:10;5205:16;4489:38;;;;-1:-1:-1;;;4489:38:0;;;;;;;:::i;:::-;5602:5:::1;:11:::0;;-1:-1:-1;;;;;;5602:11:0::1;-1:-1:-1::0;;;;;5602:11:0;::::1;::::0;;::::1;::::0;;5624:19;;;-1:-1:-1;5624:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5624:26:0::1;::::0;;::::1;::::0;;;5666:25;;5017:51:1;;;5666:25:0::1;::::0;4990:18:1;5666:25:0::1;;;;;;;5526:173:::0;:::o;24341:202::-;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;24488:4:::1;::::0;24470:23:::1;::::0;24480:6;;-1:-1:-1;;;;;24488:4:0::1;24470:9;:23::i;26375:374::-:0;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26495:23:0;::::1;26513:4;26495:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;26532:4:0::1;::::0;-1:-1:-1;;;;;26522:14:0;;::::1;26532:4:::0;::::1;26522:14;;26495:41;26487:50;;;::::0;::::1;;-1:-1:-1::0;;;;;26548:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26548:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;26592:150:::1;;26619:11;::::0;:31:::1;::::0;-1:-1:-1;;;26619:31:0;;-1:-1:-1;;;;;5495:32:1;;;26619:31:0::1;::::0;::::1;5477:51:1::0;26619:11:0::1;5544:18:1::0;;;5537:34;26619:11:0;;::::1;::::0;:20:::1;::::0;5450:18:1;;26619:31:0::1;5295:282:1::0;26592:150:0::1;26683:11;::::0;-1:-1:-1;;;;;26712:17:0;;::::1;26683:11;26712:17:::0;;;:9:::1;:17;::::0;;;;;;;26683:47;;-1:-1:-1;;;26683:47:0;;::::1;::::0;::::1;5477:51:1::0;;;;5544:18;;;5537:34;26683:11:0;::::1;::::0;:20:::1;::::0;5450:18:1;;26683:47:0::1;5295:282:1::0;26885:151:0;4675:24;4688:10;4675:12;:24::i;:::-;4667:48;;;;-1:-1:-1;;;4667:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26996:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26996:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26885:151::o;5300:107::-;-1:-1:-1;;;;;5380:19:0;5356:4;5380:19;;;:14;:19;;;;;;;;;5300:107::o;2149:98::-;2207:7;2234:5;2238:1;2234;:5;:::i;2361:240::-;2481:7;2542:12;2534:6;;;;2526:29;;;;-1:-1:-1;;;2526:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2577:5:0;;;2361:240::o;18927:1743::-;19074:6;;19053:4;;19074:6;;19070:87;;;19104:41;19119:6;19127:9;19138:6;19104:14;:41::i;:::-;19097:48;;;;19070:87;19298:4;;19218:42;;19194:21;;-1:-1:-1;;;;;19285:17:0;;;19298:4;;19285:17;;:47;;;19319:13;-1:-1:-1;;;;;19306:26:0;:9;-1:-1:-1;;;;;19306:26:0;;19285:47;19271:61;;19343:28;19356:6;19364;19343:12;:28::i;:::-;19444:6;19443:7;:30;;;;-1:-1:-1;;;;;;19455:18:0;;;;;;:7;:18;;;;;;;;19454:19;19443:30;19439:198;;;19550:10;;-1:-1:-1;;;;;19517:20:0;;;;;;:9;:20;;;;;;:29;;19540:6;;19517:29;:::i;:::-;19516:44;19490:135;;;;-1:-1:-1;;;19490:135:0;;8553:2:1;19490:135:0;;;8535:21:1;8592:2;8572:18;;;8565:30;8631:31;8611:18;;;8604:59;8680:18;;19490:135:0;8351:353:1;19490:135:0;19691:6;19687:199;;;19718:16;:14;:16::i;:::-;19714:67;;;19755:10;:8;:10::i;:::-;19799:19;:17;:19::i;:::-;19795:80;;;19839:20;:18;:20::i;:::-;19918:90;;;;;;;;;;;-1:-1:-1;;;19918:90:0;;;;;;;;-1:-1:-1;;;;;19918:17:0;;-1:-1:-1;19918:17:0;;;:9;:17;;;;;;;;:90;;19954:6;;19918:21;:90::i;:::-;-1:-1:-1;;;;;19898:17:0;;;;;;:9;:17;;;;;;;;:110;;;;21334:11;:19;;;;;;;;21333:20;20046:93;;20133:6;20046:93;;;20083:34;20091:6;20099:9;20110:6;20083:7;:34::i;:::-;-1:-1:-1;;;;;20175:20:0;;;;;;:9;:20;;;;;;20021:118;;-1:-1:-1;20175:40:0;;20021:118;20175:24;:40::i;:::-;-1:-1:-1;;;;;20152:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20233:24;;;;;:16;:24;;;;;;;20228:120;;20278:11;;-1:-1:-1;;;;;20307:17:0;;;20278:11;20307:17;;;:9;:17;;;;;;;;20278:47;;-1:-1:-1;;;20278:47:0;;;;;5477:51:1;;;;5544:18;;;5537:34;20278:11:0;;;:20;;5450:18:1;;20278:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20274:63;;-1:-1:-1;;;;;20363:27:0;;;;;;:16;:27;;;;;;;;20358:159;;20428:11;;-1:-1:-1;;;;;20460:20:0;;;20428:11;20460:20;;;:9;:20;;;;;;;;20428:53;;-1:-1:-1;;;20428:53:0;;;;;5477:51:1;;;;5544:18;;;5537:34;20428:11:0;;;:20;;5450:18:1;;20428:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20407:99;;20533:11;;20553:14;;20533:35;;-1:-1:-1;;;;;;20533:35:0;;-1:-1:-1;;;;;20533:11:0;;;;:19;;:35;;;;9878:25:1;;;9866:2;9851:18;;9732:177;20533:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20529:51;20614:9;-1:-1:-1;;;;;20597:43:0;20606:6;-1:-1:-1;;;;;20597:43:0;;20625:14;20597:43;;;;9878:25:1;;9866:2;9851:18;;9732:177;20597:43:0;;;;;;;;-1:-1:-1;20658:4:0;;18927:1743;-1:-1:-1;;;;;;18927:1743:0:o;1937:98::-;1995:7;2022:5;2026:1;2022;:5;:::i;1831:98::-;1889:7;1916:5;1920:1;1916;:5;:::i;2043:98::-;2101:7;2128:5;2132:1;2128;:5;:::i;24886:322::-;16075:6;:13;;-1:-1:-1;;16075:13:0;16084:4;16075:13;;;24986:16:::1;::::0;;25000:1:::1;24986:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24986:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;25023:4:0::1;::::0;25013:7;;;;-1:-1:-1;;;;;;25023:4:0::1;::::0;25013:7;;-1:-1:-1;25023:4:0::1;::::0;25013:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;25013:14:0::1;;;-1:-1:-1::0;;;;;25013:14:0::1;;;::::0;::::1;25056:4;25038;25043:1;25038:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25038:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25074:6:::1;::::0;:126:::1;::::0;-1:-1:-1;;;25074:126:0;;:6;::::1;::::0;:57:::1;::::0;25153:6;;25074:126:::1;::::0;:6:::1;::::0;25174:4;;25180:2;;25184:15:::1;::::0;25074:126:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16111:6:0;:14;;-1:-1:-1;;16111:14:0;;;-1:-1:-1;;;;;;24886:322:0:o;20678:350::-;20842:90;;;;;;;;;;;-1:-1:-1;;;20842:90:0;;;;;;;;-1:-1:-1;;;;;20842:17:0;;20805:4;20842:17;;;:9;:17;;;;;;;:90;;20878:6;;20842:21;:90::i;:::-;-1:-1:-1;;;;;20822:17:0;;;;;;;:9;:17;;;;;;:110;;;;20966:20;;;;;;;:32;;20991:6;20966:24;:32::i;:::-;-1:-1:-1;;;;;20943:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;21016:4:0;20678:350;;;;;:::o;21036:203::-;21147:12;;21137:6;:22;;:49;;;-1:-1:-1;;;;;;21163:23:0;;;;;;:15;:23;;;;;;;;21137:49;21115:116;;;;-1:-1:-1;;;21115:116:0;;8207:2:1;21115:116:0;;;8189:21:1;8246:2;8226:18;;;8219:30;-1:-1:-1;;;8265:18:1;;;8258:47;8322:18;;21115:116:0;8005:341:1;21914:222:0;22014:4;;21963;;-1:-1:-1;;;;;22014:4:0;22000:10;:18;;;;:42;;-1:-1:-1;22036:6:0;;;;22035:7;22000:42;:70;;;;-1:-1:-1;22059:11:0;;;;22000:70;:128;;;;-1:-1:-1;;22115:13:0;;22105:4;22087:24;;;;:9;:24;;;;;;:41;;;21914:222::o;22144:1834::-;16075:6;:13;;-1:-1:-1;;16075:13:0;16084:4;16075:13;;;22253:15:::1;::::0;22283:26:::1;::::0;16075:6;;22223:97:::1;::::0;:15:::1;:97::i;:::-;:142;;22353:12;;22223:142;;;22336:1;22223:142;22193:172;;22376:23;22402:101;22501:1;22402:80;22473:8;;22402:52;22434:19;22402:13;;:31;;:52;;;;:::i;:101::-;22376:127;;22514:20;22537:34;22555:15;22537:13;;:17;;:34;;;;:::i;:::-;22608:16;::::0;;22622:1:::1;22608:16:::0;;;;;::::1;::::0;;22514:57;;-1:-1:-1;22584:21:0::1;::::0;22608:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22608:16:0::1;22584:40;;22653:4;22635;22640:1;22635:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22635:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22679:4:::1;::::0;22669:7;;22679:4;::::1;::::0;22669;;22679;;22669:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22669:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;22752:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22752:188:0;;22718:21:::1;::::0;22752:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22824:12;;22694:21:::1;::::0;22867:4;;22894::::1;::::0;22914:15:::1;::::0;22752:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22953:17;22973:40;22999:13;22973:21;:25;;:40;;;;:::i;:::-;22953:60:::0;-1:-1:-1;23026:19:0::1;23048:40;23061:26;:19:::0;23085:1:::1;23061:23;:26::i;:::-;23048:8;::::0;;:12:::1;:40::i;:::-;23026:62:::0;-1:-1:-1;23101:26:0::1;23130:100;23228:1;23130:79;23026:62:::0;23130:79;:9;23158:19;23130:27:::1;:48::i;:100::-;23101:129;;23241:27;23271:69;23318:11;23271:28;23285:13;;23271:9;:13;;:28;;;;:::i;:69::-;23241:99;;23351:26;23380:68;23426:11;23380:27;23394:12;;23380:9;:13;;:27;;;;:::i;:68::-;23351:97;;23465:11;;;;;;;;;-1:-1:-1::0;;;;;23465:11:0::1;-1:-1:-1::0;;;;;23465:19:0::1;;23492;23465:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;23461:65:::0;23544:20:::1;::::0;23536:58:::1;::::0;-1:-1:-1;;;;;23544:20:0;;::::1;::::0;23536:58;::::1;;;::::0;23575:18;;23544:20:::1;23536:58:::0;23544:20;23536:58;23575:18;23544:20;23536:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23611:19:0;;23607:364:::1;;23647:6;::::0;23821:21:::1;::::0;23647:244:::1;::::0;-1:-1:-1;;;23647:244:0;;23723:4:::1;23647:244;::::0;::::1;6202:34:1::0;6252:18;;;6245:34;;;23647:6:0::1;6295:18:1::0;;;6288:34;;;6338:18;;;6331:34;-1:-1:-1;;;;;23821:21:0;;::::1;6381:19:1::0;;;6374:44;23861:15:0::1;6434:19:1::0;;;6427:35;23647:6:0;::::1;::::0;:22:::1;::::0;23677:18;;6136:19:1;;23647:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23911:48:0::1;::::0;;10675:25:1;;;10731:2;10716:18;;10709:34;;;23911:48:0::1;::::0;-1:-1:-1;10648:18:1;23911:48:0::1;;;;;;;23607:364;-1:-1:-1::0;;16111:6:0;:14;;-1:-1:-1;;16111:14:0;;;-1:-1:-1;;;;;;;;22144:1834:0:o;23986:347::-;24089:4;;24038;;-1:-1:-1;;;;;24089:4:0;24075:10;:18;;;;:42;;-1:-1:-1;24111:6:0;;;;24110:7;24075:42;:77;;;;-1:-1:-1;24134:18:0;;;;24075:77;:155;;;;;24218:12;24192:22;;24169:20;;:45;;;;:::i;:::-;:61;;24075:155;:250;;;;-1:-1:-1;;24308:17:0;;24283:21;:42;;;23986:347::o;24551:327::-;24611:17;;24630:4;;24601:34;;24611:17;-1:-1:-1;;;;;24630:4:0;24601:9;:34::i;:::-;24669:12;24646:20;:35;24744:17;;24717:22;;:45;;:26;:45::i;:::-;24692:22;:70;;;24802:14;;-1:-1:-1;24773:98:0;;;24833:18;:26;;-1:-1:-1;;24833:26:0;;;24773:98;24551:327::o;21476:430::-;21695:14;;21452:8;;21595:7;;;;21635:85;;21695:14;21635:41;;:6;;:10;:41::i;:85::-;21778:4;21760:24;;;;:9;:24;;;;;;21615:105;;-1:-1:-1;21760:39:0;;21615:105;21760:28;:39::i;:::-;21751:4;21733:24;;;;:9;:24;;;;;;;:66;;;;21815:42;;-1:-1:-1;;;;;21815:42:0;;;;;;;21847:9;9878:25:1;;9866:2;9851:18;;9732:177;21815:42:0;;;;;;;;21877:21;:6;21888:9;21877:10;:21::i;:::-;21870:28;21476:430;-1:-1:-1;;;;;21476:430:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:26;2551:9;2535:26;:::i;2623:385::-;2706:6;2714;2722;2730;2783:3;2771:9;2762:7;2758:23;2754:33;2751:53;;;2800:1;2797;2790:12;2751:53;2823:26;2839:9;2823:26;:::i;:::-;2813:36;2896:2;2881:18;;2868:32;;-1:-1:-1;2947:2:1;2932:18;;2919:32;;2998:2;2983:18;2970:32;;-1:-1:-1;2623:385:1;-1:-1:-1;;;2623:385:1:o;3013:180::-;3072:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;-1:-1:-1;3164:23:1;;3013:180;-1:-1:-1;3013:180:1:o;3198:248::-;3263:6;3271;3324:2;3312:9;3303:7;3299:23;3295:32;3292:52;;;3340:1;3337;3330:12;3292:52;3376:9;3363:23;3353:33;;3405:35;3436:2;3425:9;3421:18;3405:35;:::i;3451:248::-;3519:6;3527;3580:2;3568:9;3559:7;3555:23;3551:32;3548:52;;;3596:1;3593;3586:12;3548:52;-1:-1:-1;;3619:23:1;;;3689:2;3674:18;;;3661:32;;-1:-1:-1;3451:248:1:o;3704:306::-;3792:6;3800;3808;3861:2;3849:9;3840:7;3836:23;3832:32;3829:52;;;3877:1;3874;3867:12;3829:52;3906:9;3900:16;3890:26;;3956:2;3945:9;3941:18;3935:25;3925:35;;4000:2;3989:9;3985:18;3979:25;3969:35;;3704:306;;;;;:::o;4015:385::-;4101:6;4109;4117;4125;4178:3;4166:9;4157:7;4153:23;4149:33;4146:53;;;4195:1;4192;4185:12;4146:53;-1:-1:-1;;4218:23:1;;;4288:2;4273:18;;4260:32;;-1:-1:-1;4339:2:1;4324:18;;4311:32;;4390:2;4375:18;4362:32;;-1:-1:-1;4015:385:1;-1:-1:-1;4015:385:1:o;4405:461::-;4458:3;4496:5;4490:12;4523:6;4518:3;4511:19;4549:4;4578:2;4573:3;4569:12;4562:19;;4615:2;4608:5;4604:14;4636:1;4646:195;4660:6;4657:1;4654:13;4646:195;;;4725:13;;-1:-1:-1;;;;;4721:39:1;4709:52;;4781:12;;;;4816:15;;;;4757:1;4675:9;4646:195;;;-1:-1:-1;4857:3:1;;4405:461;-1:-1:-1;;;;;4405:461:1:o;6888:510::-;7159:6;7148:9;7141:25;7202:3;7197:2;7186:9;7182:18;7175:31;7122:4;7223:57;7275:3;7264:9;7260:19;7252:6;7223:57;:::i;:::-;-1:-1:-1;;;;;7316:32:1;;;;7311:2;7296:18;;7289:60;-1:-1:-1;7380:2:1;7365:18;7358:34;7215:65;6888:510;-1:-1:-1;;6888:510:1:o;7403:597::-;7515:4;7544:2;7573;7562:9;7555:21;7605:6;7599:13;7648:6;7643:2;7632:9;7628:18;7621:34;7673:1;7683:140;7697:6;7694:1;7691:13;7683:140;;;7792:14;;;7788:23;;7782:30;7758:17;;;7777:2;7754:26;7747:66;7712:10;;7683:140;;;7841:6;7838:1;7835:13;7832:91;;;7911:1;7906:2;7897:6;7886:9;7882:22;7878:31;7871:42;7832:91;-1:-1:-1;7984:2:1;7963:15;-1:-1:-1;;7959:29:1;7944:45;;;;7991:2;7940:54;;7403:597;-1:-1:-1;;;7403:597:1:o;9058:329::-;9260:2;9242:21;;;9299:1;9279:18;;;9272:29;-1:-1:-1;;;9332:2:1;9317:18;;9310:36;9378:2;9363:18;;9058:329::o;9392:335::-;9594:2;9576:21;;;9633:2;9613:18;;;9606:30;-1:-1:-1;;;9667:2:1;9652:18;;9645:41;9718:2;9703:18;;9392:335::o;9914:582::-;10213:6;10202:9;10195:25;10256:6;10251:2;10240:9;10236:18;10229:34;10299:3;10294:2;10283:9;10279:18;10272:31;10176:4;10320:57;10372:3;10361:9;10357:19;10349:6;10320:57;:::i;:::-;-1:-1:-1;;;;;10413:32:1;;;;10408:2;10393:18;;10386:60;-1:-1:-1;10477:3:1;10462:19;10455:35;10312:65;9914:582;-1:-1:-1;;;9914:582:1:o;10943:128::-;10983:3;11014:1;11010:6;11007:1;11004:13;11001:39;;;11020:18;;:::i;:::-;-1:-1:-1;11056:9:1;;10943:128::o;11076:217::-;11116:1;11142;11132:132;;11186:10;11181:3;11177:20;11174:1;11167:31;11221:4;11218:1;11211:15;11249:4;11246:1;11239:15;11132:132;-1:-1:-1;11278:9:1;;11076:217::o;11298:168::-;11338:7;11404:1;11400;11396:6;11392:14;11389:1;11386:21;11381:1;11374:9;11367:17;11363:45;11360:71;;;11411:18;;:::i;:::-;-1:-1:-1;11451:9:1;;11298:168::o;11471:125::-;11511:4;11539:1;11536;11533:8;11530:34;;;11544:18;;:::i;:::-;-1:-1:-1;11581:9:1;;11471:125::o;11601:127::-;11662:10;11657:3;11653:20;11650:1;11643:31;11693:4;11690:1;11683:15;11717:4;11714:1;11707:15;11733:127;11794:10;11789:3;11785:20;11782:1;11775:31;11825:4;11822:1;11815:15;11849:4;11846:1;11839:15;11997:131;-1:-1:-1;;;;;12072:31:1;;12062:42;;12052:70;;12118:1;12115;12108:12;12052:70;11997:131;:::o

Swarm Source

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