ETH Price: $2,565.78 (-4.45%)
Gas: 7 Gwei

Contract

0xC69fC0C371Ff884fC41aFEAA04Ab99cD55333EF2
 

Overview

ETH Balance

0.000004248019785782 ETH

Eth Value

$0.01 (@ $2,565.78/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve191492272024-02-03 17:10:35190 days ago1706980235IN
0xC69fC0C3...D55333EF2
0 ETH0.0010582822.75251827
Approve185146902023-11-06 18:21:47279 days ago1699294907IN
0xC69fC0C3...D55333EF2
0 ETH0.0017797238.26300392
Transfer185146782023-11-06 18:19:11279 days ago1699294751IN
0xC69fC0C3...D55333EF2
0 ETH0.0050958256.52916012
Approve185035402023-11-05 4:51:11281 days ago1699159871IN
0xC69fC0C3...D55333EF2
0 ETH0.000571512.27114012
Transfer185034592023-11-05 4:34:47281 days ago1699158887IN
0xC69fC0C3...D55333EF2
0 ETH0.0010193712.02810662
Approve184888052023-11-03 3:17:47283 days ago1698981467IN
0xC69fC0C3...D55333EF2
0 ETH0.0006832414.67047222
Approve183397972023-10-13 6:51:11304 days ago1697179871IN
0xC69fC0C3...D55333EF2
0 ETH0.000293186.3
Clear Stuck Toke...177059582023-07-16 12:50:23392 days ago1689511823IN
0xC69fC0C3...D55333EF2
0 ETH0.0006077216.27327004
Approve175996162023-07-01 13:51:47407 days ago1688219507IN
0xC69fC0C3...D55333EF2
0 ETH0.0009203219.7608763
Transfer From174150352023-06-05 14:54:59433 days ago1685976899IN
0xC69fC0C3...D55333EF2
0 ETH0.0064449169.38965888
Approve174150342023-06-05 14:54:47433 days ago1685976887IN
0xC69fC0C3...D55333EF2
0 ETH0.0024910153.48632984
Approve171860562023-05-04 8:15:47466 days ago1683188147IN
0xC69fC0C3...D55333EF2
0 ETH0.0028851961.95
Approve169449592023-03-31 4:58:47500 days ago1680238727IN
0xC69fC0C3...D55333EF2
0 ETH0.0009344820.2317681
Approve169291992023-03-28 23:50:11502 days ago1680047411IN
0xC69fC0C3...D55333EF2
0 ETH0.000579323.90967556
Approve169291662023-03-28 23:43:23502 days ago1680047003IN
0xC69fC0C3...D55333EF2
0 ETH0.0012527627.12265551
Approve168452362023-03-17 4:43:47514 days ago1679028227IN
0xC69fC0C3...D55333EF2
0 ETH0.0004123316.97636267
Approve162441642022-12-23 1:34:59598 days ago1671759299IN
0xC69fC0C3...D55333EF2
0 ETH0.0003142412.93786574
Approve162441622022-12-23 1:34:35598 days ago1671759275IN
0xC69fC0C3...D55333EF2
0 ETH0.0002954612.16453132
Approve160852042022-11-30 20:32:11620 days ago1669840331IN
0xC69fC0C3...D55333EF2
0 ETH0.0006345313.62458442
Approve156176752022-09-26 12:53:59685 days ago1664196839IN
0xC69fC0C3...D55333EF2
0 ETH0.000385058.26788022
Approve155843742022-09-21 21:18:59690 days ago1663795139IN
0xC69fC0C3...D55333EF2
0 ETH0.000846934.8676508
Approve155197252022-09-12 7:43:54700 days ago1662968634IN
0xC69fC0C3...D55333EF2
0 ETH0.000279436
Approve154519332022-09-01 8:52:16711 days ago1662022336IN
0xC69fC0C3...D55333EF2
0 ETH0.0004982910.69928173
Approve153996982022-08-24 0:08:44719 days ago1661299724IN
0xC69fC0C3...D55333EF2
0 ETH0.000287836.18039965
Approve153996972022-08-24 0:08:26719 days ago1661299706IN
0xC69fC0C3...D55333EF2
0 ETH0.000278715.98438756
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.00000424 ETH
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.00110226 ETH
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.00881811 ETH
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.00220452 ETH
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.00661358 ETH
169449622023-03-31 4:59:23500 days ago1680238763
0xC69fC0C3...D55333EF2
0.01873378 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.00000471 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.00114313 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.00914506 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.00228626 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.0068588 ETH
151130582022-07-10 5:41:45764 days ago1657431705
0xC69fC0C3...D55333EF2
0.01942544 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.00000782 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.00135563 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.01084505 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.00271126 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.00813379 ETH
151099352022-07-09 18:12:18764 days ago1657390338
0xC69fC0C3...D55333EF2
0.0230123 ETH
151089072022-07-09 14:24:46764 days ago1657376686
0xC69fC0C3...D55333EF2
0.00271126 ETH
151089072022-07-09 14:24:46764 days ago1657376686
0xC69fC0C3...D55333EF2
0.00813379 ETH
151089072022-07-09 14:24:46764 days ago1657376686
0xC69fC0C3...D55333EF2
0.0230123 ETH
150295052022-06-26 14:49:06777 days ago1656254946
0xC69fC0C3...D55333EF2
0.00003344 ETH
150295052022-06-26 14:49:06777 days ago1656254946
0xC69fC0C3...D55333EF2
0.00349404 ETH
150295052022-06-26 14:49:06777 days ago1656254946
0xC69fC0C3...D55333EF2
0.02795236 ETH
150295052022-06-26 14:49:06777 days ago1656254946
0xC69fC0C3...D55333EF2
0.00698809 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SPACEFI

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-01
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.12;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface BEP20 {
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

    event Authorize_Wallet(address Wallet, bool Status);

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) external onlyOwner {
        authorizations[adr] = true;
        emit Authorize_Wallet(adr,true);
    }

    function unauthorize(address adr) external onlyOwner {
        require(adr != owner, "OWNER cant be unauthorized");
        authorizations[adr] = false;
        emit Authorize_Wallet(adr,false);
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) external onlyOwner {
        require(adr != owner, "Already the owner");
        require(adr != address(0), "Can not be zero address.");
        potentialOwner = adr;
        emit OwnershipNominated(adr);
    }

    function acceptOwnership() external {
        require(msg.sender == potentialOwner, "You must be nominated as potential owner before you can accept the role.");
        authorizations[owner] = false;
        authorizations[potentialOwner] = true;

        emit Authorize_Wallet(owner,false);
        emit Authorize_Wallet(potentialOwner,true);

        owner = potentialOwner;
        potentialOwner = address(0);
        emit OwnershipTransferred(owner);
    }

    event OwnershipTransferred(address owner);
    event OwnershipNominated(address potentialOwner);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

contract SPACEFI is BEP20, Auth {
    using SafeMath for uint256;

    address immutable WETH;
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string public constant name = "SpaceFi";
    string public constant symbol = "SPF";
    uint8 public constant decimals = 4;

    uint256 public constant totalSupply = 10 * 10**9 * 10**decimals;

    uint256 public _maxTxAmount = totalSupply / 100;
    uint256 public _maxWalletToken = totalSupply / 100;

    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) _allowances;

    bool public whitelistMode = true;
    mapping (address => bool) public isWhitelisted;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isWalletLimitExempt;

    uint256 public liquidityFee = 10;
    uint256 public marketingFee = 30;
    uint256 public teamFee = 10;
    uint256 public pipdFee = 40;
    uint256 public utilityFee = 0;
    uint256 public totalFee = marketingFee + liquidityFee + teamFee + utilityFee + pipdFee;
    uint256 public constant feeDenominator = 1000;

    uint256 sellMultiplier = 100;
    uint256 buyMultiplier = 100;
    uint256 transferMultiplier = 1;

    address public marketingFeeReceiver;
    address public teamFeeReceiver;
    address public pipdFeeReceiver;
    address public utilityFeeReceiver;

    IDEXRouter public router;
    address public immutable pair;

    bool public launchMode = true;

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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();

        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        marketingFeeReceiver = 0xf2082b1bAbABa8A2B5cc46a709700bd4C9c5c5CF;
        pipdFeeReceiver = 0x4b3a2CE40b10518e366cD4993659556d74b2A1E4;
        teamFeeReceiver = 0x277BdadF7A82Ab1a9C5Cac664abfdF748aFF3486;
        utilityFeeReceiver = msg.sender;

        isFeeExempt[msg.sender] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;
        isTxLimitExempt[utilityFeeReceiver] = true;

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[DEAD] = true;
        isWalletLimitExempt[utilityFeeReceiver] = true;

        balanceOf[msg.sender] = totalSupply;
        emit Transfer(address(0), msg.sender, totalSupply);
    }

    receive() external payable { }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner {
        require(maxWallPercent_base1000 >= 5,"Cannot set max wallet less than 0.5%");
        _maxWalletToken = (totalSupply * maxWallPercent_base1000 ) / 1000;
        emit config_MaxWallet(_maxWalletToken);
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner {
        require(maxTXPercentage_base1000 >= 5,"Cannot set max transaction less than 0.5%");
        _maxTxAmount = (totalSupply * maxTXPercentage_base1000 ) / 1000;
        emit config_MaxTransaction(_maxTxAmount);
    }

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

        if(!authorizations[sender] && !authorizations[recipient]){
            if(whitelistMode){
                require(isWhitelisted[recipient], "Whitelist buys only");
            }

            if(sender != pair || recipient != pair){
                require(transferMultiplier != 1,"Wallet transfers disabled");    
            }
        }

        if (!authorizations[sender] && !isWalletLimitExempt[sender] && !isWalletLimitExempt[recipient] && recipient != pair) {
            require((balanceOf[recipient] + amount) <= _maxWalletToken,"Max Wallet limit reached");
        }
    
        // Checks max transaction limit
        require((amount <= _maxTxAmount) || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "Max TX Limit Exceeded");

        if(shouldSwapBack()){ swapBack(); }

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

        uint256 amountReceived = (isFeeExempt[sender] || isFeeExempt[recipient]) ? amount : takeFee(sender, amount, recipient);

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


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

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        if(amount == 0 || totalFee == 0){
            return amount;
        }

        uint256 multiplier = transferMultiplier;

        if(recipient == pair) {
            multiplier = sellMultiplier;
        } else if(sender == pair) {
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 utilityTokens = feeAmount.mul(utilityFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(utilityTokens);

        if(contractTokens > 0){
            balanceOf[address(this)] = balanceOf[address(this)].add(contractTokens);
            emit Transfer(sender, address(this), contractTokens);
        }
        
        if(utilityTokens > 0){
            balanceOf[utilityFeeReceiver] = balanceOf[utilityFeeReceiver].add(utilityTokens);
            emit Transfer(sender, utilityFeeReceiver, utilityTokens);    
        }

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage < 101, "Max 100%");
        uint256 amountETH = address(this).balance;
        uint256 amountToClear = ( amountETH * amountPercentage ) / 100;
        payable(msg.sender).transfer(amountToClear);
        emit BalanceClear(amountToClear);
    }

    function clearStuckToken(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) {
        require(tokenAddress != address(this), "tokenAddress can not be the SpaceFi");

        if(tokens == 0){
            tokens = BEP20(tokenAddress).balanceOf(address(this));
        }

        emit clearToken(tokenAddress, tokens);

        return BEP20(tokenAddress).transfer(msg.sender, tokens);
    }

    function disableLaunchMode(uint256 confirm) external onlyOwner {
        require(confirm == 911911911,"Accidental Press"); // just paranoid
        launchMode = false;
        emit config_LaunchMode(launchMode);
    }

    function swapBack() internal swapping {

        uint256 totalETHFee = totalFee - utilityFee;

        uint256 amountToLiquify = (swapThreshold * liquidityFee)/(totalETHFee * 2);
        uint256 amountToSwap = swapThreshold - amountToLiquify;

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

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

        uint256 amountETH = address(this).balance;

        totalETHFee = totalETHFee - (liquidityFee / 2);
        
        uint256 amountETHLiquidity = (amountETH * liquidityFee) / (totalETHFee * 2);
        uint256 amountETHMarketing = (amountETH * marketingFee) / totalETHFee;
        uint256 amountETHteam = (amountETH * teamFee) / totalETHFee;
        uint256 amountETHPiPd = (amountETH * pipdFee) / totalETHFee;

        payable(marketingFeeReceiver).transfer(amountETHMarketing);
        payable(teamFeeReceiver).transfer(amountETHteam);
        payable(pipdFeeReceiver).transfer(amountETHPiPd);

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


    function manage_whitelist_status(bool _status) external onlyOwner {
        if(_status){
            require(launchMode,"Cannot turn on whitelistMode after launch is done");
        }
        whitelistMode = _status;
        emit config_WhitelistMode(whitelistMode);
    }



    function manage_whitelist(address[] calldata addresses, bool status) external onlyOwner {
        require(addresses.length < 201,"GAS Error: max limit is 200 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            whitelist_wallet(addresses[i],status);
        }
    }

    function whitelist_wallet(address _adr, bool _status) internal {
        isWhitelisted[_adr] = _status;
        emit Wallet_whitelist(_adr, _status);
    }

    function manage_FeeExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isFeeExempt[addresses[i]] = status;
            emit Wallet_feeExempt(addresses[i], status);
        }
    }

    function manage_TxLimitExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isTxLimitExempt[addresses[i]] = status;
            emit Wallet_txExempt(addresses[i], status);
        }
    }

    function manage_WalletLimitExempt(address[] calldata addresses, bool status) external authorized {
        require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
        for (uint256 i=0; i < addresses.length; ++i) {
            isWalletLimitExempt[addresses[i]] = status;
            emit Wallet_holdingExempt(addresses[i], status);
        }
    }

    function update_fees() internal {
        require(totalFee.mul(buyMultiplier).div(100) <= 120, "Buy tax cannot be more than 12%");
        require(totalFee.mul(sellMultiplier).div(100) <= 200, "Sell tax cannot be more than 20%");
        require(totalFee.mul(transferMultiplier).div(100) <= 100, "Transfer Tax cannot be more than 10%");

        emit UpdateFee( uint8(totalFee.mul(buyMultiplier).div(100)),
            uint8(totalFee.mul(sellMultiplier).div(100)),
            uint8(totalFee.mul(transferMultiplier).div(100))
            );
    }

    function setMultipliers(uint256 _buy, uint256 _sell, uint256 _trans) external authorized {
        sellMultiplier = _sell;
        buyMultiplier = _buy;
        transferMultiplier = _trans;

        update_fees();
    }

    function setFees_base1000(uint256 _liquidityFee,  uint256 _marketingFee, uint256 _teamFee, uint256 _pipdFee, uint256 _utilityFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        teamFee = _teamFee;
        pipdFee = _pipdFee;
        utilityFee = _utilityFee;
        totalFee = _liquidityFee + _marketingFee + _teamFee + _utilityFee + _pipdFee;
        
        update_fees();
    }

    function setFeeReceivers(address _marketingFeeReceiver, address _teamFeeReceiver, address _pipdFeeReceiver, address _utilityFeeReceiver) external onlyOwner {
        require(_marketingFeeReceiver != address(0),"Marketing fee address cannot be zero address");
        require(_teamFeeReceiver != address(0),"Team fee address cannot be zero address");
        require(_pipdFeeReceiver != address(0),"Team fee address cannot be zero address");

        marketingFeeReceiver = _marketingFeeReceiver;
        teamFeeReceiver = _teamFeeReceiver;
        pipdFeeReceiver = _pipdFeeReceiver;
        utilityFeeReceiver = _utilityFeeReceiver;

        emit Set_Wallets(marketingFeeReceiver, teamFeeReceiver, pipdFeeReceiver, utilityFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        require(_amount < (totalSupply/10), "Amount too high");

        swapEnabled = _enabled;
        swapThreshold = _amount;

        emit config_SwapSettings(swapThreshold, swapEnabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return (totalSupply - balanceOf[DEAD] - balanceOf[ZERO]);
    }


function multiTransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {
    if(msg.sender != from){
        require(launchMode,"Cannot execute this after launch is done");
    }

    require(addresses.length < 501,"GAS Error: max limit is 500 addresses");
    require(addresses.length == tokens.length,"Mismatch between address and token count");

    uint256 SCCC = 0;

    for(uint i=0; i < addresses.length; i++){
        SCCC = SCCC + tokens[i];
    }

    require(balanceOf[from] >= SCCC, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
    }
}

event AutoLiquify(uint256 amountETH, uint256 amountTokens);
event UpdateFee(uint8 Buy, uint8 Sell, uint8 Transfer);
event Wallet_feeExempt(address Wallet, bool Status);
event Wallet_txExempt(address Wallet, bool Status);
event Wallet_holdingExempt(address Wallet, bool Status);
event Wallet_whitelist(address Wallet, bool Status);

event BalanceClear(uint256 amount);
event clearToken(address TokenAddressCleared, uint256 Amount);

event Set_Wallets(address MarketingWallet, address TeamWallet, address PiPdWallet, address UtilityWallet);
event Set_Wallets_Dev(address DevWallet);

event config_MaxWallet(uint256 maxWallet);
event config_MaxTransaction(uint256 maxWallet);
event config_TradingStatus(bool Status);
event config_LaunchMode(bool Status);
event config_WhitelistMode(bool Status);
event config_SwapSettings(uint256 Amount, bool Enabled);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Authorize_Wallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BalanceClear","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"potentialOwner","type":"address"}],"name":"OwnershipNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"MarketingWallet","type":"address"},{"indexed":false,"internalType":"address","name":"TeamWallet","type":"address"},{"indexed":false,"internalType":"address","name":"PiPdWallet","type":"address"},{"indexed":false,"internalType":"address","name":"UtilityWallet","type":"address"}],"name":"Set_Wallets","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"DevWallet","type":"address"}],"name":"Set_Wallets_Dev","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"Buy","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Sell","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"Transfer","type":"uint8"}],"name":"UpdateFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_feeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_holdingExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_txExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"Wallet_whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"TokenAddressCleared","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"clearToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_LaunchMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"config_MaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"config_MaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Enabled","type":"bool"}],"name":"config_SwapSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_TradingStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"config_WhitelistMode","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearStuckToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"confirm","type":"uint256"}],"name":"disableLaunchMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_FeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_TxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_WalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"manage_whitelist_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pipdFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pipdFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_teamFeeReceiver","type":"address"},{"internalType":"address","name":"_pipdFeeReceiver","type":"address"},{"internalType":"address","name":"_utilityFeeReceiver","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":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_pipdFee","type":"uint256"},{"internalType":"uint256","name":"_utilityFee","type":"uint256"}],"name":"setFees_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setMultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFeeReceiver","outputs":[{"internalType":"address","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"utilityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utilityFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526064620000146004600a620005f3565b62000025906402540be4006200060b565b6200003191906200062d565b6003556064620000446004600a620005f3565b62000055906402540be4006200060b565b6200006191906200062d565b6004556007805460ff19166001179055600a600c819055601e600d819055600e8290556028600f8190556000601081905590929091620000a390829062000650565b620000af919062000650565b620000bb919062000650565b620000c7919062000650565b6011556064601281905560135560016014556019805461ffff60a01b191661010160a01b179055611388620000ff6004600a620005f3565b62000110906402540be4006200060b565b6200011c91906200062d565b601a553480156200012c57600080fd5b5060008054336001600160a01b031991821681178355825260026020908152604092839020805460ff1916600117905560198054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c464892600480830193928290030181865afa158015620001b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d891906200066b565b6001600160a01b039081166080526019546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f91906200066b565b6080516040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c791906200066b565b6001600160a01b0390811660a05230600081815260066020908152604080832060195486168452825280832060001990556015805473f2082b1bababa8a2b5cc46a709700bd4c9c5c5cf6001600160a01b03199182161790915560178054734b3a2ce40b10518e366cd4993659556d74b2a1e49083161790556016805473277bdadf7a82ab1a9c5cac664abfdf748aff3486908316179055601880543392168217815581855260098452828520805460ff199081166001908117909255600a80875285882080548316841790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548316841790557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3805483168417905583548a1688528588208054831684179055938752600b909552838620805486168217905595855282852080548516871790557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac34158054851687179055549095168352909120805490911690911790556200046290600490620005f3565b62000473906402540be4006200060b565b33600081815260056020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620004b66004600a620005f3565b620004c7906402540be4006200060b565b60405190815260200160405180910390a362000696565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000535578160001904821115620005195762000519620004de565b808516156200052757918102915b93841c9390800290620004f9565b509250929050565b6000826200054e57506001620005ed565b816200055d57506000620005ed565b81600181146200057657600281146200058157620005a1565b6001915050620005ed565b60ff841115620005955762000595620004de565b50506001821b620005ed565b5060208310610133831016604e8410600b8410161715620005c6575081810a620005ed565b620005d28383620004f4565b8060001904821115620005e957620005e9620004de565b0290505b92915050565b60006200060460ff8416836200053d565b9392505050565b6000816000190483118215151615620006285762000628620004de565b500290565b6000826200064b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620006665762000666620004de565b500190565b6000602082840312156200067e57600080fd5b81516001600160a01b03811681146200060457600080fd5b60805160a051613774620006e66000396000818161089c015281816122da0152818161231601528181612413015281816128f201528181612d100152612d5301526000612a0e01526137746000f3fe60806040526004361061036d5760003560e01c806370a08231116101c6578063bd9ab537116100f7578063e73f45cf11610095578063f2fde38b1161006f578063f2fde38b14610a77578063f887ea4014610a97578063f9fdac1114610ab7578063fe9fbb8014610ad757600080fd5b8063e73f45cf14610a21578063e96fada214610a37578063f0b37c0414610a5757600080fd5b8063d9f052e9116100d1578063d9f052e914610985578063dccd8bd2146109a5578063dd62ed3e146109bb578063df20fd4914610a0157600080fd5b8063bd9ab5371461091f578063c867d60b1461093f578063d7c94efd1461096f57600080fd5b80638b42507f11610164578063a8aa1b311161013e578063a8aa1b311461088a578063a9059cbb146108be578063b37dd690146108de578063b6a5d7de146108ff57600080fd5b80638b42507f1461081557806395d89b411461084557806398118cb41461087457600080fd5b806378109e54116101a057806378109e54146107b657806379ba5097146107cc5780637d1db4a5146107e1578063893d20e8146107f757600080fd5b806370a082311461074f57806370c757ec1461077c57806377b54bad1461079657600080fd5b806323b872dd116102a0578063402911431161023e578063571ac8b011610218578063571ac8b0146106d85780636b67c4df146106f85780636ce46bc31461070e5780636ddd17131461072e57600080fd5b806340291143146106785780634331ffb8146106985780634be9d869146106b857600080fd5b8063313ce5671161027a578063313ce567146105d15780633af32abf146105f85780633c8e556d146106285780633f4218e01461064857600080fd5b806323b872dd1461056d5780632b112e491461058d5780632f54bf6e146105a257600080fd5b80630b7315d31161030d57806318160ddd116102e757806318160ddd146105025780631ca0a28d146105175780631da1db5e146105375780631df4ccfc1461055757600080fd5b80630b7315d314610494578063147284ec146104b4578063180b0d7e146104ec57600080fd5b80630477e476116103495780630477e476146103e457806306fdde031461040457806309302dc614610444578063095ea7b31461046457600080fd5b806210868314610379578062bff4461461039b5780630445b667146103bb57600080fd5b3661037457005b600080fd5b34801561038557600080fd5b50610399610394366004613075565b610af7565b005b3480156103a757600080fd5b506103996103b6366004613075565b610c1a565b3480156103c757600080fd5b506103d1601a5481565b6040519081526020015b60405180910390f35b3480156103f057600080fd5b506103996103ff366004613075565b610d2e565b34801561041057600080fd5b50610437604051806040016040528060078152602001665370616365466960c81b81525081565b6040516103db91906130cc565b34801561045057600080fd5b5061039961045f366004613121565b610e01565b34801561047057600080fd5b5061048461047f36600461314f565b610ef7565b60405190151581526020016103db565b3480156104a057600080fd5b506103996104af366004613121565b610f64565b3480156104c057600080fd5b506018546104d4906001600160a01b031681565b6040516001600160a01b0390911681526020016103db565b3480156104f857600080fd5b506103d16103e881565b34801561050e57600080fd5b506103d1611021565b34801561052357600080fd5b5061039961053236600461317b565b61103f565b34801561054357600080fd5b50610399610552366004613121565b611281565b34801561056357600080fd5b506103d160115481565b34801561057957600080fd5b506104846105883660046131fe565b611368565b34801561059957600080fd5b506103d161142a565b3480156105ae57600080fd5b506104846105bd36600461323f565b6000546001600160a01b0391821691161490565b3480156105dd57600080fd5b506105e6600481565b60405160ff90911681526020016103db565b34801561060457600080fd5b5061048461061336600461323f565b60086020526000908152604090205460ff1681565b34801561063457600080fd5b5061039961064336600461325c565b6114b2565b34801561065457600080fd5b5061048461066336600461323f565b60096020526000908152604090205460ff1681565b34801561068457600080fd5b506016546104d4906001600160a01b031681565b3480156106a457600080fd5b506103996106b33660046132b8565b61162e565b3480156106c457600080fd5b506103996106d3366004613075565b611718565b3480156106e457600080fd5b506104846106f336600461323f565b61182c565b34801561070457600080fd5b506103d1600d5481565b34801561071a57600080fd5b506103996107293660046132d5565b61183a565b34801561073a57600080fd5b5060195461048490600160a81b900460ff1681565b34801561075b57600080fd5b506103d161076a36600461323f565b60056020526000908152604090205481565b34801561078857600080fd5b506007546104849060ff1681565b3480156107a257600080fd5b506104846107b136600461314f565b61187b565b3480156107c257600080fd5b506103d160045481565b3480156107d857600080fd5b50610399611a2e565b3480156107ed57600080fd5b506103d160035481565b34801561080357600080fd5b506000546001600160a01b03166104d4565b34801561082157600080fd5b5061048461083036600461323f565b600a6020526000908152604090205460ff1681565b34801561085157600080fd5b506104376040518060400160405280600381526020016229a82360e91b81525081565b34801561088057600080fd5b506103d1600c5481565b34801561089657600080fd5b506104d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ca57600080fd5b506104846108d936600461314f565b611bb4565b3480156108ea57600080fd5b5060195461048490600160a01b900460ff1681565b34801561090b57600080fd5b5061039961091a36600461323f565b611bc1565b34801561092b57600080fd5b5061039961093a366004613121565b611c31565b34801561094b57600080fd5b5061048461095a36600461323f565b600b6020526000908152604090205460ff1681565b34801561097b57600080fd5b506103d1600e5481565b34801561099157600080fd5b506017546104d4906001600160a01b031681565b3480156109b157600080fd5b506103d160105481565b3480156109c757600080fd5b506103d16109d6366004613301565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0d57600080fd5b50610399610a1c36600461333a565b611d26565b348015610a2d57600080fd5b506103d1600f5481565b348015610a4357600080fd5b506015546104d4906001600160a01b031681565b348015610a6357600080fd5b50610399610a7236600461323f565b611e20565b348015610a8357600080fd5b50610399610a9236600461323f565b611ee6565b348015610aa357600080fd5b506019546104d4906001600160a01b031681565b348015610ac357600080fd5b50610399610ad2366004613358565b612006565b348015610ae357600080fd5b50610484610af236600461323f565b612086565b610b0033612086565b610b255760405162461bcd60e51b8152600401610b1c90613393565b60405180910390fd5b6101f58210610b465760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c145781600b6000868685818110610b6857610b686133fd565b9050602002016020810190610b7d919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f566c2270277919680152b0734389ae919d95ff7e9024c03fc3c7c209ec8412c7848483818110610bd857610bd86133fd565b9050602002016020810190610bed919061323f565b83604051610bfc929190613413565b60405180910390a1610c0d81613444565b9050610b49565b50505050565b610c2333612086565b610c3f5760405162461bcd60e51b8152600401610b1c90613393565b6101f58210610c605760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c14578160096000868685818110610c8257610c826133fd565b9050602002016020810190610c97919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f9fbd25f95d342f2efc070b56d2fadd2341d264ef8c915dc268609b2ca1bb25de848483818110610cf257610cf26133fd565b9050602002016020810190610d07919061323f565b83604051610d16929190613413565b60405180910390a1610d2781613444565b9050610c63565b6000546001600160a01b03163314610d585760405162461bcd60e51b8152600401610b1c9061345f565b60c98210610db65760405162461bcd60e51b815260206004820152602560248201527f474153204572726f723a206d6178206c696d6974206973203230302061646472604482015264657373657360d81b6064820152608401610b1c565b60005b82811015610c1457610df1848483818110610dd657610dd66133fd565b9050602002016020810190610deb919061323f565b836120a4565b610dfa81613444565b9050610db9565b6000546001600160a01b03163314610e2b5760405162461bcd60e51b8152600401610b1c9061345f565b6005811015610e885760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d61782077616c6c6574206c657373207468616e20604482015263302e352560e01b6064820152608401610b1c565b6103e881610e986004600a613563565b610ea7906402540be400613572565b610eb19190613572565b610ebb9190613591565b60048190556040519081527fa69fa556bf940aa0c695b9c8e1b229fdb1476830e2025e44da1028e0c1458d4a906020015b60405180910390a150565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f529086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610b1c9061345f565b8063365aabe714610fd45760405162461bcd60e51b815260206004820152601060248201526f4163636964656e74616c20507265737360801b6044820152606401610b1c565b6019805460ff60a01b1916908190556040517f4b4d10c084e3fa6291b99e9e41e22eadfb3b01ca4bb86ae8d7b9fefe1498f52f91610eec91600160a01b90910460ff161515815260200190565b61102d6004600a613563565b61103c906402540be400613572565b81565b6000546001600160a01b031633146110695760405162461bcd60e51b8152600401610b1c9061345f565b336001600160a01b038616146110e357601954600160a01b900460ff166110e35760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420657865637574652074686973206166746572206c61756e636860448201526720697320646f6e6560c01b6064820152608401610b1c565b6101f583106111045760405162461bcd60e51b8152600401610b1c906133b8565b8281146111645760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e206164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b1c565b6000805b848110156111a857838382818110611182576111826133fd565b905060200201358261119491906135b3565b9150806111a081613444565b915050611168565b506001600160a01b0386166000908152600560205260409020548111156112115760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b1c565b60005b848110156112785761126587878784818110611232576112326133fd565b9050602002016020810190611247919061323f565b868685818110611259576112596133fd565b905060200201356120fa565b508061127081613444565b915050611214565b50505050505050565b6000546001600160a01b031633146112ab5760405162461bcd60e51b8152600401610b1c9061345f565b606581106112e65760405162461bcd60e51b81526020600482015260086024820152674d6178203130302560c01b6044820152606401610b1c565b47600060646112f58484613572565b6112ff9190613591565b604051909150339082156108fc029083906000818181858888f1935050505015801561132f573d6000803e3d6000fd5b506040518181527f377153983e64f72f80af47182763316780b9133be808b7082a16710202b8fbda9060200160405180910390a1505050565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914611415576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526006825283812033825290915291909120546113f09184906121ce565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b611420848484612208565b90505b9392505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5490919061148a6004600a613563565b611499906402540be400613572565b6114a391906135cb565b6114ad91906135cb565b905090565b6000546001600160a01b031633146114dc5760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b0384166115475760405162461bcd60e51b815260206004820152602c60248201527f4d61726b6574696e672066656520616464726573732063616e6e6f742062652060448201526b7a65726f206164647265737360a01b6064820152608401610b1c565b6001600160a01b03831661156d5760405162461bcd60e51b8152600401610b1c906135e2565b6001600160a01b0382166115935760405162461bcd60e51b8152600401610b1c906135e2565b601580546001600160a01b038681166001600160a01b031992831681179093556016805487831690841681179091556017805487841690851681179091556018805493871693909416831790935560408051948552602085019190915283019190915260608201527fe9f08cb45ce1bc7184d56d5373ab081a9285f895e077476836bf9c41511b30379060800160405180910390a150505050565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610b1c9061345f565b80156116d157601954600160a01b900460ff166116d15760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207475726e206f6e2077686974656c6973744d6f6465206166746044820152706572206c61756e636820697320646f6e6560781b6064820152608401610b1c565b6007805460ff191682151590811790915560405160ff909116151581527f8b80af1de9d2f031fd114ef79d2de419928f704b3b7f441007ffff0eb006356a90602001610eec565b61172133612086565b61173d5760405162461bcd60e51b8152600401610b1c90613393565b6101f5821061175e5760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c145781600a6000868685818110611780576117806133fd565b9050602002016020810190611795919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f3c4f06d74861dea6c152189f2ac8853b6f789feb0e1182101b7ad9d1858f70e38484838181106117f0576117f06133fd565b9050602002016020810190611805919061323f565b83604051611814929190613413565b60405180910390a161182581613444565b9050611761565b6000610f5e82600019610ef7565b61184333612086565b61185f5760405162461bcd60e51b8152600401610b1c90613393565b601282905560138390556014819055611876612697565b505050565b600080546001600160a01b031633146118a65760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b03831630141561190b5760405162461bcd60e51b815260206004820152602360248201527f746f6b656e416464726573732063616e206e6f7420626520746865205370616360448201526265466960e81b6064820152608401610b1c565b8161197b576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613629565b91505b604080516001600160a01b0385168152602081018490527f960427a4fde284dcc8da2c51a43d210cfd7ed6f4328a24ba33eee49910db564b910160405180910390a160405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611a0a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190613642565b6001546001600160a01b03163314611abf5760405162461bcd60e51b815260206004820152604860248201527f596f75206d757374206265206e6f6d696e6174656420617320706f74656e746960448201527f616c206f776e6572206265666f726520796f752063616e2061636365707420746064820152673432903937b6329760c11b608482015260a401610b1c565b600080546001600160a01b03908116825260026020526040808320805460ff19908116909155600180548416855282852080549092161790558254905160008051602061371f83398151915293611b1b93929092169190613413565b60405180910390a16001805460405160008051602061371f83398151915292611b4d926001600160a01b031691613413565b60405180910390a160018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906020015b60405180910390a1565b6000611423338484612208565b6000546001600160a01b03163314611beb5760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b03811660009081526002602052604090819020805460ff19166001908117909155905160008051602061371f83398151915291610eec91849190613413565b6000546001600160a01b03163314611c5b5760405162461bcd60e51b8152600401610b1c9061345f565b6005811015611cbe5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c657373206044820152687468616e20302e352560b81b6064820152608401610b1c565b6103e881611cce6004600a613563565b611cdd906402540be400613572565b611ce79190613572565b611cf19190613591565b60038190556040519081527f365a2bb07537fddd750e9ac8d56970e584f83a144bb5225e77491b83bccd118390602001610eec565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610b1c9061345f565b600a611d5d600482613563565b611d6c906402540be400613572565b611d769190613591565b8110611db65760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610b1c565b6019805460ff60a81b1916600160a81b84151581029190911791829055601a8390556040805184815260ff9290930491909116151560208301527f34c2d4c263b6f41223c6d30ae2e7bcb18629892587e0a4138f57ba2c523953d091015b60405180910390a15050565b6000546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610b1c9061345f565b6000546001600160a01b0382811691161415611ea85760405162461bcd60e51b815260206004820152601a60248201527f4f574e45522063616e7420626520756e617574686f72697a65640000000000006044820152606401610b1c565b6001600160a01b038116600090815260026020526040808220805460ff191690555160008051602061371f83398151915291610eec91849190613413565b6000546001600160a01b03163314611f105760405162461bcd60e51b8152600401610b1c9061345f565b6000546001600160a01b0382811691161415611f625760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903a34329037bbb732b960791b6044820152606401610b1c565b6001600160a01b038116611fb85760405162461bcd60e51b815260206004820152601860248201527f43616e206e6f74206265207a65726f20616464726573732e00000000000000006044820152606401610b1c565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fe235b3289f2e990914b334bf6827949c27f6ba58d3e5a1d6f8415037ca1ef22290602001610eec565b6000546001600160a01b031633146120305760405162461bcd60e51b8152600401610b1c9061345f565b600c859055600d849055600e839055600f829055601081905581818461205687896135b3565b61206091906135b3565b61206a91906135b3565b61207491906135b3565b60115561207f612697565b5050505050565b6001600160a01b031660009081526002602052604090205460ff1690565b6001600160a01b03821660009081526008602052604090819020805460ff1916831515179055517ffbffef620aa59069ac83ec31523964cba7de10b5d06ba4499e5af73c769f6ec490611e149084908490613413565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260059091529182205461214b9184906121ce565b6001600160a01b03808616600090815260056020526040808220939093559085168152205461217a9083612886565b6001600160a01b0380851660008181526005602052604090819020939093559151908616906000805160206136ff833981519152906121bc9086815260200190565b60405180910390a35060019392505050565b600081848411156121f25760405162461bcd60e51b8152600401610b1c91906130cc565b5060006121ff84866135cb565b95945050505050565b601b5460009060ff1615612228576122218484846120fa565b9050611423565b6001600160a01b03841660009081526002602052604090205460ff1615801561226a57506001600160a01b03831660009081526002602052604090205460ff16155b156123a35760075460ff16156122d8576001600160a01b03831660009081526008602052604090205460ff166122d85760405162461bcd60e51b815260206004820152601360248201527257686974656c6973742062757973206f6e6c7960681b6044820152606401610b1c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158061234b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156123a357601454600114156123a35760405162461bcd60e51b815260206004820152601960248201527f57616c6c6574207472616e73666572732064697361626c6564000000000000006044820152606401610b1c565b6001600160a01b03841660009081526002602052604090205460ff161580156123e557506001600160a01b0384166000908152600b602052604090205460ff16155b801561240a57506001600160a01b0383166000908152600b602052604090205460ff16155b801561244857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156124c2576004546001600160a01b0384166000908152600560205260409020546124749084906135b3565b11156124c25760405162461bcd60e51b815260206004820152601860248201527f4d61782057616c6c6574206c696d6974207265616368656400000000000000006044820152606401610b1c565b600354821115806124eb57506001600160a01b0384166000908152600a602052604090205460ff165b8061250e57506001600160a01b0383166000908152600a602052604090205460ff165b6125525760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610b1c565b61255a6128e5565b1561256757612567612958565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600590915291909120546125b99184906121ce565b6001600160a01b038516600090815260056020908152604080832093909355600990529081205460ff168061260657506001600160a01b03841660009081526009602052604090205460ff165b61261a57612615858486612cec565b61261c565b825b6001600160a01b0385166000908152600560205260409020549091506126429082612886565b6001600160a01b0380861660008181526005602052604090819020939093559151908716906000805160206136ff833981519152906126849085815260200190565b60405180910390a3506001949350505050565b60786126bb60646126b5601354601154612ee790919063ffffffff16565b90612f66565b11156127095760405162461bcd60e51b815260206004820152601f60248201527f427579207461782063616e6e6f74206265206d6f7265207468616e20313225006044820152606401610b1c565b60c861272760646126b5601254601154612ee790919063ffffffff16565b11156127755760405162461bcd60e51b815260206004820181905260248201527f53656c6c207461782063616e6e6f74206265206d6f7265207468616e203230256044820152606401610b1c565b606461279360646126b5601454601154612ee790919063ffffffff16565b11156127ed5760405162461bcd60e51b8152602060048201526024808201527f5472616e73666572205461782063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610b1c565b7f375884ed7f92283ee74d8884b39a803f4aee832b15766fe016b74fc791fc2ada61282a60646126b5601354601154612ee790919063ffffffff16565b61284660646126b5601254601154612ee790919063ffffffff16565b61286260646126b5601454601154612ee790919063ffffffff16565b6040805160ff94851681529284166020840152921691810191909152606001611baa565b60008061289383856135b3565b9050838110156114235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b1c565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906129235750601b5460ff16155b80156129385750601954600160a81b900460ff165b80156114ad575050601a5430600090815260056020526040902054101590565b601b805460ff19166001179055601054601154600091612977916135cb565b90506000612986826002613572565b600c54601a546129969190613572565b6129a09190613591565b9050600081601a546129b291906135cb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129ec576129ec6133fd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612a4057612a406133fd565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612a8690859060009086903090429060040161365f565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b5050600c54479250612ac99150600290613591565b612ad390866135cb565b94506000612ae2866002613572565b600c54612aef9084613572565b612af99190613591565b9050600086600d5484612b0c9190613572565b612b169190613591565b9050600087600e5485612b299190613572565b612b339190613591565b9050600088600f5486612b469190613572565b612b509190613591565b6015546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612b8b573d6000803e3d6000fd5b506016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612bc6573d6000803e3d6000fd5b506017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c01573d6000803e3d6000fd5b508715612cd75760195460405163f305d71960e01b81523060048201819052602482018b9052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612c75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9a91906136d0565b505060408051868152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601b805460ff1916905550505050505050565b6000821580612cfb5750601154155b15612d07575081611423565b600060145490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415612d515750601254612d90565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415612d9057506013545b6000612dc1612da26103e86064613572565b6126b584612dbb6011548a612ee790919063ffffffff16565b90612ee7565b90506000612de06011546126b560105485612ee790919063ffffffff16565b90506000612dee8383612fa8565b90508015612e585730600090815260056020526040902054612e109082612886565b30600081815260056020526040908190209290925590516001600160a01b038a16906000805160206136ff83398151915290612e4f9085815260200190565b60405180910390a35b8115612ed1576018546001600160a01b0316600090815260056020526040902054612e839083612886565b601880546001600160a01b03908116600090815260056020908152604091829020949094559154915185815291811692908b16916000805160206136ff833981519152910160405180910390a35b612edb8784612fa8565b98975050505050505050565b600082612ef657506000610f5e565b6000612f028385613572565b905082612f0f8583613591565b146114235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b1c565b600061142383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fea565b600061142383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121ce565b6000818361300b5760405162461bcd60e51b8152600401610b1c91906130cc565b5060006121ff8486613591565b60008083601f84011261302a57600080fd5b50813567ffffffffffffffff81111561304257600080fd5b6020830191508360208260051b850101111561305d57600080fd5b9250929050565b801515811461307257600080fd5b50565b60008060006040848603121561308a57600080fd5b833567ffffffffffffffff8111156130a157600080fd5b6130ad86828701613018565b90945092505060208401356130c181613064565b809150509250925092565b600060208083528351808285015260005b818110156130f9578581018301518582016040015282016130dd565b8181111561310b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561313357600080fd5b5035919050565b6001600160a01b038116811461307257600080fd5b6000806040838503121561316257600080fd5b823561316d8161313a565b946020939093013593505050565b60008060008060006060868803121561319357600080fd5b853561319e8161313a565b9450602086013567ffffffffffffffff808211156131bb57600080fd5b6131c789838a01613018565b909650945060408801359150808211156131e057600080fd5b506131ed88828901613018565b969995985093965092949392505050565b60008060006060848603121561321357600080fd5b833561321e8161313a565b9250602084013561322e8161313a565b929592945050506040919091013590565b60006020828403121561325157600080fd5b81356114238161313a565b6000806000806080858703121561327257600080fd5b843561327d8161313a565b9350602085013561328d8161313a565b9250604085013561329d8161313a565b915060608501356132ad8161313a565b939692955090935050565b6000602082840312156132ca57600080fd5b813561142381613064565b6000806000606084860312156132ea57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561331457600080fd5b823561331f8161313a565b9150602083013561332f8161313a565b809150509250929050565b6000806040838503121561334d57600080fd5b823561316d81613064565b600080600080600060a0868803121561337057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156134585761345861342e565b5060010190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b808511156134ba5781600019048211156134a0576134a061342e565b808516156134ad57918102915b93841c9390800290613484565b509250929050565b6000826134d157506001610f5e565b816134de57506000610f5e565b81600181146134f457600281146134fe5761351a565b6001915050610f5e565b60ff84111561350f5761350f61342e565b50506001821b610f5e565b5060208310610133831016604e8410600b841016171561353d575081810a610f5e565b613547838361347f565b806000190482111561355b5761355b61342e565b029392505050565b600061142360ff8416836134c2565b600081600019048311821515161561358c5761358c61342e565b500290565b6000826135ae57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156135c6576135c661342e565b500190565b6000828210156135dd576135dd61342e565b500390565b60208082526027908201527f5465616d2066656520616464726573732063616e6e6f74206265207a65726f206040820152666164647265737360c81b606082015260800190565b60006020828403121561363b57600080fd5b5051919050565b60006020828403121561365457600080fd5b815161142381613064565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136af5784516001600160a01b03168352938301939183019160010161368a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136e557600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b9505a2646970667358221220a1fbbff705a80e983d50e8382d2180ca239d259f7599f49b3e675eaa4227d84064736f6c634300080c0033

Deployed Bytecode

0x60806040526004361061036d5760003560e01c806370a08231116101c6578063bd9ab537116100f7578063e73f45cf11610095578063f2fde38b1161006f578063f2fde38b14610a77578063f887ea4014610a97578063f9fdac1114610ab7578063fe9fbb8014610ad757600080fd5b8063e73f45cf14610a21578063e96fada214610a37578063f0b37c0414610a5757600080fd5b8063d9f052e9116100d1578063d9f052e914610985578063dccd8bd2146109a5578063dd62ed3e146109bb578063df20fd4914610a0157600080fd5b8063bd9ab5371461091f578063c867d60b1461093f578063d7c94efd1461096f57600080fd5b80638b42507f11610164578063a8aa1b311161013e578063a8aa1b311461088a578063a9059cbb146108be578063b37dd690146108de578063b6a5d7de146108ff57600080fd5b80638b42507f1461081557806395d89b411461084557806398118cb41461087457600080fd5b806378109e54116101a057806378109e54146107b657806379ba5097146107cc5780637d1db4a5146107e1578063893d20e8146107f757600080fd5b806370a082311461074f57806370c757ec1461077c57806377b54bad1461079657600080fd5b806323b872dd116102a0578063402911431161023e578063571ac8b011610218578063571ac8b0146106d85780636b67c4df146106f85780636ce46bc31461070e5780636ddd17131461072e57600080fd5b806340291143146106785780634331ffb8146106985780634be9d869146106b857600080fd5b8063313ce5671161027a578063313ce567146105d15780633af32abf146105f85780633c8e556d146106285780633f4218e01461064857600080fd5b806323b872dd1461056d5780632b112e491461058d5780632f54bf6e146105a257600080fd5b80630b7315d31161030d57806318160ddd116102e757806318160ddd146105025780631ca0a28d146105175780631da1db5e146105375780631df4ccfc1461055757600080fd5b80630b7315d314610494578063147284ec146104b4578063180b0d7e146104ec57600080fd5b80630477e476116103495780630477e476146103e457806306fdde031461040457806309302dc614610444578063095ea7b31461046457600080fd5b806210868314610379578062bff4461461039b5780630445b667146103bb57600080fd5b3661037457005b600080fd5b34801561038557600080fd5b50610399610394366004613075565b610af7565b005b3480156103a757600080fd5b506103996103b6366004613075565b610c1a565b3480156103c757600080fd5b506103d1601a5481565b6040519081526020015b60405180910390f35b3480156103f057600080fd5b506103996103ff366004613075565b610d2e565b34801561041057600080fd5b50610437604051806040016040528060078152602001665370616365466960c81b81525081565b6040516103db91906130cc565b34801561045057600080fd5b5061039961045f366004613121565b610e01565b34801561047057600080fd5b5061048461047f36600461314f565b610ef7565b60405190151581526020016103db565b3480156104a057600080fd5b506103996104af366004613121565b610f64565b3480156104c057600080fd5b506018546104d4906001600160a01b031681565b6040516001600160a01b0390911681526020016103db565b3480156104f857600080fd5b506103d16103e881565b34801561050e57600080fd5b506103d1611021565b34801561052357600080fd5b5061039961053236600461317b565b61103f565b34801561054357600080fd5b50610399610552366004613121565b611281565b34801561056357600080fd5b506103d160115481565b34801561057957600080fd5b506104846105883660046131fe565b611368565b34801561059957600080fd5b506103d161142a565b3480156105ae57600080fd5b506104846105bd36600461323f565b6000546001600160a01b0391821691161490565b3480156105dd57600080fd5b506105e6600481565b60405160ff90911681526020016103db565b34801561060457600080fd5b5061048461061336600461323f565b60086020526000908152604090205460ff1681565b34801561063457600080fd5b5061039961064336600461325c565b6114b2565b34801561065457600080fd5b5061048461066336600461323f565b60096020526000908152604090205460ff1681565b34801561068457600080fd5b506016546104d4906001600160a01b031681565b3480156106a457600080fd5b506103996106b33660046132b8565b61162e565b3480156106c457600080fd5b506103996106d3366004613075565b611718565b3480156106e457600080fd5b506104846106f336600461323f565b61182c565b34801561070457600080fd5b506103d1600d5481565b34801561071a57600080fd5b506103996107293660046132d5565b61183a565b34801561073a57600080fd5b5060195461048490600160a81b900460ff1681565b34801561075b57600080fd5b506103d161076a36600461323f565b60056020526000908152604090205481565b34801561078857600080fd5b506007546104849060ff1681565b3480156107a257600080fd5b506104846107b136600461314f565b61187b565b3480156107c257600080fd5b506103d160045481565b3480156107d857600080fd5b50610399611a2e565b3480156107ed57600080fd5b506103d160035481565b34801561080357600080fd5b506000546001600160a01b03166104d4565b34801561082157600080fd5b5061048461083036600461323f565b600a6020526000908152604090205460ff1681565b34801561085157600080fd5b506104376040518060400160405280600381526020016229a82360e91b81525081565b34801561088057600080fd5b506103d1600c5481565b34801561089657600080fd5b506104d47f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e81565b3480156108ca57600080fd5b506104846108d936600461314f565b611bb4565b3480156108ea57600080fd5b5060195461048490600160a01b900460ff1681565b34801561090b57600080fd5b5061039961091a36600461323f565b611bc1565b34801561092b57600080fd5b5061039961093a366004613121565b611c31565b34801561094b57600080fd5b5061048461095a36600461323f565b600b6020526000908152604090205460ff1681565b34801561097b57600080fd5b506103d1600e5481565b34801561099157600080fd5b506017546104d4906001600160a01b031681565b3480156109b157600080fd5b506103d160105481565b3480156109c757600080fd5b506103d16109d6366004613301565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0d57600080fd5b50610399610a1c36600461333a565b611d26565b348015610a2d57600080fd5b506103d1600f5481565b348015610a4357600080fd5b506015546104d4906001600160a01b031681565b348015610a6357600080fd5b50610399610a7236600461323f565b611e20565b348015610a8357600080fd5b50610399610a9236600461323f565b611ee6565b348015610aa357600080fd5b506019546104d4906001600160a01b031681565b348015610ac357600080fd5b50610399610ad2366004613358565b612006565b348015610ae357600080fd5b50610484610af236600461323f565b612086565b610b0033612086565b610b255760405162461bcd60e51b8152600401610b1c90613393565b60405180910390fd5b6101f58210610b465760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c145781600b6000868685818110610b6857610b686133fd565b9050602002016020810190610b7d919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f566c2270277919680152b0734389ae919d95ff7e9024c03fc3c7c209ec8412c7848483818110610bd857610bd86133fd565b9050602002016020810190610bed919061323f565b83604051610bfc929190613413565b60405180910390a1610c0d81613444565b9050610b49565b50505050565b610c2333612086565b610c3f5760405162461bcd60e51b8152600401610b1c90613393565b6101f58210610c605760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c14578160096000868685818110610c8257610c826133fd565b9050602002016020810190610c97919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f9fbd25f95d342f2efc070b56d2fadd2341d264ef8c915dc268609b2ca1bb25de848483818110610cf257610cf26133fd565b9050602002016020810190610d07919061323f565b83604051610d16929190613413565b60405180910390a1610d2781613444565b9050610c63565b6000546001600160a01b03163314610d585760405162461bcd60e51b8152600401610b1c9061345f565b60c98210610db65760405162461bcd60e51b815260206004820152602560248201527f474153204572726f723a206d6178206c696d6974206973203230302061646472604482015264657373657360d81b6064820152608401610b1c565b60005b82811015610c1457610df1848483818110610dd657610dd66133fd565b9050602002016020810190610deb919061323f565b836120a4565b610dfa81613444565b9050610db9565b6000546001600160a01b03163314610e2b5760405162461bcd60e51b8152600401610b1c9061345f565b6005811015610e885760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d61782077616c6c6574206c657373207468616e20604482015263302e352560e01b6064820152608401610b1c565b6103e881610e986004600a613563565b610ea7906402540be400613572565b610eb19190613572565b610ebb9190613591565b60048190556040519081527fa69fa556bf940aa0c695b9c8e1b229fdb1476830e2025e44da1028e0c1458d4a906020015b60405180910390a150565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f529086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610f8e5760405162461bcd60e51b8152600401610b1c9061345f565b8063365aabe714610fd45760405162461bcd60e51b815260206004820152601060248201526f4163636964656e74616c20507265737360801b6044820152606401610b1c565b6019805460ff60a01b1916908190556040517f4b4d10c084e3fa6291b99e9e41e22eadfb3b01ca4bb86ae8d7b9fefe1498f52f91610eec91600160a01b90910460ff161515815260200190565b61102d6004600a613563565b61103c906402540be400613572565b81565b6000546001600160a01b031633146110695760405162461bcd60e51b8152600401610b1c9061345f565b336001600160a01b038616146110e357601954600160a01b900460ff166110e35760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420657865637574652074686973206166746572206c61756e636860448201526720697320646f6e6560c01b6064820152608401610b1c565b6101f583106111045760405162461bcd60e51b8152600401610b1c906133b8565b8281146111645760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e206164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b1c565b6000805b848110156111a857838382818110611182576111826133fd565b905060200201358261119491906135b3565b9150806111a081613444565b915050611168565b506001600160a01b0386166000908152600560205260409020548111156112115760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b1c565b60005b848110156112785761126587878784818110611232576112326133fd565b9050602002016020810190611247919061323f565b868685818110611259576112596133fd565b905060200201356120fa565b508061127081613444565b915050611214565b50505050505050565b6000546001600160a01b031633146112ab5760405162461bcd60e51b8152600401610b1c9061345f565b606581106112e65760405162461bcd60e51b81526020600482015260086024820152674d6178203130302560c01b6044820152606401610b1c565b47600060646112f58484613572565b6112ff9190613591565b604051909150339082156108fc029083906000818181858888f1935050505015801561132f573d6000803e3d6000fd5b506040518181527f377153983e64f72f80af47182763316780b9133be808b7082a16710202b8fbda9060200160405180910390a1505050565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914611415576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526006825283812033825290915291909120546113f09184906121ce565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b611420848484612208565b90505b9392505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5490919061148a6004600a613563565b611499906402540be400613572565b6114a391906135cb565b6114ad91906135cb565b905090565b6000546001600160a01b031633146114dc5760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b0384166115475760405162461bcd60e51b815260206004820152602c60248201527f4d61726b6574696e672066656520616464726573732063616e6e6f742062652060448201526b7a65726f206164647265737360a01b6064820152608401610b1c565b6001600160a01b03831661156d5760405162461bcd60e51b8152600401610b1c906135e2565b6001600160a01b0382166115935760405162461bcd60e51b8152600401610b1c906135e2565b601580546001600160a01b038681166001600160a01b031992831681179093556016805487831690841681179091556017805487841690851681179091556018805493871693909416831790935560408051948552602085019190915283019190915260608201527fe9f08cb45ce1bc7184d56d5373ab081a9285f895e077476836bf9c41511b30379060800160405180910390a150505050565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610b1c9061345f565b80156116d157601954600160a01b900460ff166116d15760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207475726e206f6e2077686974656c6973744d6f6465206166746044820152706572206c61756e636820697320646f6e6560781b6064820152608401610b1c565b6007805460ff191682151590811790915560405160ff909116151581527f8b80af1de9d2f031fd114ef79d2de419928f704b3b7f441007ffff0eb006356a90602001610eec565b61172133612086565b61173d5760405162461bcd60e51b8152600401610b1c90613393565b6101f5821061175e5760405162461bcd60e51b8152600401610b1c906133b8565b60005b82811015610c145781600a6000868685818110611780576117806133fd565b9050602002016020810190611795919061323f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f3c4f06d74861dea6c152189f2ac8853b6f789feb0e1182101b7ad9d1858f70e38484838181106117f0576117f06133fd565b9050602002016020810190611805919061323f565b83604051611814929190613413565b60405180910390a161182581613444565b9050611761565b6000610f5e82600019610ef7565b61184333612086565b61185f5760405162461bcd60e51b8152600401610b1c90613393565b601282905560138390556014819055611876612697565b505050565b600080546001600160a01b031633146118a65760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b03831630141561190b5760405162461bcd60e51b815260206004820152602360248201527f746f6b656e416464726573732063616e206e6f7420626520746865205370616360448201526265466960e81b6064820152608401610b1c565b8161197b576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613629565b91505b604080516001600160a01b0385168152602081018490527f960427a4fde284dcc8da2c51a43d210cfd7ed6f4328a24ba33eee49910db564b910160405180910390a160405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611a0a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114239190613642565b6001546001600160a01b03163314611abf5760405162461bcd60e51b815260206004820152604860248201527f596f75206d757374206265206e6f6d696e6174656420617320706f74656e746960448201527f616c206f776e6572206265666f726520796f752063616e2061636365707420746064820152673432903937b6329760c11b608482015260a401610b1c565b600080546001600160a01b03908116825260026020526040808320805460ff19908116909155600180548416855282852080549092161790558254905160008051602061371f83398151915293611b1b93929092169190613413565b60405180910390a16001805460405160008051602061371f83398151915292611b4d926001600160a01b031691613413565b60405180910390a160018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906020015b60405180910390a1565b6000611423338484612208565b6000546001600160a01b03163314611beb5760405162461bcd60e51b8152600401610b1c9061345f565b6001600160a01b03811660009081526002602052604090819020805460ff19166001908117909155905160008051602061371f83398151915291610eec91849190613413565b6000546001600160a01b03163314611c5b5760405162461bcd60e51b8152600401610b1c9061345f565b6005811015611cbe5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c657373206044820152687468616e20302e352560b81b6064820152608401610b1c565b6103e881611cce6004600a613563565b611cdd906402540be400613572565b611ce79190613572565b611cf19190613591565b60038190556040519081527f365a2bb07537fddd750e9ac8d56970e584f83a144bb5225e77491b83bccd118390602001610eec565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610b1c9061345f565b600a611d5d600482613563565b611d6c906402540be400613572565b611d769190613591565b8110611db65760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610b1c565b6019805460ff60a81b1916600160a81b84151581029190911791829055601a8390556040805184815260ff9290930491909116151560208301527f34c2d4c263b6f41223c6d30ae2e7bcb18629892587e0a4138f57ba2c523953d091015b60405180910390a15050565b6000546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610b1c9061345f565b6000546001600160a01b0382811691161415611ea85760405162461bcd60e51b815260206004820152601a60248201527f4f574e45522063616e7420626520756e617574686f72697a65640000000000006044820152606401610b1c565b6001600160a01b038116600090815260026020526040808220805460ff191690555160008051602061371f83398151915291610eec91849190613413565b6000546001600160a01b03163314611f105760405162461bcd60e51b8152600401610b1c9061345f565b6000546001600160a01b0382811691161415611f625760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903a34329037bbb732b960791b6044820152606401610b1c565b6001600160a01b038116611fb85760405162461bcd60e51b815260206004820152601860248201527f43616e206e6f74206265207a65726f20616464726573732e00000000000000006044820152606401610b1c565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fe235b3289f2e990914b334bf6827949c27f6ba58d3e5a1d6f8415037ca1ef22290602001610eec565b6000546001600160a01b031633146120305760405162461bcd60e51b8152600401610b1c9061345f565b600c859055600d849055600e839055600f829055601081905581818461205687896135b3565b61206091906135b3565b61206a91906135b3565b61207491906135b3565b60115561207f612697565b5050505050565b6001600160a01b031660009081526002602052604090205460ff1690565b6001600160a01b03821660009081526008602052604090819020805460ff1916831515179055517ffbffef620aa59069ac83ec31523964cba7de10b5d06ba4499e5af73c769f6ec490611e149084908490613413565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260059091529182205461214b9184906121ce565b6001600160a01b03808616600090815260056020526040808220939093559085168152205461217a9083612886565b6001600160a01b0380851660008181526005602052604090819020939093559151908616906000805160206136ff833981519152906121bc9086815260200190565b60405180910390a35060019392505050565b600081848411156121f25760405162461bcd60e51b8152600401610b1c91906130cc565b5060006121ff84866135cb565b95945050505050565b601b5460009060ff1615612228576122218484846120fa565b9050611423565b6001600160a01b03841660009081526002602052604090205460ff1615801561226a57506001600160a01b03831660009081526002602052604090205460ff16155b156123a35760075460ff16156122d8576001600160a01b03831660009081526008602052604090205460ff166122d85760405162461bcd60e51b815260206004820152601360248201527257686974656c6973742062757973206f6e6c7960681b6044820152606401610b1c565b7f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e6001600160a01b0316846001600160a01b031614158061234b57507f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e6001600160a01b0316836001600160a01b031614155b156123a357601454600114156123a35760405162461bcd60e51b815260206004820152601960248201527f57616c6c6574207472616e73666572732064697361626c6564000000000000006044820152606401610b1c565b6001600160a01b03841660009081526002602052604090205460ff161580156123e557506001600160a01b0384166000908152600b602052604090205460ff16155b801561240a57506001600160a01b0383166000908152600b602052604090205460ff16155b801561244857507f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e6001600160a01b0316836001600160a01b031614155b156124c2576004546001600160a01b0384166000908152600560205260409020546124749084906135b3565b11156124c25760405162461bcd60e51b815260206004820152601860248201527f4d61782057616c6c6574206c696d6974207265616368656400000000000000006044820152606401610b1c565b600354821115806124eb57506001600160a01b0384166000908152600a602052604090205460ff165b8061250e57506001600160a01b0383166000908152600a602052604090205460ff165b6125525760405162461bcd60e51b815260206004820152601560248201527413585e08151608131a5b5a5d08115e18d959591959605a1b6044820152606401610b1c565b61255a6128e5565b1561256757612567612958565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600590915291909120546125b99184906121ce565b6001600160a01b038516600090815260056020908152604080832093909355600990529081205460ff168061260657506001600160a01b03841660009081526009602052604090205460ff165b61261a57612615858486612cec565b61261c565b825b6001600160a01b0385166000908152600560205260409020549091506126429082612886565b6001600160a01b0380861660008181526005602052604090819020939093559151908716906000805160206136ff833981519152906126849085815260200190565b60405180910390a3506001949350505050565b60786126bb60646126b5601354601154612ee790919063ffffffff16565b90612f66565b11156127095760405162461bcd60e51b815260206004820152601f60248201527f427579207461782063616e6e6f74206265206d6f7265207468616e20313225006044820152606401610b1c565b60c861272760646126b5601254601154612ee790919063ffffffff16565b11156127755760405162461bcd60e51b815260206004820181905260248201527f53656c6c207461782063616e6e6f74206265206d6f7265207468616e203230256044820152606401610b1c565b606461279360646126b5601454601154612ee790919063ffffffff16565b11156127ed5760405162461bcd60e51b8152602060048201526024808201527f5472616e73666572205461782063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610b1c565b7f375884ed7f92283ee74d8884b39a803f4aee832b15766fe016b74fc791fc2ada61282a60646126b5601354601154612ee790919063ffffffff16565b61284660646126b5601254601154612ee790919063ffffffff16565b61286260646126b5601454601154612ee790919063ffffffff16565b6040805160ff94851681529284166020840152921691810191909152606001611baa565b60008061289383856135b3565b9050838110156114235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b1c565b6000336001600160a01b037f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e16148015906129235750601b5460ff16155b80156129385750601954600160a81b900460ff165b80156114ad575050601a5430600090815260056020526040902054101590565b601b805460ff19166001179055601054601154600091612977916135cb565b90506000612986826002613572565b600c54601a546129969190613572565b6129a09190613591565b9050600081601a546129b291906135cb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129ec576129ec6133fd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612a4057612a406133fd565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612a8690859060009086903090429060040161365f565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b5050600c54479250612ac99150600290613591565b612ad390866135cb565b94506000612ae2866002613572565b600c54612aef9084613572565b612af99190613591565b9050600086600d5484612b0c9190613572565b612b169190613591565b9050600087600e5485612b299190613572565b612b339190613591565b9050600088600f5486612b469190613572565b612b509190613591565b6015546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612b8b573d6000803e3d6000fd5b506016546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612bc6573d6000803e3d6000fd5b506017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c01573d6000803e3d6000fd5b508715612cd75760195460405163f305d71960e01b81523060048201819052602482018b9052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612c75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9a91906136d0565b505060408051868152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601b805460ff1916905550505050505050565b6000821580612cfb5750601154155b15612d07575081611423565b600060145490507f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e6001600160a01b0316836001600160a01b03161415612d515750601254612d90565b7f000000000000000000000000efc990d5c307b27dc949c8cf58d4fd5e79cba49e6001600160a01b0316856001600160a01b03161415612d9057506013545b6000612dc1612da26103e86064613572565b6126b584612dbb6011548a612ee790919063ffffffff16565b90612ee7565b90506000612de06011546126b560105485612ee790919063ffffffff16565b90506000612dee8383612fa8565b90508015612e585730600090815260056020526040902054612e109082612886565b30600081815260056020526040908190209290925590516001600160a01b038a16906000805160206136ff83398151915290612e4f9085815260200190565b60405180910390a35b8115612ed1576018546001600160a01b0316600090815260056020526040902054612e839083612886565b601880546001600160a01b03908116600090815260056020908152604091829020949094559154915185815291811692908b16916000805160206136ff833981519152910160405180910390a35b612edb8784612fa8565b98975050505050505050565b600082612ef657506000610f5e565b6000612f028385613572565b905082612f0f8583613591565b146114235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b1c565b600061142383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fea565b600061142383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121ce565b6000818361300b5760405162461bcd60e51b8152600401610b1c91906130cc565b5060006121ff8486613591565b60008083601f84011261302a57600080fd5b50813567ffffffffffffffff81111561304257600080fd5b6020830191508360208260051b850101111561305d57600080fd5b9250929050565b801515811461307257600080fd5b50565b60008060006040848603121561308a57600080fd5b833567ffffffffffffffff8111156130a157600080fd5b6130ad86828701613018565b90945092505060208401356130c181613064565b809150509250925092565b600060208083528351808285015260005b818110156130f9578581018301518582016040015282016130dd565b8181111561310b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561313357600080fd5b5035919050565b6001600160a01b038116811461307257600080fd5b6000806040838503121561316257600080fd5b823561316d8161313a565b946020939093013593505050565b60008060008060006060868803121561319357600080fd5b853561319e8161313a565b9450602086013567ffffffffffffffff808211156131bb57600080fd5b6131c789838a01613018565b909650945060408801359150808211156131e057600080fd5b506131ed88828901613018565b969995985093965092949392505050565b60008060006060848603121561321357600080fd5b833561321e8161313a565b9250602084013561322e8161313a565b929592945050506040919091013590565b60006020828403121561325157600080fd5b81356114238161313a565b6000806000806080858703121561327257600080fd5b843561327d8161313a565b9350602085013561328d8161313a565b9250604085013561329d8161313a565b915060608501356132ad8161313a565b939692955090935050565b6000602082840312156132ca57600080fd5b813561142381613064565b6000806000606084860312156132ea57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561331457600080fd5b823561331f8161313a565b9150602083013561332f8161313a565b809150509250929050565b6000806040838503121561334d57600080fd5b823561316d81613064565b600080600080600060a0868803121561337057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526025908201527f474153204572726f723a206d6178206c696d6974206973203530302061646472604082015264657373657360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156134585761345861342e565b5060010190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b808511156134ba5781600019048211156134a0576134a061342e565b808516156134ad57918102915b93841c9390800290613484565b509250929050565b6000826134d157506001610f5e565b816134de57506000610f5e565b81600181146134f457600281146134fe5761351a565b6001915050610f5e565b60ff84111561350f5761350f61342e565b50506001821b610f5e565b5060208310610133831016604e8410600b841016171561353d575081810a610f5e565b613547838361347f565b806000190482111561355b5761355b61342e565b029392505050565b600061142360ff8416836134c2565b600081600019048311821515161561358c5761358c61342e565b500290565b6000826135ae57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156135c6576135c661342e565b500190565b6000828210156135dd576135dd61342e565b500390565b60208082526027908201527f5465616d2066656520616464726573732063616e6e6f74206265207a65726f206040820152666164647265737360c81b606082015260800190565b60006020828403121561363b57600080fd5b5051919050565b60006020828403121561365457600080fd5b815161142381613064565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136af5784516001600160a01b03168352938301939183019160010161368a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136e557600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efb6a1709218b158ea8591fc9269b88652f1c908dc68a79faa865c745a770b9505a2646970667358221220a1fbbff705a80e983d50e8382d2180ca239d259f7599f49b3e675eaa4227d84064736f6c634300080c0033

Deployed Bytecode Sourcemap

4588:16253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16433:373;;;;;;;;;;-1:-1:-1;16433:373:0;;;;;:::i;:::-;;:::i;:::-;;15704:353;;;;;;;;;;-1:-1:-1;15704:353:0;;;;;:::i;:::-;;:::i;6279:49::-;;;;;;;;;;;;;;;;;;;1226:25:1;;;1214:2;1199:18;6279:49:0;;;;;;;;15233:297;;;;;;;;;;-1:-1:-1;15233:297:0;;;;;:::i;:::-;;:::i;4839:39::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4839:39:0;;;;;;;;;;;;:::i;8680:310::-;;;;;;;;;;-1:-1:-1;8680:310:0;;;;;:::i;:::-;;:::i;7784:216::-;;;;;;;;;;-1:-1:-1;7784:216:0;;;;;:::i;:::-;;:::i;:::-;;;2670:14:1;;2663:22;2645:41;;2633:2;2618:18;7784:216:0;2505:187:1;13153:221:0;;;;;;;;;;-1:-1:-1;13153:221:0;;;;;:::i;:::-;;:::i;6093:33::-;;;;;;;;;;-1:-1:-1;6093:33:0;;;;-1:-1:-1;;;;;6093:33:0;;;;;;-1:-1:-1;;;;;2861:32:1;;;2843:51;;2831:2;2816:18;6093:33:0;2697:203:1;5815:45:0;;;;;;;;;;;;5856:4;5815:45;;4972:63;;;;;;;;;;;;;:::i;19270:695::-;;;;;;;;;;-1:-1:-1;19270:695:0;;;;;:::i;:::-;;:::i;12355:356::-;;;;;;;;;;-1:-1:-1;12355:356:0;;;;;:::i;:::-;;:::i;5722:86::-;;;;;;;;;;;;;;;;8302:370;;;;;;;;;;-1:-1:-1;8302:370:0;;;;;:::i;:::-;;:::i;19127:137::-;;;;;;;;;;;;;:::i;2755:103::-;;;;;;;;;;-1:-1:-1;2755:103:0;;;;;:::i;:::-;2810:4;2845:5;-1:-1:-1;;;;;2834:16:0;;;2845:5;;2834:16;;2755:103;4929:34;;;;;;;;;;;;4962:1;4929:34;;;;;4703:4:1;4691:17;;;4673:36;;4661:2;4646:18;4929:34:0;4531:184:1;5318:46:0;;;;;;;;;;-1:-1:-1;5318:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18067:753;;;;;;;;;;-1:-1:-1;18067:753:0;;;;;:::i;:::-;;:::i;5373:44::-;;;;;;;;;;-1:-1:-1;5373:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6019:30;;;;;;;;;;-1:-1:-1;6019:30:0;;;;-1:-1:-1;;;;;6019:30:0;;;14943:278;;;;;;;;;;-1:-1:-1;14943:278:0;;;;;:::i;:::-;;:::i;16065:360::-;;;;;;;;;;-1:-1:-1;16065:360:0;;;;;:::i;:::-;;:::i;8008:122::-;;;;;;;;;;-1:-1:-1;8008:122:0;;;;;:::i;:::-;;:::i;5579:32::-;;;;;;;;;;;;;;;;17377:225;;;;;;;;;;-1:-1:-1;17377:225:0;;;;;:::i;:::-;;:::i;6242:30::-;;;;;;;;;;-1:-1:-1;6242:30:0;;;;-1:-1:-1;;;6242:30:0;;;;;;5157:45;;;;;;;;;;-1:-1:-1;5157:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;5279:32;;;;;;;;;;-1:-1:-1;5279:32:0;;;;;;;;12719:426;;;;;;;;;;-1:-1:-1;12719:426:0;;;;;:::i;:::-;;:::i;5098:50::-;;;;;;;;;;;;;;;;3252:472;;;;;;;;;;;;;:::i;5044:47::-;;;;;;;;;;;;;;;;7559:78;;;;;;;;;;-1:-1:-1;7611:7:0;7629:5;-1:-1:-1;;;;;7629:5:0;7559:78;;5424:48;;;;;;;;;;-1:-1:-1;5424:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4885:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4885:37:0;;;;;5540:32;;;;;;;;;;;;;;;;6166:29;;;;;;;;;;;;;;;8138:156;;;;;;;;;;-1:-1:-1;8138:156:0;;;;;:::i;:::-;;:::i;6204:29::-;;;;;;;;;;-1:-1:-1;6204:29:0;;;;-1:-1:-1;;;6204:29:0;;;;;;2397:138;;;;;;;;;;-1:-1:-1;2397:138:0;;;;;:::i;:::-;;:::i;8996:313::-;;;;;;;;;;-1:-1:-1;8996:313:0;;;;;:::i;:::-;;:::i;5479:52::-;;;;;;;;;;-1:-1:-1;5479:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5618:27;;;;;;;;;;;;;;;;6056:30;;;;;;;;;;-1:-1:-1;6056:30:0;;;;-1:-1:-1;;;;;6056:30:0;;;5686:29;;;;;;;;;;;;;;;;7643:133;;;;;;;;;;-1:-1:-1;7643:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;7745:19:0;;;7727:7;7745:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;7643:133;18828:287;;;;;;;;;;-1:-1:-1;18828:287:0;;;;;:::i;:::-;;:::i;5652:27::-;;;;;;;;;;;;;;;;5977:35;;;;;;;;;;-1:-1:-1;5977:35:0;;;;-1:-1:-1;;;;;5977:35:0;;;2543:204;;;;;;;;;;-1:-1:-1;2543:204:0;;;;;:::i;:::-;;:::i;2981:263::-;;;;;;;;;;-1:-1:-1;2981:263:0;;;;;:::i;:::-;;:::i;6135:24::-;;;;;;;;;;-1:-1:-1;6135:24:0;;;;-1:-1:-1;;;;;6135:24:0;;;17610:449;;;;;;;;;;-1:-1:-1;17610:449:0;;;;;:::i;:::-;;:::i;2866:107::-;;;;;;;;;;-1:-1:-1;2866:107:0;;;;;:::i;:::-;;:::i;16433:373::-;2338:24;2351:10;2338:12;:24::i;:::-;2330:48;;;;-1:-1:-1;;;2330:48:0;;;;;;;:::i;:::-;;;;;;;;;16568:3:::1;16549:22:::0;::::1;16541:71;;;;-1:-1:-1::0;;;16541:71:0::1;;;;;;;:::i;:::-;16628:9;16623:176;16641:20:::0;;::::1;16623:176;;;16719:6;16683:19;:33;16703:9;;16713:1;16703:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16683:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16683:33:0;:42;;-1:-1:-1;;16683:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16745::::1;16766:9:::0;;16776:1;16766:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16780:6;16745:42;;;;;;;:::i;:::-;;;;;;;;16663:3;::::0;::::1;:::i;:::-;;;16623:176;;;;16433:373:::0;;;:::o;15704:353::-;2338:24;2351:10;2338:12;:24::i;:::-;2330:48;;;;-1:-1:-1;;;2330:48:0;;;;;;;:::i;:::-;15831:3:::1;15812:22:::0;::::1;15804:71;;;;-1:-1:-1::0;;;15804:71:0::1;;;;;;;:::i;:::-;15891:9;15886:164;15904:20:::0;;::::1;15886:164;;;15974:6;15946:11;:25;15958:9;;15968:1;15958:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15946:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15946:25:0;:34;;-1:-1:-1;;15946:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16000:38:::1;16017:9:::0;;16027:1;16017:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16031:6;16000:38;;;;;;;:::i;:::-;;;;;;;;15926:3;::::0;::::1;:::i;:::-;;;15886:164;;15233:297:::0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;15359:3:::1;15340:22:::0;::::1;15332:71;;;::::0;-1:-1:-1;;;15332:71:0;;9590:2:1;15332:71:0::1;::::0;::::1;9572:21:1::0;9629:2;9609:18;;;9602:30;9668:34;9648:18;;;9641:62;-1:-1:-1;;;9719:18:1;;;9712:35;9764:19;;15332:71:0::1;9388:401:1::0;15332:71:0::1;15419:9;15414:109;15432:20:::0;;::::1;15414:109;;;15474:37;15491:9;;15501:1;15491:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15504:6;15474:16;:37::i;:::-;15454:3;::::0;::::1;:::i;:::-;;;15414:109;;8680:310:::0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;8816:1:::1;8789:23;:28;;8781:76;;;::::0;-1:-1:-1;;;8781:76:0;;9996:2:1;8781:76:0::1;::::0;::::1;9978:21:1::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;-1:-1:-1;;;10125:18:1;;;10118:34;10169:19;;8781:76:0::1;9794:400:1::0;8781:76:0::1;8929:4;8901:23:::0;5023:12:::1;4962:1;5023:2;:12;:::i;:::-;5010:25;::::0;:10:::1;:25;:::i;:::-;8887:37;;;;:::i;:::-;8886:47;;;;:::i;:::-;8868:15;:65:::0;;;8949:33:::1;::::0;1226:25:1;;;8949:33:0::1;::::0;1214:2:1;1199:18;8949:33:0::1;;;;;;;;8680:310:::0;:::o;7784:216::-;7888:10;7859:4;7876:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7876:32:0;;;;;;;;;;:41;;;7933:37;7859:4;;7876:32;;7933:37;;;;7911:6;1226:25:1;;1214:2;1199:18;;1080:177;7933:37:0;;;;;;;;-1:-1:-1;7988:4:0;7784:216;;;;;:::o;13153:221::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;13235:7:::1;13246:9;13235:20;13227:48;;;::::0;-1:-1:-1;;;13227:48:0;;12179:2:1;13227:48:0::1;::::0;::::1;12161:21:1::0;12218:2;12198:18;;;12191:30;-1:-1:-1;;;12237:18:1;;;12230:46;12293:18;;13227:48:0::1;11977:340:1::0;13227:48:0::1;13303:10;:18:::0;;-1:-1:-1;;;;13303:18:0::1;::::0;;;;13337:29:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;13355:10:0;;::::1;13303:18;13355:10;2670:14:1::0;2663:22;2645:41;;2633:2;2618:18;;2505:187;4972:63:0;5023:12;4962:1;5023:2;:12;:::i;:::-;5010:25;;:10;:25;:::i;:::-;4972:63;:::o;19270:695::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;19393:10:::1;-1:-1:-1::0;;;;;19393:18:0;::::1;;19390:103;;19431:10;::::0;-1:-1:-1;;;19431:10:0;::::1;;;19423:62;;;::::0;-1:-1:-1;;;19423:62:0;;12524:2:1;19423:62:0::1;::::0;::::1;12506:21:1::0;12563:2;12543:18;;;12536:30;12602:34;12582:18;;;12575:62;-1:-1:-1;;;12653:18:1;;;12646:38;12701:19;;19423:62:0::1;12322:404:1::0;19423:62:0::1;19528:3;19509:22:::0;::::1;19501:71;;;;-1:-1:-1::0;;;19501:71:0::1;;;;;;;:::i;:::-;19587:33:::0;;::::1;19579:85;;;::::0;-1:-1:-1;;;19579:85:0;;12933:2:1;19579:85:0::1;::::0;::::1;12915:21:1::0;12972:2;12952:18;;;12945:30;13011:34;12991:18;;;12984:62;-1:-1:-1;;;13062:18:1;;;13055:38;13110:19;;19579:85:0::1;12731:404:1::0;19579:85:0::1;19673:12;19702:6:::0;19698:82:::1;19712:20:::0;;::::1;19698:82;;;19763:6;;19770:1;19763:9;;;;;;;:::i;:::-;;;;;;;19756:4;:16;;;;:::i;:::-;19749:23:::0;-1:-1:-1;19734:3:0;::::1;::::0;::::1;:::i;:::-;;;;19698:82;;;-1:-1:-1::0;;;;;;19796:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:23;-1:-1:-1;19796:23:0::1;19788:63;;;::::0;-1:-1:-1;;;19788:63:0;;13475:2:1;19788:63:0::1;::::0;::::1;13457:21:1::0;13514:2;13494:18;;;13487:30;13553:29;13533:18;;;13526:57;13600:18;;19788:63:0::1;13273:351:1::0;19788:63:0::1;19864:6;19860:102;19874:20:::0;;::::1;19860:102;;;19911:43;19926:4;19931:9;;19941:1;19931:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19944:6;;19951:1;19944:9;;;;;;;:::i;:::-;;;;;;;19911:14;:43::i;:::-;-1:-1:-1::0;19896:3:0;::::1;::::0;::::1;:::i;:::-;;;;19860:102;;;;19383:582;19270:695:::0;;;;;:::o;12355:356::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;12465:3:::1;12446:16;:22;12438:43;;;::::0;-1:-1:-1;;;12438:43:0;;13831:2:1;12438:43:0::1;::::0;::::1;13813:21:1::0;13870:1;13850:18;;;13843:29;-1:-1:-1;;;13888:18:1;;;13881:38;13936:18;;12438:43:0::1;13629:331:1::0;12438:43:0::1;12512:21;12492:17;12603:3;12570:28;12582:16:::0;12512:21;12570:28:::1;:::i;:::-;12568:38;;;;:::i;:::-;12617:43;::::0;12544:62;;-1:-1:-1;12625:10:0::1;::::0;12617:43;::::1;;;::::0;12544:62;;12617:43:::1;::::0;;;12544:62;12625:10;12617:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;12676:27:0::1;::::0;1226:25:1;;;12676:27:0::1;::::0;1214:2:1;1199:18;12676:27:0::1;;;;;;;12427:284;;12355:356:::0;:::o;8302:370::-;-1:-1:-1;;;;;8422:19:0;;8402:4;8422:19;;;:11;:19;;;;;;;;8442:10;8422:31;;;;;;;;-1:-1:-1;;8422:52:0;8419:186;;8524:69;;;;;;;;;;;-1:-1:-1;;;8524:69:0;;;;;;;;-1:-1:-1;;;;;8524:19:0;;-1:-1:-1;8524:19:0;;;:11;:19;;;;;8544:10;8524:31;;;;;;;;;;:69;;8560:6;;8524:35;:69::i;:::-;-1:-1:-1;;;;;8490:19:0;;;;;;:11;:19;;;;;;;;8510:10;8490:31;;;;;;;:103;8419:186;8624:40;8638:6;8646:9;8657:6;8624:13;:40::i;:::-;8617:47;;8302:370;;;;;;:::o;19127:137::-;19240:9;:15;;;;4715:42;19180:7;19222:15;;;;;19180:7;;19240:15;5023:12;4962:1;5023:2;:12;:::i;:::-;5010:25;;:10;:25;:::i;:::-;19208:29;;;;:::i;:::-;:47;;;;:::i;:::-;19200:56;;19127:137;:::o;18067:753::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18242:35:0;::::1;18234:91;;;::::0;-1:-1:-1;;;18234:91:0;;14297:2:1;18234:91:0::1;::::0;::::1;14279:21:1::0;14336:2;14316:18;;;14309:30;14375:34;14355:18;;;14348:62;-1:-1:-1;;;14426:18:1;;;14419:42;14478:19;;18234:91:0::1;14095:408:1::0;18234:91:0::1;-1:-1:-1::0;;;;;18344:30:0;::::1;18336:81;;;;-1:-1:-1::0;;;18336:81:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18436:30:0;::::1;18428:81;;;;-1:-1:-1::0;;;18428:81:0::1;;;;;;;:::i;:::-;18522:20;:44:::0;;-1:-1:-1;;;;;18522:44:0;;::::1;-1:-1:-1::0;;;;;;18522:44:0;;::::1;::::0;::::1;::::0;;;18577:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;18622:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;18667:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;18725:87:::1;::::0;;15185:34:1;;;15250:2;15235:18;;15228:43;;;;15287:18;;15280:43;;;;15354:2;15339:18;;15332:43;18725:87:0::1;::::0;15134:3:1;15119:19;18725:87:0::1;;;;;;;18067:753:::0;;;;:::o;14943:278::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;15023:7:::1;15020:109;;;15054:10;::::0;-1:-1:-1;;;15054:10:0;::::1;;;15046:71;;;::::0;-1:-1:-1;;;15046:71:0;;15588:2:1;15046:71:0::1;::::0;::::1;15570:21:1::0;15627:2;15607:18;;;15600:30;15666:34;15646:18;;;15639:62;-1:-1:-1;;;15717:18:1;;;15710:47;15774:19;;15046:71:0::1;15386:413:1::0;15046:71:0::1;15139:13;:23:::0;;-1:-1:-1;;15139:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15178:35:::1;::::0;15139:23:::1;15199:13:::0;;;2670:14:1;2663:22;2645:41;;15178:35:0::1;::::0;2633:2:1;2618:18;15178:35:0::1;2505:187:1::0;16065:360:0;2338:24;2351:10;2338:12;:24::i;:::-;2330:48;;;;-1:-1:-1;;;2330:48:0;;;;;;;:::i;:::-;16196:3:::1;16177:22:::0;::::1;16169:71;;;;-1:-1:-1::0;;;16169:71:0::1;;;;;;;:::i;:::-;16256:9;16251:167;16269:20:::0;;::::1;16251:167;;;16343:6;16311:15;:29;16327:9;;16337:1;16327:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16311:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16311:29:0;:38;;-1:-1:-1;;16311:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16369:37:::1;16385:9:::0;;16395:1;16385:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16399:6;16369:37;;;;;;;:::i;:::-;;;;;;;;16291:3;::::0;::::1;:::i;:::-;;;16251:167;;8008:122:::0;8063:4;8087:35;8095:7;-1:-1:-1;;8087:7:0;:35::i;17377:225::-;2338:24;2351:10;2338:12;:24::i;:::-;2330:48;;;;-1:-1:-1;;;2330:48:0;;;;;;;:::i;:::-;17477:14:::1;:22:::0;;;17510:13:::1;:20:::0;;;17541:18:::1;:27:::0;;;17581:13:::1;:11;:13::i;:::-;17377:225:::0;;;:::o;12719:426::-;12810:12;2845:5;;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12843:29:0;::::1;12867:4;12843:29;;12835:77;;;::::0;-1:-1:-1;;;12835:77:0;;16006:2:1;12835:77:0::1;::::0;::::1;15988:21:1::0;16045:2;16025:18;;;16018:30;16084:34;16064:18;;;16057:62;-1:-1:-1;;;16135:18:1;;;16128:33;16178:19;;12835:77:0::1;15804:399:1::0;12835:77:0::1;12928:11:::0;12925:95:::1;;12964:44;::::0;-1:-1:-1;;;12964:44:0;;13002:4:::1;12964:44;::::0;::::1;2843:51:1::0;-1:-1:-1;;;;;12964:29:0;::::1;::::0;::::1;::::0;2816:18:1;;12964:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12955:53;;12925:95;13037:32;::::0;;-1:-1:-1;;;;;16589:32:1;;16571:51;;16653:2;16638:18;;16631:34;;;13037:32:0::1;::::0;16544:18:1;13037:32:0::1;;;;;;;13089:48;::::0;-1:-1:-1;;;13089:48:0;;13118:10:::1;13089:48;::::0;::::1;16571:51:1::0;16638:18;;;16631:34;;;-1:-1:-1;;;;;13089:28:0;::::1;::::0;::::1;::::0;16544:18:1;;13089:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3252:472::-:0;3321:14;;-1:-1:-1;;;;;3321:14:0;3307:10;:28;3299:113;;;;-1:-1:-1;;;3299:113:0;;17128:2:1;3299:113:0;;;17110:21:1;17167:2;17147:18;;;17140:30;17206:34;17186:18;;;17179:62;17277:34;17257:18;;;17250:62;-1:-1:-1;;;17328:19:1;;;17321:39;17377:19;;3299:113:0;16926:476:1;3299:113:0;3447:5;3438;;-1:-1:-1;;;;;3438:5:0;;;3423:21;;:14;:21;;;;;;:29;;-1:-1:-1;;3423:29:0;;;;;;3438:5;3478:14;;;;3463:30;;;;;:37;;;;;;;;3535:5;;3518:29;;-1:-1:-1;;;;;;;;;;;3518:29:0;;;3535:5;;;;;3447;3518:29;:::i;:::-;;;;;;;;3580:14;;;3563:37;;-1:-1:-1;;;;;;;;;;;3563:37:0;;;-1:-1:-1;;;;;3580:14:0;;3563:37;:::i;:::-;;;;;;;;3621:14;;;;3613:22;;-1:-1:-1;;;;;3621:14:0;;-1:-1:-1;;;;;;3613:22:0;;;;;;;;3646:27;;;;;;3689;;2843:51:1;;;3689:27:0;;2831:2:1;2816:18;3689:27:0;;;;;;;;3252:472::o;8138:156::-;8218:4;8242:44;8256:10;8268:9;8279:6;8242:13;:44::i;2397:138::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2459:19:0;::::1;;::::0;;;:14:::1;:19;::::0;;;;;;:26;;-1:-1:-1;;2459:26:0::1;2481:4;2459:26:::0;;::::1;::::0;;;2501;;-1:-1:-1;;;;;;;;;;;2501:26:0;::::1;::::0;2474:3;;2481:4;2501:26:::1;:::i;8996:313::-:0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;9130:1:::1;9102:24;:29;;9094:82;;;::::0;-1:-1:-1;;;9094:82:0;;17609:2:1;9094:82:0::1;::::0;::::1;17591:21:1::0;17648:2;17628:18;;;17621:30;17687:34;17667:18;;;17660:62;-1:-1:-1;;;17738:18:1;;;17731:39;17787:19;;9094:82:0::1;17407:405:1::0;9094:82:0::1;9246:4;9217:24:::0;5023:12:::1;4962:1;5023:2;:12;:::i;:::-;5010:25;::::0;:10:::1;:25;:::i;:::-;9203:38;;;;:::i;:::-;9202:48;;;;:::i;:::-;9187:12;:63:::0;;;9266:35:::1;::::0;1226:25:1;;;9266:35:0::1;::::0;1214:2:1;1199:18;9266:35:0::1;1080:177:1::0;18828:287:0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;18950:2:::1;5023:12;4962:1;18950:2:::0;5023:12:::1;:::i;:::-;5010:25;::::0;:10:::1;:25;:::i;:::-;18938:14;;;;:::i;:::-;18927:7;:26;18919:54;;;::::0;-1:-1:-1;;;18919:54:0;;18019:2:1;18919:54:0::1;::::0;::::1;18001:21:1::0;18058:2;18038:18;;;18031:30;-1:-1:-1;;;18077:18:1;;;18070:45;18132:18;;18919:54:0::1;17817:339:1::0;18919:54:0::1;18986:11;:22:::0;;-1:-1:-1;;;;18986:22:0::1;-1:-1:-1::0;;;18986:22:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;19019:13:::1;:23:::0;;;19060:47:::1;::::0;;18329:25:1;;;18986:22:0::1;19095:11:::0;;;::::1;::::0;;;::::1;18397:14:1::0;18390:22;18385:2;18370:18;;18363:50;19060:47:0::1;::::0;18302:18:1;19060:47:0::1;;;;;;;;18828:287:::0;;:::o;2543:204::-;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;2622:5:::1;::::0;-1:-1:-1;;;;;2615:12:0;;::::1;2622:5:::0;::::1;2615:12;;2607:51;;;::::0;-1:-1:-1;;;2607:51:0;;18626:2:1;2607:51:0::1;::::0;::::1;18608:21:1::0;18665:2;18645:18;;;18638:30;18704:28;18684:18;;;18677:56;18750:18;;2607:51:0::1;18424:350:1::0;2607:51:0::1;-1:-1:-1::0;;;;;2669:19:0;::::1;2691:5;2669:19:::0;;;:14:::1;:19;::::0;;;;;:27;;-1:-1:-1;;2669:27:0::1;::::0;;2712;-1:-1:-1;;;;;;;;;;;2712:27:0;::::1;::::0;2684:3;;2691:5;2712:27:::1;:::i;2981:263::-:0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;3074:5:::1;::::0;-1:-1:-1;;;;;3067:12:0;;::::1;3074:5:::0;::::1;3067:12;;3059:42;;;::::0;-1:-1:-1;;;3059:42:0;;18981:2:1;3059:42:0::1;::::0;::::1;18963:21:1::0;19020:2;19000:18;;;18993:30;-1:-1:-1;;;19039:18:1;;;19032:47;19096:18;;3059:42:0::1;18779:341:1::0;3059:42:0::1;-1:-1:-1::0;;;;;3120:17:0;::::1;3112:54;;;::::0;-1:-1:-1;;;3112:54:0;;19327:2:1;3112:54:0::1;::::0;::::1;19309:21:1::0;19366:2;19346:18;;;19339:30;19405:26;19385:18;;;19378:54;19449:18;;3112:54:0::1;19125:348:1::0;3112:54:0::1;3177:14;:20:::0;;-1:-1:-1;;;;;;3177:20:0::1;-1:-1:-1::0;;;;;3177:20:0;::::1;::::0;;::::1;::::0;;;3213:23:::1;::::0;2843:51:1;;;3213:23:0::1;::::0;2831:2:1;2816:18;3213:23:0::1;2697:203:1::0;17610:449:0;2810:4;2845:5;-1:-1:-1;;;;;2845:5:0;2256:10;2834:16;2240:38;;;;-1:-1:-1;;;2240:38:0;;;;;;;:::i;:::-;17770:12:::1;:28:::0;;;17809:12:::1;:28:::0;;;17848:7:::1;:18:::0;;;17877:7:::1;:18:::0;;;17906:10:::1;:24:::0;;;17887:8;17919:11;17858:8;17952:29:::1;17824:13:::0;17785;17952:29:::1;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;:65;;;;:::i;:::-;17941:8;:76:::0;18038:13:::1;:11;:13::i;:::-;17610:449:::0;;;;;:::o;2866:107::-;-1:-1:-1;;;;;2946:19:0;2922:4;2946:19;;;:14;:19;;;;;;;;;2866:107::o;15538:158::-;-1:-1:-1;;;;;15612:19:0;;;;;;:13;:19;;;;;;;:29;;-1:-1:-1;;15612:29:0;;;;;;;15657:31;;;;;15612:19;;:29;;15657:31;:::i;10705:330::-;10835:53;;;;;;;;;;;-1:-1:-1;;;10835:53:0;;;;;;;;-1:-1:-1;;;;;10835:17:0;;10798:4;10835:17;;;:9;:17;;;;;;;:53;;10857:6;;10835:21;:53::i;:::-;-1:-1:-1;;;;;10815:17:0;;;;;;;:9;:17;;;;;;:73;;;;10922:20;;;;;;;:32;;10947:6;10922:24;:32::i;:::-;-1:-1:-1;;;;;10899:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10970:35;;;;;;-1:-1:-1;;;;;;;;;;;10970:35:0;;;10998:6;1226:25:1;;1214:2;1199:18;;1080:177;10970:35:0;;;;;;;;-1:-1:-1;11023:4:0;10705:330;;;;;:::o;422:192::-;508:7;544:12;536:6;;;;528:29;;;;-1:-1:-1;;;528:29:0;;;;;;;;:::i;:::-;-1:-1:-1;568:9:0;580:5;584:1;580;:5;:::i;:::-;568:17;422:192;-1:-1:-1;;;;;422:192:0:o;9317:1376::-;9429:6;;9409:4;;9429:6;;9426:63;;;9445:41;9460:6;9468:9;9479:6;9445:14;:41::i;:::-;9438:48;;;;9426:63;-1:-1:-1;;;;;9505:22:0;;;;;;:14;:22;;;;;;;;9504:23;:53;;;;-1:-1:-1;;;;;;9532:25:0;;;;;;:14;:25;;;;;;;;9531:26;9504:53;9501:345;;;9576:13;;;;9573:108;;;-1:-1:-1;;;;;9617:24:0;;;;;;:13;:24;;;;;;;;9609:56;;;;-1:-1:-1;;;9609:56:0;;19896:2:1;9609:56:0;;;19878:21:1;19935:2;19915:18;;;19908:30;-1:-1:-1;;;19954:18:1;;;19947:49;20013:18;;9609:56:0;19694:343:1;9609:56:0;9710:4;-1:-1:-1;;;;;9700:14:0;:6;-1:-1:-1;;;;;9700:14:0;;;:35;;;;9731:4;-1:-1:-1;;;;;9718:17:0;:9;-1:-1:-1;;;;;9718:17:0;;;9700:35;9697:138;;;9763:18;;9785:1;9763:23;;9755:60;;;;-1:-1:-1;;;9755:60:0;;20244:2:1;9755:60:0;;;20226:21:1;20283:2;20263:18;;;20256:30;20322:27;20302:18;;;20295:55;20367:18;;9755:60:0;20042:349:1;9755:60:0;-1:-1:-1;;;;;9863:22:0;;;;;;:14;:22;;;;;;;;9862:23;:55;;;;-1:-1:-1;;;;;;9890:27:0;;;;;;:19;:27;;;;;;;;9889:28;9862:55;:90;;;;-1:-1:-1;;;;;;9922:30:0;;;;;;:19;:30;;;;;;;;9921:31;9862:90;:111;;;;;9969:4;-1:-1:-1;;;;;9956:17:0;:9;-1:-1:-1;;;;;9956:17:0;;;9862:111;9858:230;;;10033:15;;-1:-1:-1;;;;;9999:20:0;;;;;;:9;:20;;;;;;:29;;10022:6;;9999:29;:::i;:::-;9998:50;;9990:86;;;;-1:-1:-1;;;9990:86:0;;20598:2:1;9990:86:0;;;20580:21:1;20637:2;20617:18;;;20610:30;20676:26;20656:18;;;20649:54;20720:18;;9990:86:0;20396:348:1;9990:86:0;10164:12;;10154:6;:22;;10153:51;;;-1:-1:-1;;;;;;10181:23:0;;;;;;:15;:23;;;;;;;;10153:51;:81;;;-1:-1:-1;;;;;;10208:26:0;;;;;;:15;:26;;;;;;;;10153:81;10145:115;;;;-1:-1:-1;;;10145:115:0;;20951:2:1;10145:115:0;;;20933:21:1;20990:2;20970:18;;;20963:30;-1:-1:-1;;;21009:18:1;;;21002:51;21070:18;;10145:115:0;20749:345:1;10145:115:0;10276:16;:14;:16::i;:::-;10273:35;;;10295:10;:8;:10::i;:::-;10340:53;;;;;;;;;;;-1:-1:-1;;;10340:53:0;;;;;;;;-1:-1:-1;;;;;10340:17:0;;-1:-1:-1;10340:17:0;;;:9;:17;;;;;;;;:53;;10362:6;;10340:21;:53::i;:::-;-1:-1:-1;;;;;10320:17:0;;;;;;:9;:17;;;;;;;;:73;;;;10432:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;10455:22:0;;;;;;:11;:22;;;;;;;;10432:45;10431:93;;10490:34;10498:6;10506;10514:9;10490:7;:34::i;:::-;10431:93;;;10481:6;10431:93;-1:-1:-1;;;;;10560:20:0;;;;;;:9;:20;;;;;;10406:118;;-1:-1:-1;10560:40:0;;10406:118;10560:24;:40::i;:::-;-1:-1:-1;;;;;10537:20:0;;;;;;;:9;:20;;;;;;;:63;;;;10620:43;;;;;;-1:-1:-1;;;;;;;;;;;10620:43:0;;;10648:14;1226:25:1;;1214:2;1199:18;;1080:177;10620:43:0;;;;;;;;-1:-1:-1;10681:4:0;;9317:1376;-1:-1:-1;;;;9317:1376:0:o;16814:555::-;16905:3;16865:36;16897:3;16865:27;16878:13;;16865:8;;:12;;:27;;;;:::i;:::-;:31;;:36::i;:::-;:43;;16857:87;;;;-1:-1:-1;;;16857:87:0;;21301:2:1;16857:87:0;;;21283:21:1;21340:2;21320:18;;;21313:30;21379:33;21359:18;;;21352:61;21430:18;;16857:87:0;21099:355:1;16857:87:0;17004:3;16963:37;16996:3;16963:28;16976:14;;16963:8;;:12;;:28;;;;:::i;:37::-;:44;;16955:89;;;;-1:-1:-1;;;16955:89:0;;21661:2:1;16955:89:0;;;21643:21:1;;;21680:18;;;21673:30;21739:34;21719:18;;;21712:62;21791:18;;16955:89:0;21459:356:1;16955:89:0;17108:3;17063:41;17100:3;17063:32;17076:18;;17063:8;;:12;;:32;;;;:::i;:41::-;:48;;17055:97;;;;-1:-1:-1;;;17055:97:0;;22022:2:1;17055:97:0;;;22004:21:1;22061:2;22041:18;;;22034:30;22100:34;22080:18;;;22073:62;-1:-1:-1;;;22151:18:1;;;22144:34;22195:19;;17055:97:0;21820:400:1;17055:97:0;17170:191;17187:36;17219:3;17187:27;17200:13;;17187:8;;:12;;:27;;;;:::i;:36::-;17245:37;17278:3;17245:28;17258:14;;17245:8;;:12;;:28;;;;:::i;:37::-;17304:41;17341:3;17304:32;17317:18;;17304:8;;:12;;:32;;;;:::i;:41::-;17170:191;;;22445:4:1;22433:17;;;22415:36;;22487:17;;;22482:2;22467:18;;22460:45;22541:17;;22521:18;;;22514:45;;;;22403:2;22388:18;17170:191:0;22225:340:1;93:181:0;151:7;;183:5;187:1;183;:5;:::i;:::-;171:17;;212:1;207;:6;;199:46;;;;-1:-1:-1;;;199:46:0;;22772:2:1;199:46:0;;;22754:21:1;22811:2;22791:18;;;22784:30;22850:29;22830:18;;;22823:57;22897:18;;199:46:0;22570:351:1;12150:197:0;12199:4;12223:10;-1:-1:-1;;;;;12237:4:0;12223:18;;;;;:38;;-1:-1:-1;12255:6:0;;;;12254:7;12223:38;:62;;;;-1:-1:-1;12274:11:0;;-1:-1:-1;;;12274:11:0;;;;12223:62;:116;;;;-1:-1:-1;;12326:13:0;;12316:4;12298:24;;;;:9;:24;;;;;;:41;;;12150:197::o;13382:1551::-;6375:6;:13;;-1:-1:-1;;6375:13:0;6384:4;6375:13;;;13466:10:::1;::::0;13455:8:::1;::::0;6375:6;;13455:21:::1;::::0;::::1;:::i;:::-;13433:43:::0;-1:-1:-1;13489:23:0::1;13547:15;13433:43:::0;13561:1:::1;13547:15;:::i;:::-;13532:12;;13516:13;;:28;;;;:::i;:::-;13515:48;;;;:::i;:::-;13489:74;;13574:20;13613:15;13597:13;;:31;;;;:::i;:::-;13665:16;::::0;;13679:1:::1;13665:16:::0;;;;;::::1;::::0;;13574:54;;-1:-1:-1;13641:21:0::1;::::0;13665:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;13665:16:0::1;13641:40;;13710:4;13692;13697:1;13692:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;13692:23:0::1;;;-1:-1:-1::0;;;;;13692:23:0::1;;;::::0;::::1;13736:4;13726;13731:1;13726:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13726:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;13753:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;13753:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;13825:12;;13753:6:::1;::::0;13868:4;;13895::::1;::::0;13915:15:::1;::::0;13753:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14037:12:0::1;::::0;13974:21:::1;::::0;-1:-1:-1;14037:16:0::1;::::0;-1:-1:-1;14052:1:0::1;::::0;14037:16:::1;:::i;:::-;14022:32;::::0;:11;:32:::1;:::i;:::-;14008:46:::0;-1:-1:-1;14075:26:0::1;14134:15;14008:46:::0;14148:1:::1;14134:15;:::i;:::-;14117:12;::::0;14105:24:::1;::::0;:9;:24:::1;:::i;:::-;14104:46;;;;:::i;:::-;14075:75;;14161:26;14219:11;14203:12;;14191:9;:24;;;;:::i;:::-;14190:40;;;;:::i;:::-;14161:69;;14241:21;14289:11;14278:7;;14266:9;:19;;;;:::i;:::-;14265:35;;;;:::i;:::-;14241:59;;14311:21;14359:11;14348:7;;14336:9;:19;;;;:::i;:::-;14335:35;;;;:::i;:::-;14391:20;::::0;14383:58:::1;::::0;14311:59;;-1:-1:-1;;;;;;14391:20:0::1;::::0;14383:58;::::1;;;::::0;14422:18;;14391:20:::1;14383:58:::0;14391:20;14383:58;14422:18;14391:20;14383:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;14460:15:0::1;::::0;14452:48:::1;::::0;-1:-1:-1;;;;;14460:15:0;;::::1;::::0;14452:48;::::1;;;::::0;14486:13;;14460:15:::1;14452:48:::0;14460:15;14452:48;14486:13;14460:15;14452:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;14519:15:0::1;::::0;14511:48:::1;::::0;-1:-1:-1;;;;;14519:15:0;;::::1;::::0;14511:48;::::1;;;::::0;14545:13;;14519:15:::1;14511:48:::0;14519:15;14511:48;14545:13;14519:15;14511:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;14575:19:0;;14572:354:::1;;14610:6;::::0;:236:::1;::::0;-1:-1:-1;;;14610:236:0;;14686:4:::1;14610:236;::::0;::::1;24384:34:1::0;;;24434:18;;;24427:34;;;14610:6:0::1;24477:18:1::0;;;24470:34;;;24520:18;;;24513:34;24563:19;;;24556:44;14816:15:0::1;24616:19:1::0;;;24609:35;-1:-1:-1;;;;;14610:6:0;;::::1;::::0;:22:::1;::::0;14640:18;;24318:19:1;;14610:236:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14866:48:0::1;::::0;;25140:25:1;;;25196:2;25181:18;;25174:34;;;14866:48:0::1;::::0;-1:-1:-1;25113:18:1;14866:48:0::1;;;;;;;14572:354;-1:-1:-1::0;;6393:6:0;:14;;-1:-1:-1;;6393:14:0;;;-1:-1:-1;;;;;;;13382:1551:0:o;11043:1099::-;11129:7;11152:11;;;:28;;-1:-1:-1;11167:8:0;;:13;11152:28;11149:72;;;-1:-1:-1;11203:6:0;11196:13;;11149:72;11233:18;11254;;11233:39;;11301:4;-1:-1:-1;;;;;11288:17:0;:9;-1:-1:-1;;;;;11288:17:0;;11285:154;;;-1:-1:-1;11335:14:0;;11285:154;;;11380:4;-1:-1:-1;;;;;11370:14:0;:6;-1:-1:-1;;;;;11370:14:0;;11367:72;;;-1:-1:-1;11414:13:0;;11367:72;11451:17;11471:62;11512:20;5856:4;11529:3;11512:20;:::i;:::-;11471:36;11496:10;11471:20;11482:8;;11471:6;:10;;:20;;;;:::i;:::-;:24;;:36::i;:62::-;11451:82;;11544:21;11568:39;11598:8;;11568:25;11582:10;;11568:9;:13;;:25;;;;:::i;:39::-;11544:63;-1:-1:-1;11618:22:0;11643:28;:9;11544:63;11643:13;:28::i;:::-;11618:53;-1:-1:-1;11687:18:0;;11684:187;;11766:4;11748:24;;;;:9;:24;;;;;;:44;;11777:14;11748:28;:44::i;:::-;11739:4;11721:24;;;;:9;:24;;;;;;;:71;;;;11812:47;;-1:-1:-1;;;;;11812:47:0;;;-1:-1:-1;;;;;;;;;;;11812:47:0;;;11844:14;1226:25:1;;1214:2;1199:18;;1080:177;11812:47:0;;;;;;;;11684:187;11894:17;;11891:203;;11969:18;;-1:-1:-1;;;;;11969:18:0;11959:29;;;;:9;:29;;;;;;:48;;11993:13;11959:33;:48::i;:::-;11937:18;;;-1:-1:-1;;;;;11937:18:0;;;11927:29;;;;:9;:29;;;;;;;;;:80;;;;12044:18;;12027:51;;1226:25:1;;;12044:18:0;;;;12027:51;;;;-1:-1:-1;;;;;;;;;;;12027:51:0;1199:18:1;12027:51:0;;;;;;;11891:203;12113:21;:6;12124:9;12113:10;:21::i;:::-;12106:28;11043:1099;-1:-1:-1;;;;;;;;11043:1099:0:o;620:250::-;678:7;702:6;698:47;;-1:-1:-1;732:1:0;725:8;;698:47;757:9;769:5;773:1;769;:5;:::i;:::-;757:17;-1:-1:-1;802:1:0;793:5;797:1;757:17;793:5;:::i;:::-;:10;785:56;;;;-1:-1:-1;;;785:56:0;;25421:2:1;785:56:0;;;25403:21:1;25460:2;25440:18;;;25433:30;25499:34;25479:18;;;25472:62;-1:-1:-1;;;25550:18:1;;;25543:31;25591:19;;785:56:0;25219:397:1;876:132:0;934:7;961:39;965:1;968;961:39;;;;;;;;;;;;;;;;;:3;:39::i;280:136::-;338:7;365:43;369:1;372;365:43;;;;;;;;;;;;;;;;;:3;:43::i;1014:189::-;1100:7;1135:12;1128:5;1120:28;;;;-1:-1:-1;;;1120:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1159:9:0;1171:5;1175:1;1171;:5;:::i;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:118::-;472:5;465:13;458:21;451:5;448:32;438:60;;494:1;491;484:12;438:60;386:118;:::o;509:566::-;601:6;609;617;670:2;658:9;649:7;645:23;641:32;638:52;;;686:1;683;676:12;638:52;726:9;713:23;759:18;751:6;748:30;745:50;;;791:1;788;781:12;745:50;830:70;892:7;883:6;872:9;868:22;830:70;:::i;:::-;919:8;;-1:-1:-1;804:96:1;-1:-1:-1;;1004:2:1;989:18;;976:32;1017:28;976:32;1017:28;:::i;:::-;1064:5;1054:15;;;509:566;;;;;:::o;1262:597::-;1374:4;1403:2;1432;1421:9;1414:21;1464:6;1458:13;1507:6;1502:2;1491:9;1487:18;1480:34;1532:1;1542:140;1556:6;1553:1;1550:13;1542:140;;;1651:14;;;1647:23;;1641:30;1617:17;;;1636:2;1613:26;1606:66;1571:10;;1542:140;;;1700:6;1697:1;1694:13;1691:91;;;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1691:91;-1:-1:-1;1843:2:1;1822:15;-1:-1:-1;;1818:29:1;1803:45;;;;1850:2;1799:54;;1262:597;-1:-1:-1;;;1262:597:1:o;1864:180::-;1923:6;1976:2;1964:9;1955:7;1951:23;1947:32;1944:52;;;1992:1;1989;1982:12;1944:52;-1:-1:-1;2015:23:1;;1864:180;-1:-1:-1;1864:180:1:o;2049:131::-;-1:-1:-1;;;;;2124:31:1;;2114:42;;2104:70;;2170:1;2167;2160:12;2185:315;2253:6;2261;2314:2;2302:9;2293:7;2289:23;2285:32;2282:52;;;2330:1;2327;2320:12;2282:52;2369:9;2356:23;2388:31;2413:5;2388:31;:::i;:::-;2438:5;2490:2;2475:18;;;;2462:32;;-1:-1:-1;;;2185:315:1:o;2905:908::-;3036:6;3044;3052;3060;3068;3121:2;3109:9;3100:7;3096:23;3092:32;3089:52;;;3137:1;3134;3127:12;3089:52;3176:9;3163:23;3195:31;3220:5;3195:31;:::i;:::-;3245:5;-1:-1:-1;3301:2:1;3286:18;;3273:32;3324:18;3354:14;;;3351:34;;;3381:1;3378;3371:12;3351:34;3420:70;3482:7;3473:6;3462:9;3458:22;3420:70;:::i;:::-;3509:8;;-1:-1:-1;3394:96:1;-1:-1:-1;3597:2:1;3582:18;;3569:32;;-1:-1:-1;3613:16:1;;;3610:36;;;3642:1;3639;3632:12;3610:36;;3681:72;3745:7;3734:8;3723:9;3719:24;3681:72;:::i;:::-;2905:908;;;;-1:-1:-1;2905:908:1;;-1:-1:-1;3772:8:1;;3655:98;2905:908;-1:-1:-1;;;2905:908:1:o;3818:456::-;3895:6;3903;3911;3964:2;3952:9;3943:7;3939:23;3935:32;3932:52;;;3980:1;3977;3970:12;3932:52;4019:9;4006:23;4038:31;4063:5;4038:31;:::i;:::-;4088:5;-1:-1:-1;4145:2:1;4130:18;;4117:32;4158:33;4117:32;4158:33;:::i;:::-;3818:456;;4210:7;;-1:-1:-1;;;4264:2:1;4249:18;;;;4236:32;;3818:456::o;4279:247::-;4338:6;4391:2;4379:9;4370:7;4366:23;4362:32;4359:52;;;4407:1;4404;4397:12;4359:52;4446:9;4433:23;4465:31;4490:5;4465:31;:::i;4720:671::-;4806:6;4814;4822;4830;4883:3;4871:9;4862:7;4858:23;4854:33;4851:53;;;4900:1;4897;4890:12;4851:53;4939:9;4926:23;4958:31;4983:5;4958:31;:::i;:::-;5008:5;-1:-1:-1;5065:2:1;5050:18;;5037:32;5078:33;5037:32;5078:33;:::i;:::-;5130:7;-1:-1:-1;5189:2:1;5174:18;;5161:32;5202:33;5161:32;5202:33;:::i;:::-;5254:7;-1:-1:-1;5313:2:1;5298:18;;5285:32;5326:33;5285:32;5326:33;:::i;:::-;4720:671;;;;-1:-1:-1;4720:671:1;;-1:-1:-1;;4720:671:1:o;5396:241::-;5452:6;5505:2;5493:9;5484:7;5480:23;5476:32;5473:52;;;5521:1;5518;5511:12;5473:52;5560:9;5547:23;5579:28;5601:5;5579:28;:::i;5642:316::-;5719:6;5727;5735;5788:2;5776:9;5767:7;5763:23;5759:32;5756:52;;;5804:1;5801;5794:12;5756:52;-1:-1:-1;;5827:23:1;;;5897:2;5882:18;;5869:32;;-1:-1:-1;5948:2:1;5933:18;;;5920:32;;5642:316;-1:-1:-1;5642:316:1:o;5963:388::-;6031:6;6039;6092:2;6080:9;6071:7;6067:23;6063:32;6060:52;;;6108:1;6105;6098:12;6060:52;6147:9;6134:23;6166:31;6191:5;6166:31;:::i;:::-;6216:5;-1:-1:-1;6273:2:1;6258:18;;6245:32;6286:33;6245:32;6286:33;:::i;:::-;6338:7;6328:17;;;5963:388;;;;;:::o;6356:309::-;6421:6;6429;6482:2;6470:9;6461:7;6457:23;6453:32;6450:52;;;6498:1;6495;6488:12;6450:52;6537:9;6524:23;6556:28;6578:5;6556:28;:::i;7156:454::-;7251:6;7259;7267;7275;7283;7336:3;7324:9;7315:7;7311:23;7307:33;7304:53;;;7353:1;7350;7343:12;7304:53;-1:-1:-1;;7376:23:1;;;7446:2;7431:18;;7418:32;;-1:-1:-1;7497:2:1;7482:18;;7469:32;;7548:2;7533:18;;7520:32;;-1:-1:-1;7599:3:1;7584:19;7571:33;;-1:-1:-1;7156:454:1;-1:-1:-1;7156:454:1:o;7615:335::-;7817:2;7799:21;;;7856:2;7836:18;;;7829:30;-1:-1:-1;;;7890:2:1;7875:18;;7868:41;7941:2;7926:18;;7615:335::o;7955:401::-;8157:2;8139:21;;;8196:2;8176:18;;;8169:30;8235:34;8230:2;8215:18;;8208:62;-1:-1:-1;;;8301:2:1;8286:18;;8279:35;8346:3;8331:19;;7955:401::o;8361:127::-;8422:10;8417:3;8413:20;8410:1;8403:31;8453:4;8450:1;8443:15;8477:4;8474:1;8467:15;8493:284;-1:-1:-1;;;;;8679:32:1;;;;8661:51;;8755:14;8748:22;8743:2;8728:18;;8721:50;8649:2;8634:18;;8493:284::o;8782:127::-;8843:10;8838:3;8834:20;8831:1;8824:31;8874:4;8871:1;8864:15;8898:4;8895:1;8888:15;8914:135;8953:3;-1:-1:-1;;8974:17:1;;8971:43;;;8994:18;;:::i;:::-;-1:-1:-1;9041:1:1;9030:13;;8914:135::o;9054:329::-;9256:2;9238:21;;;9295:1;9275:18;;;9268:29;-1:-1:-1;;;9328:2:1;9313:18;;9306:36;9374:2;9359:18;;9054:329::o;10199:422::-;10288:1;10331:5;10288:1;10345:270;10366:7;10356:8;10353:21;10345:270;;;10425:4;10421:1;10417:6;10413:17;10407:4;10404:27;10401:53;;;10434:18;;:::i;:::-;10484:7;10474:8;10470:22;10467:55;;;10504:16;;;;10467:55;10583:22;;;;10543:15;;;;10345:270;;;10349:3;10199:422;;;;;:::o;10626:806::-;10675:5;10705:8;10695:80;;-1:-1:-1;10746:1:1;10760:5;;10695:80;10794:4;10784:76;;-1:-1:-1;10831:1:1;10845:5;;10784:76;10876:4;10894:1;10889:59;;;;10962:1;10957:130;;;;10869:218;;10889:59;10919:1;10910:10;;10933:5;;;10957:130;10994:3;10984:8;10981:17;10978:43;;;11001:18;;:::i;:::-;-1:-1:-1;;11057:1:1;11043:16;;11072:5;;10869:218;;11171:2;11161:8;11158:16;11152:3;11146:4;11143:13;11139:36;11133:2;11123:8;11120:16;11115:2;11109:4;11106:12;11102:35;11099:77;11096:159;;;-1:-1:-1;11208:19:1;;;11240:5;;11096:159;11287:34;11312:8;11306:4;11287:34;:::i;:::-;11357:6;11353:1;11349:6;11345:19;11336:7;11333:32;11330:58;;;11368:18;;:::i;:::-;11406:20;;10626:806;-1:-1:-1;;;10626:806:1:o;11437:140::-;11495:5;11524:47;11565:4;11555:8;11551:19;11545:4;11524:47;:::i;11582:168::-;11622:7;11688:1;11684;11680:6;11676:14;11673:1;11670:21;11665:1;11658:9;11651:17;11647:45;11644:71;;;11695:18;;:::i;:::-;-1:-1:-1;11735:9:1;;11582:168::o;11755:217::-;11795:1;11821;11811:132;;11865:10;11860:3;11856:20;11853:1;11846:31;11900:4;11897:1;11890:15;11928:4;11925:1;11918:15;11811:132;-1:-1:-1;11957:9:1;;11755:217::o;13140:128::-;13180:3;13211:1;13207:6;13204:1;13201:13;13198:39;;;13217:18;;:::i;:::-;-1:-1:-1;13253:9:1;;13140:128::o;13965:125::-;14005:4;14033:1;14030;14027:8;14024:34;;;14038:18;;:::i;:::-;-1:-1:-1;14075:9:1;;13965:125::o;14508:403::-;14710:2;14692:21;;;14749:2;14729:18;;;14722:30;14788:34;14783:2;14768:18;;14761:62;-1:-1:-1;;;14854:2:1;14839:18;;14832:37;14901:3;14886:19;;14508:403::o;16208:184::-;16278:6;16331:2;16319:9;16310:7;16306:23;16302:32;16299:52;;;16347:1;16344;16337:12;16299:52;-1:-1:-1;16370:16:1;;16208:184;-1:-1:-1;16208:184:1:o;16676:245::-;16743:6;16796:2;16784:9;16775:7;16771:23;16767:32;16764:52;;;16812:1;16809;16802:12;16764:52;16844:9;16838:16;16863:28;16885:5;16863:28;:::i;23058:980::-;23320:4;23368:3;23357:9;23353:19;23399:6;23388:9;23381:25;23425:2;23463:6;23458:2;23447:9;23443:18;23436:34;23506:3;23501:2;23490:9;23486:18;23479:31;23530:6;23565;23559:13;23596:6;23588;23581:22;23634:3;23623:9;23619:19;23612:26;;23673:2;23665:6;23661:15;23647:29;;23694:1;23704:195;23718:6;23715:1;23712:13;23704:195;;;23783:13;;-1:-1:-1;;;;;23779:39:1;23767:52;;23874:15;;;;23839:12;;;;23815:1;23733:9;23704:195;;;-1:-1:-1;;;;;;;23955:32:1;;;;23950:2;23935:18;;23928:60;-1:-1:-1;;;24019:3:1;24004:19;23997:35;23916:3;23058:980;-1:-1:-1;;;23058:980:1:o;24655:306::-;24743:6;24751;24759;24812:2;24800:9;24791:7;24787:23;24783:32;24780:52;;;24828:1;24825;24818:12;24780:52;24857:9;24851:16;24841:26;;24907:2;24896:9;24892:18;24886:25;24876:35;;24951:2;24940:9;24936:18;24930:25;24920:35;;24655:306;;;;;:::o

Swarm Source

ipfs://a1fbbff705a80e983d50e8382d2180ca239d259f7599f49b3e675eaa4227d840

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.