ETH Price: $3,704.30 (-2.01%)
Gas: 9 Gwei

Token

Z-Cubed (Z3)
 

Overview

Max Total Supply

21,000,000 Z3

Holders

855 (0.00%)

Total Transfers

-

Market

Price

$0.01 @ 0.000002 ETH (-0.02%)

Onchain Market Cap

$131,617.08

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

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

OVERVIEW

Z³ is a decentralised, zero emissions, Proof of holdings (POH) auto-mining consensus on the ethereum blockchain. Buy. Hold. Mine. Grow.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZCubed

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-25
*/

/*

TG : https://t.me/Z3_Portal

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

interface InterfaceLP {
    function sync() external;
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
}

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract ZCubed is ERC20Detailed, Ownable {

    bool public tradingActive = false;
    bool public swapEnabled = true;

    uint256 public rewardYield = 315920639267394;
    uint256 public rewardYieldDenominator = 100000000000000000;

    uint256 public rebaseFrequency = 1 days / 2; // 43200 seconds - every 12 hours
    uint256 public nextRebase;
    bool public autoRebase = true;

    uint256 public timeBetweenRebaseReduction = 90 days; // 90 days
    uint256 public rebaseReductionAmount = 3; // 30% reduction
    uint256 public lastReduction;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    mapping(address => bool) _isFeeExempt;
    address[] public _makerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 public constant MAX_FEE_RATE = 4;
    uint256 public constant MAX_REBASE_FREQUENCY = 43200;
    uint256 public constant MIN_REBASE_FREQUENCY = 43200;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = type(uint256).max;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 2_100_000 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = type(uint256).max - (type(uint256).max % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = 21_000_000 * 10**DECIMALS;

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event RemovedLimits();

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public marketingAddress;
    address public treasuryAddress;
    address public PAIREDTOKEN;

    IDEXRouter public immutable router;
    address public pair;

    TokenHandler public tokenHandler;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 2;
    uint256 public treasuryFee = 1;
    uint256 public totalFee = liquidityFee + marketingFee + treasuryFee;
    uint256 public feeDenominator = 100;
    
    bool public limitsInEffect = true;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS / 100000 * 25);

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    constructor() ERC20Detailed(block.chainid==1 ? "Z-Cubed" : "ZTEST", block.chainid==1 ? "Z3" : "ZTEST", 18) {
        address dexAddress;
        address pairedTokenAddress;
        if(block.chainid == 1){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            pairedTokenAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
        } else if(block.chainid == 5){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            pairedTokenAddress = 0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557;
        } else if (block.chainid == 97){
            dexAddress = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
            pairedTokenAddress  = 0x78867BbEeF44f2326bF8DDd1941a4439382EF2A7;
        } else {
            revert("Chain not configured");
        }

        marketingAddress = address(0x77B2aE7647afAa8Eef08572CF7b77803C5aE95d7);
        treasuryAddress = address(0x4f013300A0DcE6193388Cd057108eecB9e1054aC);

        nextRebase = block.timestamp + rebaseFrequency;
        
        PAIREDTOKEN = pairedTokenAddress;

        router = IDEXRouter(dexAddress);

        tokenHandler = new TokenHandler();

        _allowedFragments[address(this)][address(router)] = ~uint256(0);
        _allowedFragments[address(msg.sender)][address(router)] = ~uint256(0);
        _allowedFragments[address(this)][address(this)] = ~uint256(0);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS / 100 * 95;
        _gonBalances[treasuryAddress] += TOTAL_GONS - _gonBalances[msg.sender];
        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        maxTxnAmount = _totalSupply * 5 / 1000; // 0.5%
        maxWallet = _totalSupply * 1 / 100;
        
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[address(msg.sender)] = true;
        _isFeeExempt[address(dexAddress)] = true;
        _isFeeExempt[address(0xdead)] = true;

        emit Transfer(address(0x0), msg.sender, balanceOf(msg.sender));
        emit Transfer(address(0x0), treasuryAddress, balanceOf(treasuryAddress));  
    }

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

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

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who]/(_gonsPerFragment);
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold/(_gonsPerFragment);
    }

    function shouldRebase() public view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldTakeFee(address from, address to) internal view returns (bool) {
        if(_isFeeExempt[from] || _isFeeExempt[to]){
            return false;
        } else {
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !inSwap &&
        swapEnabled &&
        totalFee > 0 &&
        _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function manualSync() public {
        for(uint i = 0; i < _makerPairs.length; i++){
            try InterfaceLP(_makerPairs[i]).sync(){} catch {}
        }
    }

    function transfer(address to, uint256 value) external override validRecipient(to) returns (bool){
        _transferFrom(msg.sender, to, value);
        return true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    // alter the paired token so bots can't prep for new path (hypothetically)
    function alterToken(address newToken) external onlyOwner {
        require(newToken != address(0), "Zero address");
        require(!tradingActive, "trading already active");
        pair = IDEXFactory(router.factory()).createPair(address(this), newToken);
        _allowedFragments[address(this)][pair] = ~uint256(0);
        setAutomatedMarketMakerPair(pair, true);
        PAIREDTOKEN = newToken;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(!tradingActive){
            require(_isFeeExempt[sender] || _isFeeExempt[recipient], "Trading is paused");
        }

        if(limitsInEffect){
            if (!_isFeeExempt[sender] && !_isFeeExempt[recipient]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (recipient != address(router) && !automatedMarketMakerPairs[recipient]){
                        require(_holderLastTransferBlock[tx.origin] + 2 < block.number && _holderLastTransferBlock[recipient] + 2 < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[recipient] = block.number;
                    }
                }
                //when buy
                if (automatedMarketMakerPairs[sender]) {
                    require(amount <= maxTxnAmount, "Buy transfer amount exceeds the max buy.");
                }
                if (!automatedMarketMakerPairs[recipient]){
                    require(balanceOf(recipient) + amount <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        if(!_isFeeExempt[sender] && !_isFeeExempt[recipient] && shouldSwapBack() && !automatedMarketMakerPairs[sender]){
            inSwap = true;
            swapBack();
            inSwap = false;
        }

        if(autoRebase && !automatedMarketMakerPairs[sender] && !inSwap && shouldRebase() && !_isFeeExempt[recipient] && !_isFeeExempt[sender]){
            rebase();
        }

        uint256 gonAmount = amount*(_gonsPerFragment);

        _gonBalances[sender] = _gonBalances[sender]-(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, gonAmount) : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient]+(gonAmountReceived);

        emit Transfer(sender, recipient, gonAmountReceived/(_gonsPerFragment));

        return true;
    }

    function transferFrom(address from, address to,  uint256 value) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != MAX_UINT256) {
            require(_allowedFragments[from][msg.sender] >= value,"Insufficient Allowance");
            _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender]-(value);
        }
        _transferFrom(from, to, value);
        return true;
    }

    

    function swapBack() public {

        uint256 contractBalance = balanceOf(address(this));

        if(contractBalance > gonSwapThreshold/(_gonsPerFragment) * 20){
            contractBalance = gonSwapThreshold/(_gonsPerFragment) * 20;
        }

        uint256 tokensForLiquidity = contractBalance * liquidityFee / totalFee;

        if(tokensForLiquidity > 0 && contractBalance >= tokensForLiquidity){
            _transferFrom(address(this), pair, tokensForLiquidity);
            manualSync();
            contractBalance -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }
        
        swapTokensForPAIREDTOKEN(contractBalance);

        tokenHandler.sendTokenToOwner(address(PAIREDTOKEN));
        
        uint256 pairedTokenBalance = IERC20(PAIREDTOKEN).balanceOf(address(this));

        uint256 pairedTokenForTreasury = pairedTokenBalance * treasuryFee / (treasuryFee + marketingFee);

        if(pairedTokenForTreasury > 0){
            IERC20(PAIREDTOKEN).transfer(treasuryAddress, pairedTokenForTreasury);
        }

        if(IERC20(PAIREDTOKEN).balanceOf(address(this)) > 0){
            IERC20(PAIREDTOKEN).transfer(marketingAddress, IERC20(PAIREDTOKEN).balanceOf(address(this)));
        }
    }

    function swapTokensForPAIREDTOKEN(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(PAIREDTOKEN);

        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount
            path,
            address(tokenHandler),
            block.timestamp
        );
    }

    function takeFee(address sender, uint256 gonAmount) internal returns (uint256){

        uint256 feeAmount = gonAmount*(totalFee)/(feeDenominator);

        _gonBalances[address(this)] = _gonBalances[address(this)]+(feeAmount);
        emit Transfer(sender, address(this), feeAmount/(_gonsPerFragment));

        return gonAmount-(feeAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue-(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ]+(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

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

    function getSupplyDeltaOnNextRebase() external view returns (uint256){
        return (_totalSupply*rewardYield)/rewardYieldDenominator;
    }

    function rebase() private returns (uint256) {
        uint256 epoch = block.timestamp;

        if(lastReduction + timeBetweenRebaseReduction <= block.timestamp){
            rewardYield -= rewardYield * rebaseReductionAmount / 10;
            lastReduction = block.timestamp;
        }

        uint256 supplyDelta = (_totalSupply*rewardYield)/rewardYieldDenominator;
        
        nextRebase = nextRebase + rebaseFrequency;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        _totalSupply = _totalSupply+supplyDelta;

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        manualSync();

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external {
        require(!inSwap, "Try again");
        require(shouldRebase(), "Not in time");
        rebase();
    }
    
    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if(_value){
            _makerPairs.push(_pair);
        } else {
            require(_makerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active");
        tradingActive = true;
        nextRebase = block.timestamp + rebaseFrequency;
        lastReduction = block.timestamp;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setFeeReceivers(address _marketingReceiver, address _treasuryReceiver) external onlyOwner {
        require(_marketingReceiver != address(0) && _treasuryReceiver != address(0), "zero address");
        treasuryAddress = _treasuryReceiver;
        marketingAddress = _marketingReceiver;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _treasuryFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        treasuryFee = _treasuryFee;
        totalFee = liquidityFee + marketingFee + treasuryFee;
        require(totalFee <= MAX_FEE_RATE, "Fees set too high");
    }

    function rescueToken(address tokenAddress, uint256 tokens, address destination) external onlyOwner returns (bool success){
        require(tokenAddress != address(this), "Cannot take native tokens");
        return ERC20Detailed(tokenAddress).transfer(destination, tokens);
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(_nextRebase > block.timestamp, "Must set rebase in the future");
        nextRebase = _nextRebase;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIREDTOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_makerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"alterToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyDeltaOnNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseReductionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenRebaseReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040526002805461ffff60a81b1916600160b01b17815566011f54017b1242600390815567016345785d8a000060045561a8c06005556007805460ff1990811660019081179092556276a700600855600992909255601080546001600160a01b031990811661dead179091556011805490911690556018805490921681179091556019819055601a829055601b819055906200009e9082620006d4565b620000aa9190620006d4565b601c556064601d55601e805460ff19166001179055620186a0620000d16012600a620007e7565b620000e09062200b20620007fc565b620000ee906000196200082c565b620000fc9060001962000843565b62000108919062000859565b62000115906019620007fc565b6021553480156200012557600080fd5b504660011462000153576040518060400160405280600581526020016416951154d560da1b81525062000174565b60405180604001604052806007815260200166168b50dd58995960ca1b8152505b46600114620001a1576040518060400160405280600581526020016416951154d560da1b815250620001bd565b604051806040016040528060028152602001615a3360f01b8152505b60126000620001cd848262000915565b506001620001dc838262000915565b506002805460ff929092166001600160a81b031990921691909117610100330217905550600090508046600103620002415750737a250d5630b4cf539739df2c5dacb4c659f2488d905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4862000305565b466005036200027d5750737a250d5630b4cf539739df2c5dacb4c659f2488d9050732f3a40a3db8a7e3d09b0adfefbce4f6f8192755762000305565b46606103620002b9575073d99d1c33f9fc3444f8101754abc46c52416550d190507378867bbeef44f2326bf8ddd1941a4439382ef2a762000305565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b601280546001600160a01b03199081167377b2ae7647afaa8eef08572cf7b77803c5ae95d71790915560138054909116734f013300a0dce6193388cd057108eecb9e1054ac1790556005546200035c9042620006d4565b600655601480546001600160a01b0319166001600160a01b038381169190911790915582166080526040516200039290620006b0565b604051809103906000f080158015620003af573d6000803e3d6000fd5b50601680546001600160a01b0319166001600160a01b039283161790553060008181526023602081815260408084206080519096168085528683528185206000199081905533865293835281852090855282528084208390559383529390935220556200041f6012600a620007e7565b6200042e9062200b20620007fc565b601f556064620004416012600a620007e7565b620004509062200b20620007fc565b6200045e906000196200082c565b6200046c9060001962000843565b62000478919062000859565b6200048590605f620007fc565b336000908152602260205260409020819055620004a56012600a620007e7565b620004b49062200b20620007fc565b620004c2906000196200082c565b620004d09060001962000843565b620004dc919062000843565b6013546001600160a01b03166000908152602260205260408120805490919062000508908490620006d4565b9091555050601f546200051e6012600a620007e7565b6200052d9062200b20620007fc565b6200053b906000196200082c565b620005499060001962000843565b62000555919062000859565b602055601f546103e8906200056c906005620007fc565b62000578919062000859565b600b55601f546064906200058e906001620007fc565b6200059a919062000859565b600c55306000908152600d60205260408082208054600160ff1991821681179092553380855283852080548316841790556001600160a01b0387168552928420805482168317905561dead84527fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80549091169091179055906000805160206200388c8339815191526200062e8362000681565b60405190815260200160405180910390a36013546001600160a01b031660006000805160206200388c833981519152620006688362000681565b60405190815260200160405180910390a35050620009e1565b602080546001600160a01b038316600090815260229092526040822054620006aa919062000859565b92915050565b610445806200344783390190565b634e487b7160e01b600052601160045260246000fd5b80820180821115620006aa57620006aa620006be565b600181815b808511156200072b5781600019048211156200070f576200070f620006be565b808516156200071d57918102915b93841c9390800290620006ef565b509250929050565b6000826200074457506001620006aa565b816200075357506000620006aa565b81600181146200076c5760028114620007775762000797565b6001915050620006aa565b60ff8411156200078b576200078b620006be565b50506001821b620006aa565b5060208310610133831016604e8410600b8410161715620007bc575081810a620006aa565b620007c88383620006ea565b8060001904821115620007df57620007df620006be565b029392505050565b6000620007f5838362000733565b9392505050565b8082028115828204841417620006aa57620006aa620006be565b634e487b7160e01b600052601260045260246000fd5b6000826200083e576200083e62000816565b500690565b81810381811115620006aa57620006aa620006be565b6000826200086b576200086b62000816565b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200089b57607f821691505b602082108103620008bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200091057600081815260208120601f850160051c81016020861015620008eb5750805b601f850160051c820191505b818110156200090c57828155600101620008f7565b5050505b505050565b81516001600160401b0381111562000931576200093162000870565b620009498162000942845462000886565b84620008c2565b602080601f831160018114620009815760008415620009685750858301515b600019600386901b1c1916600185901b1785556200090c565b600085815260208120601f198616915b82811015620009b25788860151825594840194600190910190840162000991565b5085821015620009d15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a3562000a126000396000818161076301528181610b0d01528181611bf801526122ae0152612a356000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600481565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe61a8c081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f000000000000000000000000000000000000000000000000000000000000000081565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556004101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c906301406f406127ce565b601f5411156121a3576121916012600a61296e565b61219f906301406f406127ce565b601f555b601f546121b26012600a61296e565b6121bf9062200b206127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000000000000000000000000000000000000000000000831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205181dec438a95fdb5cfc0e0b16f72710eb6037f29c1e9387bdd12a1c5dd96ebf64736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610413806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461034f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461034f565b6102b3565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca9061037f565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e91906103a2565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd91906103a2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906103bb565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca9061037f565b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146102dd5760405162461bcd60e51b81526004016100ca9061037f565b61023e816001600160a01b0381166102f457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561036157600080fd5b81356001600160a01b038116811461037857600080fd5b9392505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156103b457600080fd5b5051919050565b6000602082840312156103cd57600080fd5b8151801515811461037857600080fdfea26469706673582212203b45a3dc8593524cc755a16d978333f719bb1b12e09687c2ee5a4f0d0a9f3b5564736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600481565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe61a8c081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556004101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c906301406f406127ce565b601f5411156121a3576121916012600a61296e565b61219f906301406f406127ce565b601f555b601f546121b26012600a61296e565b6121bf9062200b206127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205181dec438a95fdb5cfc0e0b16f72710eb6037f29c1e9387bdd12a1c5dd96ebf64736f6c63430008110033

Deployed Bytecode Sourcemap

10213:17000:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1196:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23292:218;;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;23292:218:0;1023:187:1;10343:44:0;;;;;;;;;1361:25:1;;;1349:2;1334:18;10343:44:0;1215:177:1;12475:35:0;;;;;;15200:102;15282:12;;15200:102;;12024:32;;;;;-1:-1:-1;;;;;12024:32:0;;;;;;-1:-1:-1;;;;;1581:32:1;;;1563:51;;1551:2;1536:18;12024:32:0;1397:223:1;12401:67:0;;;;;;19761:454;;;;;;:::i;:::-;;:::i;10684:40::-;;;;;;1382:83;1448:9;;1382:83;;1448:9;;;;2228:36:1;;2216:2;2201:18;1382:83:0;2086:184:1;22909:375:0;;;;;;:::i;:::-;;:::i;11920:26::-;;;;;-1:-1:-1;;;;;11920:26:0;;;17084:412;;;;;;:::i;:::-;;:::i;:::-;;12523:33;;;;;;;;;23518:144;;;:::i;24560:149::-;;;:::i;15863:106::-;15932:10;;15946:15;-1:-1:-1;15932:29:0;15863:106;;20231:1266;;;:::i;12326:31::-;;;;;;15732:123;;;:::i;10304:30::-;;;;;-1:-1:-1;;;10304:30:0;;;;;;15470:133;;;;;;:::i;:::-;;:::i;2777:126::-;;;:::i;16881:115::-;;;:::i;16482:166::-;;;:::i;10461:43::-;;;;;;25460:242;;;:::i;2588:79::-;2653:6;;;;;-1:-1:-1;;;;;2653:6:0;2588:79;;25869:180;;;;;;:::i;:::-;;:::i;10577:29::-;;;;;;;;;10998:40;;11037:1;10998:40;;1287:87;;;:::i;12288:31::-;;;;;;24721:731;;;;;;:::i;:::-;;:::i;27022:188::-;;;;;;:::i;:::-;;:::i;11045:52::-;;11092:5;11045:52;;22332:569;;;;;;:::i;:::-;;:::i;26057:304::-;;;;;;:::i;:::-;;:::i;11845:31::-;;;;;-1:-1:-1;;;;;11845:31:0;;;11996:19;;;;;-1:-1:-1;;;;;11996:19:0;;;16656:173;;;;;;:::i;:::-;;:::i;10748:28::-;;;;;;10931:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10264:33;;;;;-1:-1:-1;;;10264:33:0;;;;;;10545:25;;;;;;11883:30;;;;;-1:-1:-1;;;;;11883:30:0;;;12240:39;;;;;;;;;12364:30;;;;;;26369:355;;;;;;:::i;:::-;;:::i;10785:27::-;;;;;;10615:51;;;;;;15611:113;;;;;;:::i;:::-;-1:-1:-1;;;;;15697:19:0;15673:4;15697:19;;;:12;:19;;;;;;;;;15611:113;10896:28;;;;;;:::i;:::-;;:::i;10394:58::-;;;;;;15310:152;;;;;;:::i;:::-;-1:-1:-1;;;;;15420:25:0;;;15394:7;15420:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;15310:152;25763:98;;;:::i;2911:109::-;;;;;;:::i;:::-;;:::i;11955:34::-;;;;;26732:282;;;;;;:::i;:::-;;:::i;10819:24::-;;;;;;1196:83;1233:13;1266:5;1259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1196:83;:::o;23292:218::-;23400:10;23366:4;23382:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23382:38:0;;;;;;;;;;:46;;;23444:36;23366:4;;23382:38;;23444:36;;;;23423:5;1361:25:1;;1349:2;1334:18;;1215:177;23444:36:0;;;;;;;;-1:-1:-1;23498:4:0;23292:218;;;;;:::o;19761:454::-;19871:4;19858:2;-1:-1:-1;;;;;13022:18:0;;13014:27;;;;;;-1:-1:-1;;;;;19892:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19916:10:::1;19892:35:::0;;;;;;;;-1:-1:-1;;19892:50:0::1;19888:257;;-1:-1:-1::0;;;;;19967:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19991:10:::1;19967:35:::0;;;;;;;;:44;-1:-1:-1;19967:44:0::1;19959:78;;;::::0;-1:-1:-1;;;19959:78:0;;5418:2:1;19959:78:0::1;::::0;::::1;5400:21:1::0;5457:2;5437:18;;;5430:30;-1:-1:-1;;;5476:18:1;;;5469:52;5538:18;;19959:78:0::1;;;;;;;;;-1:-1:-1::0;;;;;20090:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20114:10:::1;20090:35:::0;;;;;;;;:43:::1;::::0;20127:5;;20090:43:::1;:::i;:::-;-1:-1:-1::0;;;;;20052:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20076:10:::1;20052:35:::0;;;;;;;:81;19888:257:::1;20155:30;20169:4;20175:2;20179:5;20155:13;:30::i;:::-;-1:-1:-1::0;20203:4:0::1;::::0;19761:454;-1:-1:-1;;;;;19761:454:0:o;22909:375::-;23066:10;22991:4;23048:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23048:58:0;;;;;;;;;;:71;;23108:10;;23048:71;:::i;:::-;23025:10;23007:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23007:38:0;;;;;;;;;;;;:112;;;23135:119;1361:25:1;;;23007:38:0;;23135:119;;1334:18:1;23135:119:0;1215:177:1;17084:412:0;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17160:22:0;::::1;17152:47;;;::::0;-1:-1:-1;;;17152:47:0;;6501:2:1;17152:47:0::1;::::0;::::1;6483:21:1::0;6540:2;6520:18;;;6513:30;-1:-1:-1;;;6559:18:1;;;6552:42;6611:18;;17152:47:0::1;6299:336:1::0;17152:47:0::1;17219:13;::::0;-1:-1:-1;;;17219:13:0;::::1;;;17218:14;17210:49;;;::::0;-1:-1:-1;;;17210:49:0;;6842:2:1;17210:49:0::1;::::0;::::1;6824:21:1::0;6881:2;6861:18;;;6854:30;-1:-1:-1;;;6900:18:1;;;6893:52;6962:18;;17210:49:0::1;6640:346:1::0;17210:49:0::1;17289:6;-1:-1:-1::0;;;;;17289:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17277:65;::::0;-1:-1:-1;;;17277:65:0;;17326:4:::1;17277:65;::::0;::::1;7459:34:1::0;-1:-1:-1;;;;;7529:15:1;;;7509:18;;;7502:43;17277:40:0;;;::::1;::::0;::::1;::::0;7394:18:1;;17277:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17270:4;:72:::0;;-1:-1:-1;;;;;;17270:72:0::1;-1:-1:-1::0;;;;;17270:72:0;;::::1;::::0;;::::1;::::0;;17379:4:::1;-1:-1:-1::0;17353:32:0;;;:17:::1;:32;::::0;;;;;;;:38;;;;;;;-1:-1:-1;;17353:52:0;;17444:4;17416:39:::1;::::0;17444:4:::1;-1:-1:-1::0;17416:27:0::1;:39::i;:::-;17466:11;:22:::0;;-1:-1:-1;;;;;;17466:22:0::1;-1:-1:-1::0;;;;;17466:22:0;;;::::1;::::0;;;::::1;::::0;;17084:412::o;23518:144::-;23579:7;23632:22;;23619:11;;23606:12;;:24;;;;:::i;:::-;23605:49;;;;:::i;:::-;23598:56;;23518:144;:::o;24560:149::-;24613:6;;;;;;;24612:7;24604:29;;;;-1:-1:-1;;;24604:29:0;;8188:2:1;24604:29:0;;;8170:21:1;8227:1;8207:18;;;8200:29;-1:-1:-1;;;8245:18:1;;;8238:39;8294:18;;24604:29:0;7986:332:1;24604:29:0;15932:10;;15946:15;-1:-1:-1;15932:29:0;24644:38;;;;-1:-1:-1;;;24644:38:0;;8525:2:1;24644:38:0;;;8507:21:1;8564:2;8544:18;;;8537:30;-1:-1:-1;;;8583:18:1;;;8576:41;8634:18;;24644:38:0;8323:335:1;24644:38:0;24693:8;:6;:8::i;:::-;;24560:149::o;20231:1266::-;20271:23;20297:24;20315:4;20297:9;:24::i;:::-;20271:50;;20373:16;;20355;;:35;;;;:::i;:::-;:40;;20393:2;20355:40;:::i;:::-;20337:15;:58;20334:147;;;20447:16;;20429;;:35;;;;:::i;:::-;:40;;20467:2;20429:40;:::i;:::-;20411:58;;20334:147;20493:26;20555:8;;20540:12;;20522:15;:30;;;;:::i;:::-;:41;;;;:::i;:::-;20493:70;;20600:1;20579:18;:22;:63;;;;;20624:18;20605:15;:37;;20579:63;20576:264;;;20687:4;;20658:54;;20680:4;;-1:-1:-1;;;;;20687:4:0;20693:18;20658:13;:54::i;:::-;;20727:12;:10;:12::i;:::-;20754:37;20773:18;20754:37;;:::i;:::-;;;20827:1;20806:22;;20576:264;20860:41;20885:15;20860:24;:41::i;:::-;20914:12;;20952:11;;20914:51;;-1:-1:-1;;;20914:51:0;;-1:-1:-1;;;;;20952:11:0;;;20914:51;;;1563::1;20914:12:0;;;:29;;1536:18:1;;20914:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21022:11:0;;21015:44;;-1:-1:-1;;;21015:44:0;;21053:4;21015:44;;;1563:51:1;20986:26:0;;-1:-1:-1;;;;;;21022:11:0;;;;-1:-1:-1;21015:29:0;;1536:18:1;;21015:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20986:73;;21072:30;21155:12;;21141:11;;:26;;;;:::i;:::-;21126:11;;21105:32;;:18;:32;:::i;:::-;:63;;;;:::i;:::-;21072:96;-1:-1:-1;21184:26:0;;21181:126;;21233:11;;21255:15;;21226:69;;-1:-1:-1;;;21226:69:0;;-1:-1:-1;;;;;21255:15:0;;;21226:69;;;9026:51:1;9093:18;;;9086:34;;;21233:11:0;;;21226:28;;8999:18:1;;21226:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21181:126;21329:11;;21322:44;;-1:-1:-1;;;21322:44:0;;21360:4;21322:44;;;1563:51:1;21369:1:0;;-1:-1:-1;;;;;21329:11:0;;21322:29;;1536:18:1;;21322:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;21319:171;;;21393:11;;21415:16;;21433:44;;-1:-1:-1;;;21433:44:0;;21471:4;21433:44;;;1563:51:1;-1:-1:-1;;;;;21393:11:0;;;;21386:28;;21415:16;;21393:11;;21433:29;;1536:18:1;;21433:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21386:92;;-1:-1:-1;;;;;;21386:92:0;;;;;;;-1:-1:-1;;;;;9044:32:1;;;21386:92:0;;;9026:51:1;9093:18;;;9086:34;8999:18;;21386:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21319:171;20258:1239;;;;20231:1266::o;15732:123::-;15785:7;15830:16;;15812;;:35;;;;:::i;15470:133::-;15578:16;;;-1:-1:-1;;;;;15559:17:0;;15532:7;15559:17;;;:12;:17;;;;;;;:36;;15578:16;15559:36;:::i;2777:126::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;2858:6:::1;::::0;2839:26:::1;::::0;2858:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;2858:6:0::1;::::0;2839:26:::1;::::0;;;::::1;2876:6;:19:::0;;-1:-1:-1;;;;;;2876:19:0::1;::::0;;2777:126::o;16881:115::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;16935:14:::1;:22:::0;;-1:-1:-1;;16935:22:0::1;::::0;;16973:15:::1;::::0;::::1;::::0;16952:5:::1;::::0;16973:15:::1;16881:115::o:0;16482:166::-;16526:6;16522:119;16542:11;:18;16538:22;;16522:119;;;16597:11;16609:1;16597:14;;;;;;;;:::i;:::-;;;;;;;;;;16585:34;;;-1:-1:-1;;;;;;16585:34:0;;;;-1:-1:-1;;;;;16597:14:0;;;;16585:32;;:34;;;;;;;;;;16597:14;;16585:34;;;;;;;;;;;;;;;;;;;;;;;;;16581:49;16562:3;;;;:::i;:::-;;;;16522:119;;25460:242;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;25524:13:::1;::::0;-1:-1:-1;;;25524:13:0;::::1;;;25523:14;25515:49;;;::::0;-1:-1:-1;;;25515:49:0;;9855:2:1;25515:49:0::1;::::0;::::1;9837:21:1::0;9894:2;9874:18;;;9867:30;-1:-1:-1;;;9913:18:1;;;9906:52;9975:18;;25515:49:0::1;9653:346:1::0;25515:49:0::1;25575:13;:20:::0;;-1:-1:-1;;;;25575:20:0::1;-1:-1:-1::0;;;25575:20:0::1;::::0;;25637:15:::1;::::0;25619:33:::1;::::0;:15:::1;:33;:::i;:::-;25606:10;:46:::0;25679:15:::1;25663:13;:31:::0;25460:242::o;25869:180::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25957:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;:29;::::1;;:19;::::0;;::::1;:29;;::::0;25949:53:::1;;;::::0;-1:-1:-1;;;25949:53:0;;10206:2:1;25949:53:0::1;::::0;::::1;10188:21:1::0;10245:2;10225:18;;;10218:30;-1:-1:-1;;;10264:18:1;;;10257:41;10315:18;;25949:53:0::1;10004:335:1::0;25949:53:0::1;-1:-1:-1::0;;;;;26013:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;26013:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25869:180::o;1287:87::-;1326:13;1359:7;1352:14;;;;;:::i;24721:731::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24822:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;:42;::::1;;:32;::::0;;::::1;:42;;::::0;24814:72:::1;;;::::0;-1:-1:-1;;;24814:72:0;;10546:2:1;24814:72:0::1;::::0;::::1;10528:21:1::0;10585:2;10565:18;;;10558:30;-1:-1:-1;;;10604:18:1;;;10597:47;10661:18;;24814:72:0::1;10344:341:1::0;24814:72:0::1;-1:-1:-1::0;;;;;24899:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;24899:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24953:432:::1;;24978:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24978:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24978:23:0::1;-1:-1:-1::0;;;;;24978:23:0;::::1;;::::0;;24953:432:::1;;;25042:11;:18:::0;25063:1:::1;-1:-1:-1::0;25034:50:0::1;;;::::0;-1:-1:-1;;;25034:50:0;;10892:2:1;25034:50:0::1;::::0;::::1;10874:21:1::0;10931:2;10911:18;;;10904:30;-1:-1:-1;;;10950:18:1;;;10943:45;11005:18;;25034:50:0::1;10690:339:1::0;25034:50:0::1;25104:9;25099:275;25123:11;:18:::0;25119:22;::::1;25099:275;;;25189:5;-1:-1:-1::0;;;;;25171:23:0::1;:11;25183:1;25171:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25171:14:0::1;:23:::0;25167:192:::1;;25236:11;25248:18:::0;;:22:::1;::::0;25269:1:::1;::::0;25248:22:::1;:::i;:::-;25236:35;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25219:11:::1;:14:::0;;-1:-1:-1;;;;;25236:35:0;;::::1;::::0;25231:1;;25219:14;::::1;;;;;:::i;:::-;;;;;;;;;:52;;;;;-1:-1:-1::0;;;;;25219:52:0::1;;;;;-1:-1:-1::0;;;;;25219:52:0::1;;;;;;25294:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25294:17:0;;;;;-1:-1:-1;;;;;;25294:17:0::1;::::0;;;;;25334:5:::1;;25167:192;25143:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25099:275;;;;24953:432;25402:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;25402:42:0;::::1;::::0;::::1;::::0;;;::::1;24721:731:::0;;:::o;27022:188::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;27118:15:::1;27104:11;:29;27096:71;;;::::0;-1:-1:-1;;;27096:71:0;;11368:2:1;27096:71:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;11446:31;11426:18;;;11419:59;11495:18;;27096:71:0::1;11166:353:1::0;27096:71:0::1;27178:10;:24:::0;27022:188::o;22332:569::-;22472:10;22419:4;22454:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22454:38:0;;;;;;;;;;22507:27;;;22503:234;;22569:10;22592:1;22551:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22551:38:0;;;;;;;;;:42;22503:234;;;22667:58;22695:15;22667:8;:58;:::i;:::-;22644:10;22626:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22626:38:0;;;;;;;;;:99;22503:234;22775:10;22822:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22752:119:0;;22822:38;;;;;;;;;;;22752:119;;1361:25:1;;;22752:119:0;;22775:10;22752:119;;1334:18:1;22752:119:0;;;;;;;-1:-1:-1;22889:4:0;;22332:569;-1:-1:-1;;;22332:569:0:o;26057:304::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26175:32:0;::::1;::::0;;::::1;::::0;:67:::1;;-1:-1:-1::0;;;;;;26211:31:0;::::1;::::0;::::1;26175:67;26167:92;;;::::0;-1:-1:-1;;;26167:92:0;;11726:2:1;26167:92:0::1;::::0;::::1;11708:21:1::0;11765:2;11745:18;;;11738:30;-1:-1:-1;;;11784:18:1;;;11777:42;11836:18;;26167:92:0::1;11524:336:1::0;26167:92:0::1;26270:15;:35:::0;;-1:-1:-1;;;;;26270:35:0;;::::1;-1:-1:-1::0;;;;;;26270:35:0;;::::1;;::::0;;;26316:16:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;26057:304::o;16656:173::-;16747:4;16734:2;-1:-1:-1;;;;;13022:18:0;;13014:27;;;;;;16763:36:::1;16777:10;16789:2;16793:5;16763:13;:36::i;:::-;-1:-1:-1::0;16817:4:0::1;::::0;16656:173;-1:-1:-1;;;;16656:173:0:o;26369:355::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;26484:12:::1;:28:::0;;;26523:12:::1;:28:::0;;;26562:11:::1;:26:::0;;;26576:12;26610:27:::1;26538:13:::0;26499;26610:27:::1;:::i;:::-;:41;;;;:::i;:::-;26599:8;:52:::0;;;11037:1:::1;-1:-1:-1::0;26670:24:0::1;26662:54;;;::::0;-1:-1:-1;;;26662:54:0;;12067:2:1;26662:54:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;-1:-1:-1;;;12125:18:1;;;12118:47;12182:18;;26662:54:0::1;11865:341:1::0;26662:54:0::1;26369:355:::0;;;:::o;10896:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10896:28:0;;-1:-1:-1;10896:28:0;:::o;25763:98::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;25825:20:::1;:28:::0;;-1:-1:-1;;25825:28:0::1;::::0;;25763:98::o;2911:109::-;2729:6;;;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;2984:28:::1;3003:8;2984:18;:28::i;26732:282::-:0;2729:6;;26840:12;;2729:6;;;-1:-1:-1;;;;;2729:6:0;2715:10;:20;2707:42;;;;-1:-1:-1;;;2707:42:0;;;;;;;:::i;:::-;26896:4:::1;-1:-1:-1::0;;;;;26872:29:0;::::1;::::0;26864:67:::1;;;::::0;-1:-1:-1;;;26864:67:0;;12413:2:1;26864:67:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:27;12471:18;;;12464:55;12536:18;;26864:67:0::1;12211:349:1::0;26864:67:0::1;26949:57;::::0;-1:-1:-1;;;26949:57:0;;-1:-1:-1;;;;;9044:32:1;;;26949:57:0::1;::::0;::::1;9026:51:1::0;9093:18;;;9086:34;;;26949:36:0;::::1;::::0;::::1;::::0;8999:18:1;;26949:57:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26942:64:::0;26732:282;-1:-1:-1;;;;26732:282:0:o;17504:2249::-;17619:13;;17596:4;;-1:-1:-1;;;17619:13:0;;;;17615:122;;-1:-1:-1;;;;;17656:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;17680:23:0;;;;;;:12;:23;;;;;;;;17656:47;17648:77;;;;-1:-1:-1;;;17648:77:0;;12767:2:1;17648:77:0;;;12749:21:1;12806:2;12786:18;;;12779:30;-1:-1:-1;;;12825:18:1;;;12818:47;12882:18;;17648:77:0;12565:341:1;17648:77:0;17752:14;;;;17749:1172;;;-1:-1:-1;;;;;17787:20:0;;;;;;:12;:20;;;;;;;;17786:21;:49;;;;-1:-1:-1;;;;;;17812:23:0;;;;;;:12;:23;;;;;;;;17811:24;17786:49;17782:1128;;;17995:20;;;;17991:524;;;18064:6;-1:-1:-1;;;;;18043:28:0;:9;-1:-1:-1;;;;;18043:28:0;;;:69;;;;-1:-1:-1;;;;;;18076:36:0;;;;;;:25;:36;;;;;;;;18075:37;18043:69;18039:457;;;18173:9;18148:35;;;;:24;:35;;;;;;18190:12;;18148:39;;18186:1;18148:39;:::i;:::-;:54;:112;;;;-1:-1:-1;;;;;;18206:35:0;;;;;;:24;:35;;;;;;18248:12;;18206:39;;18244:1;18206:39;:::i;:::-;:54;18148:112;18140:178;;;;-1:-1:-1;;;18140:178:0;;13113:2:1;18140:178:0;;;13095:21:1;13152:2;13132:18;;;13125:30;13191:34;13171:18;;;13164:62;-1:-1:-1;;;13242:18:1;;;13235:51;13303:19;;18140:178:0;12911:417:1;18140:178:0;18370:9;18345:35;;;;:24;:35;;;;;;18383:12;18345:50;;;;-1:-1:-1;;;;;18422:35:0;;;;;;:50;18039:457;-1:-1:-1;;;;;18565:33:0;;;;;;:25;:33;;;;;;;;18561:157;;;18641:12;;18631:6;:22;;18623:75;;;;-1:-1:-1;;;18623:75:0;;13535:2:1;18623:75:0;;;13517:21:1;13574:2;13554:18;;;13547:30;13613:34;13593:18;;;13586:62;-1:-1:-1;;;13664:18:1;;;13657:38;13712:19;;18623:75:0;13333:404:1;18623:75:0;-1:-1:-1;;;;;18741:36:0;;;;;;:25;:36;;;;;;;;18736:159;;18842:9;;18832:6;18809:20;18819:9;18809;:20::i;:::-;:29;;;;:::i;:::-;:42;;18801:74;;;;-1:-1:-1;;;18801:74:0;;13944:2:1;18801:74:0;;;13926:21:1;13983:2;13963:18;;;13956:30;-1:-1:-1;;;14002:18:1;;;13995:49;14061:18;;18801:74:0;13742:343:1;18801:74:0;-1:-1:-1;;;;;18937:20:0;;;;;;:12;:20;;;;;;;;18936:21;:49;;;;-1:-1:-1;;;;;;18962:23:0;;;;;;:12;:23;;;;;;;;18961:24;18936:49;:69;;;;;18989:16;:14;:16::i;:::-;18936:107;;;;-1:-1:-1;;;;;;19010:33:0;;;;;;:25;:33;;;;;;;;19009:34;18936:107;18933:205;;;19059:6;:13;;-1:-1:-1;;19059:13:0;;;;;19087:10;:8;:10::i;:::-;19112:6;:14;;-1:-1:-1;;19112:14:0;;;18933:205;19153:10;;;;:48;;;;-1:-1:-1;;;;;;19168:33:0;;;;;;:25;:33;;;;;;;;19167:34;19153:48;:59;;;;-1:-1:-1;19206:6:0;;;;;;;19205:7;19153:59;:77;;;;-1:-1:-1;15932:10:0;;15946:15;-1:-1:-1;15932:29:0;19216:14;19153:105;;;;-1:-1:-1;;;;;;19235:23:0;;;;;;:12;:23;;;;;;;;19234:24;19153:105;:130;;;;-1:-1:-1;;;;;;19263:20:0;;;;;;:12;:20;;;;;;;;19262:21;19153:130;19150:169;;;19299:8;:6;:8::i;:::-;;19150:169;19331:17;19359:16;;19351:6;:25;;;;:::i;:::-;-1:-1:-1;;;;;19412:20:0;;;;;;:12;:20;;;;;;19331:45;;-1:-1:-1;19412:32:0;;19331:45;;19412:32;:::i;:::-;-1:-1:-1;;;;;19389:20:0;;;;;;:12;:20;;;;;:55;;;;19485:32;19402:6;19507:9;19485:13;:32::i;:::-;:73;;19549:9;19485:73;;;19520:26;19528:6;19536:9;19520:7;:26::i;:::-;-1:-1:-1;;;;;19595:23:0;;;;;;:12;:23;;;;;;19457:101;;-1:-1:-1;19595:43:0;;19457:101;;19595:43;:::i;:::-;-1:-1:-1;;;;;19569:23:0;;;;;;;:12;:23;;;;;;;;:69;;;;19703:16;;19656:65;;;;;;19684:36;;:17;:36;:::i;:::-;19656:65;;1361:25:1;;;1349:2;1334:18;19656:65:0;;;;;;;-1:-1:-1;19741:4:0;;17504:2249;-1:-1:-1;;;;;17504:2249:0:o;23670:882::-;23788:26;;23772:13;;23705:7;;23741:15;;;;23772:42;;;:::i;:::-;:61;23769:193;;23902:2;23878:21;;23864:11;;:35;;;;:::i;:::-;:40;;;;:::i;:::-;23849:11;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;23935:15:0;23919:13;:31;23769:193;23974:19;24023:22;;24010:11;;23997:12;;:24;;;;:::i;:::-;23996:49;;;;:::i;:::-;23974:71;;24092:15;;24079:10;;:28;;;;:::i;:::-;24066:10;:41;24139:1;24124:16;;;24120:118;;24172:5;24162:30;24179:12;;24162:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;24162:30:0;;;;;;;;24214:12;;24207:19;;;;23670:882;:::o;24120:118::-;24278:11;24265:12;;:24;;;;:::i;:::-;24250:12;:39;11516:12;11199:2;11516;:12;:::i;:::-;11503:25;;:10;:25;:::i;:::-;24306:12;;:25;24302:83;;;11516:12;11199:2;11516;:12;:::i;:::-;11503:25;;:10;:25;:::i;:::-;24348:12;:25;24302:83;24428:12;;11335;11199:2;11335;:12;:::i;:::-;11323:24;;:9;:24;:::i;:::-;11413:44;;-1:-1:-1;;11413:44:0;:::i;:::-;11392:66;;-1:-1:-1;;11392:66:0;:::i;:::-;24416:25;;;;:::i;:::-;24397:16;:44;24454:12;:10;:12::i;:::-;24494:5;24484:30;24501:12;;24484:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;21505:455:0;21603:16;;;21617:1;21603:16;;;;;;;;21579:21;;21603:16;;;;;;;;;;-1:-1:-1;21603:16:0;21579:40;;21648:4;21630;21635:1;21630:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21630:23:0;;;:7;;;;;;;;;:23;21682:11;;21664:7;;21682:11;;;21664:4;;21682:11;;21664:7;;;;;;:::i;:::-;-1:-1:-1;;;;;21664:30:0;;;:7;;;;;;;;;:30;21898:12;;21733:219;;-1:-1:-1;;;21733:219:0;;:6;:60;;;;;:219;;21808:11;;21834:1;;21871:4;;21898:12;;;21926:15;;21733:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21568:392;21505:455;:::o;3028:187::-;-1:-1:-1;;;;;3102:22:0;;3094:31;;;;;;3162:6;;3141:38;;-1:-1:-1;;;;;3141:38:0;;;;3162:6;;;;;3141:38;;;;;3190:6;:17;;-1:-1:-1;;;;;3190:17:0;;;;;-1:-1:-1;;;;;;3190:17:0;;;;;;;;;3028:187::o;16268:206::-;16351:6;;16317:4;;16351:6;;;;;16350:7;:31;;;;-1:-1:-1;16370:11:0;;-1:-1:-1;;;16370:11:0;;;;16350:31;:56;;;;;16405:1;16394:8;;:12;16350:56;:116;;;;-1:-1:-1;;16450:16:0;;16440:4;16419:27;;;;:12;:27;;;;;;:47;;;16268:206::o;15977:283::-;-1:-1:-1;;;;;16069:18:0;;16049:4;16069:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;16091:16:0;;;;;;:12;:16;;;;;;;;16069:38;16066:187;;;-1:-1:-1;16130:5:0;16123:12;;16066:187;-1:-1:-1;;;;;16176:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;16211:29:0;;;;;;:25;:29;;;;;;;;16176:64;16168:73;;;;21968:356;22038:7;22059:17;22101:14;;22090:8;;22079:9;:20;;;;:::i;:::-;:37;;;;:::i;:::-;22180:4;22159:27;;;;:12;:27;;;;;;22059:57;;-1:-1:-1;22159:39:0;;22059:57;;22159:39;:::i;:::-;22150:4;22129:27;;;;:12;:27;;;;;;;;:69;;;;22257:16;;-1:-1:-1;;;;;22214:61:0;;;;;22246:28;;:9;:28;:::i;:::-;22214:61;;1361:25:1;;;1349:2;1334:18;22214:61:0;;;;;;;22295:21;22306:9;22295;:21;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1625:456::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1625:456;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1625:456::o;2483:247::-;2542:6;2595:2;2583:9;2574:7;2570:23;2566:32;2563:52;;;2611:1;2608;2601:12;2563:52;2650:9;2637:23;2669:31;2694:5;2669:31;:::i;:::-;2719:5;2483:247;-1:-1:-1;;;2483:247:1:o;2735:118::-;2821:5;2814:13;2807:21;2800:5;2797:32;2787:60;;2843:1;2840;2833:12;2858:382;2923:6;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3039:9;3026:23;3058:31;3083:5;3058:31;:::i;:::-;3108:5;-1:-1:-1;3165:2:1;3150:18;;3137:32;3178:30;3137:32;3178:30;:::i;:::-;3227:7;3217:17;;;2858:382;;;;;:::o;3245:180::-;3304:6;3357:2;3345:9;3336:7;3332:23;3328:32;3325:52;;;3373:1;3370;3363:12;3325:52;-1:-1:-1;3396:23:1;;3245:180;-1:-1:-1;3245:180:1:o;3430:388::-;3498:6;3506;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;3614:9;3601:23;3633:31;3658:5;3633:31;:::i;:::-;3683:5;-1:-1:-1;3740:2:1;3725:18;;3712:32;3753:33;3712:32;3753:33;:::i;3823:316::-;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:52;;;3985:1;3982;3975:12;3937:52;-1:-1:-1;;4008:23:1;;;4078:2;4063:18;;4050:32;;-1:-1:-1;4129:2:1;4114:18;;;4101:32;;3823:316;-1:-1:-1;3823:316:1:o;4370:456::-;4447:6;4455;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4571:9;4558:23;4590:31;4615:5;4590:31;:::i;:::-;4640:5;-1:-1:-1;4692:2:1;4677:18;;4664:32;;-1:-1:-1;4748:2:1;4733:18;;4720:32;4761:33;4720:32;4761:33;:::i;:::-;4813:7;4803:17;;;4370:456;;;;;:::o;4831:380::-;4910:1;4906:12;;;;4953;;;4974:61;;5028:4;5020:6;5016:17;5006:27;;4974:61;5081:2;5073:6;5070:14;5050:18;5047:38;5044:161;;5127:10;5122:3;5118:20;5115:1;5108:31;5162:4;5159:1;5152:15;5190:4;5187:1;5180:15;5044:161;;4831:380;;;:::o;5567:127::-;5628:10;5623:3;5619:20;5616:1;5609:31;5659:4;5656:1;5649:15;5683:4;5680:1;5673:15;5699:128;5766:9;;;5787:11;;;5784:37;;;5801:18;;:::i;5832:125::-;5897:9;;;5918:10;;;5915:36;;;5931:18;;:::i;5962:332::-;6164:2;6146:21;;;6203:1;6183:18;;;6176:29;-1:-1:-1;;;6236:2:1;6221:18;;6214:39;6285:2;6270:18;;5962:332::o;6991:251::-;7061:6;7114:2;7102:9;7093:7;7089:23;7085:32;7082:52;;;7130:1;7127;7120:12;7082:52;7162:9;7156:16;7181:31;7206:5;7181:31;:::i;7556:168::-;7629:9;;;7660;;7677:15;;;7671:22;;7657:37;7647:71;;7698:18;;:::i;7729:127::-;7790:10;7785:3;7781:20;7778:1;7771:31;7821:4;7818:1;7811:15;7845:4;7842:1;7835:15;7861:120;7901:1;7927;7917:35;;7932:18;;:::i;:::-;-1:-1:-1;7966:9:1;;7861:120::o;8663:184::-;8733:6;8786:2;8774:9;8765:7;8761:23;8757:32;8754:52;;;8802:1;8799;8792:12;8754:52;-1:-1:-1;8825:16:1;;8663:184;-1:-1:-1;8663:184:1:o;9131:245::-;9198:6;9251:2;9239:9;9230:7;9226:23;9222:32;9219:52;;;9267:1;9264;9257:12;9219:52;9299:9;9293:16;9318:28;9340:5;9318:28;:::i;9381:127::-;9442:10;9437:3;9433:20;9430:1;9423:31;9473:4;9470:1;9463:15;9497:4;9494:1;9487:15;9513:135;9552:3;9573:17;;;9570:43;;9593:18;;:::i;:::-;-1:-1:-1;9640:1:1;9629:13;;9513:135::o;11034:127::-;11095:10;11090:3;11086:20;11083:1;11076:31;11126:4;11123:1;11116:15;11150:4;11147:1;11140:15;14090:422;14179:1;14222:5;14179:1;14236:270;14257:7;14247:8;14244:21;14236:270;;;14316:4;14312:1;14308:6;14304:17;14298:4;14295:27;14292:53;;;14325:18;;:::i;:::-;14375:7;14365:8;14361:22;14358:55;;;14395:16;;;;14358:55;14474:22;;;;14434:15;;;;14236:270;;;14240:3;14090:422;;;;;:::o;14517:806::-;14566:5;14596:8;14586:80;;-1:-1:-1;14637:1:1;14651:5;;14586:80;14685:4;14675:76;;-1:-1:-1;14722:1:1;14736:5;;14675:76;14767:4;14785:1;14780:59;;;;14853:1;14848:130;;;;14760:218;;14780:59;14810:1;14801:10;;14824:5;;;14848:130;14885:3;14875:8;14872:17;14869:43;;;14892:18;;:::i;:::-;-1:-1:-1;;14948:1:1;14934:16;;14963:5;;14760:218;;15062:2;15052:8;15049:16;15043:3;15037:4;15034:13;15030:36;15024:2;15014:8;15011:16;15006:2;15000:4;14997:12;14993:35;14990:77;14987:159;;;-1:-1:-1;15099:19:1;;;15131:5;;14987:159;15178:34;15203:8;15197:4;15178:34;:::i;:::-;15248:6;15244:1;15240:6;15236:19;15227:7;15224:32;15221:58;;;15259:18;;:::i;:::-;15297:20;;14517:806;-1:-1:-1;;;14517:806:1:o;15328:131::-;15388:5;15417:36;15444:8;15438:4;15417:36;:::i;15464:112::-;15496:1;15522;15512:35;;15527:18;;:::i;:::-;-1:-1:-1;15561:9:1;;15464:112::o;15713:980::-;15975:4;16023:3;16012:9;16008:19;16054:6;16043:9;16036:25;16080:2;16118:6;16113:2;16102:9;16098:18;16091:34;16161:3;16156:2;16145:9;16141:18;16134:31;16185:6;16220;16214:13;16251:6;16243;16236:22;16289:3;16278:9;16274:19;16267:26;;16328:2;16320:6;16316:15;16302:29;;16349:1;16359:195;16373:6;16370:1;16367:13;16359:195;;;16438:13;;-1:-1:-1;;;;;16434:39:1;16422:52;;16529:15;;;;16494:12;;;;16470:1;16388:9;16359:195;;;-1:-1:-1;;;;;;;16610:32:1;;;;16605:2;16590:18;;16583:60;-1:-1:-1;;;16674:3:1;16659:19;16652:35;16571:3;15713:980;-1:-1:-1;;;15713:980:1:o

Swarm Source

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