BNB Price: $619.07 (+2.34%)
 

Overview

BNB Balance

BNB Smart Chain LogoBNB Smart Chain LogoBNB Smart Chain Logo0.0157000145 BNB

BNB Value

$9.72 (@ $619.07/BNB)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve921050712026-04-12 12:43:022 days ago1775997782IN
0x49717878...Dee1feb1e
0 BNB0.000006940.15
Approve918334252026-04-11 2:43:003 days ago1775875380IN
0x49717878...Dee1feb1e
0 BNB0.000001720.06565
Approve918333792026-04-11 2:42:403 days ago1775875360IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve916837452026-04-10 7:59:144 days ago1775807954IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve916782472026-04-10 7:17:574 days ago1775805477IN
0x49717878...Dee1feb1e
0 BNB0.000003320.0715
Approve914510782026-04-09 2:52:045 days ago1775703124IN
0x49717878...Dee1feb1e
0 BNB0.000003050.06565
Approve914510432026-04-09 2:51:485 days ago1775703108IN
0x49717878...Dee1feb1e
0 BNB0.000003080.0663065
Approve908578272026-04-06 0:36:148 days ago1775435774IN
0x49717878...Dee1feb1e
0 BNB0.000006930.15
Approve892434632026-03-28 14:34:2417 days ago1774708464IN
0x49717878...Dee1feb1e
0 BNB0.000006980.15
Transfer892434572026-03-28 14:34:2217 days ago1774708462IN
0x49717878...Dee1feb1e
0 BNB0.000029350.06565
Approve892008532026-03-28 9:14:4117 days ago1774689281IN
0x49717878...Dee1feb1e
0 BNB0.000003050.06565
Approve889829442026-03-27 5:59:5318 days ago1774591193IN
0x49717878...Dee1feb1e
0 BNB0.000003050.06565
Approve886203042026-03-25 8:38:1620 days ago1774427896IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve884645672026-03-24 13:09:5521 days ago1774357795IN
0x49717878...Dee1feb1e
0 BNB0.000003050.06565
Approve884218682026-03-24 7:49:2221 days ago1774338562IN
0x49717878...Dee1feb1e
0 BNB0.000003720.08
Approve883631672026-03-24 0:28:4821 days ago1774312128IN
0x49717878...Dee1feb1e
0 BNB0.000006930.15
Approve881747762026-03-23 0:55:0922 days ago1774227309IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve880326632026-03-22 7:08:4323 days ago1774163323IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve878863792026-03-21 12:51:2324 days ago1774097483IN
0x49717878...Dee1feb1e
0 BNB0.000003720.08
Transfer878039012026-03-21 2:32:3324 days ago1774060353IN
0x49717878...Dee1feb1e
0 BNB0.000027950.065
Transfer878038212026-03-21 2:31:5724 days ago1774060317IN
0x49717878...Dee1feb1e
0 BNB0.000028230.06565
Transfer878037242026-03-21 2:31:1324 days ago1774060273IN
0x49717878...Dee1feb1e
0 BNB0.000028230.06565
Transfer878036462026-03-21 2:30:3824 days ago1774060238IN
0x49717878...Dee1feb1e
0 BNB0.000028910.065
Approve877565302026-03-20 20:37:1524 days ago1774039035IN
0x49717878...Dee1feb1e
0 BNB0.000001590.06565
Approve876779672026-03-20 10:47:3625 days ago1774003656IN
0x49717878...Dee1feb1e
0 BNB0.000006930.15
View all transactions

Latest 2 internal transactions

Parent Transaction Hash Block From To
422397642024-09-14 6:53:41577 days ago1726296821
0x49717878...Dee1feb1e
 Contract Creation0 BNB
422397642024-09-14 6:53:41577 days ago1726296821  Contract Creation0 BNB
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x25C8Fbfa...bb5e5f1E5
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PandaToken

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2024-05-25
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

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

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

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

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint);

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

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

    function approve(address _spender, uint _value) external;

    function transferFrom(address _from, address _to, uint _value) external ;

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

abstract contract Ownable {
    address internal _owner;

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

    constructor() {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "new is 0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}
interface IWBNB {
    function withdraw(uint wad) external; //unwarp WBNB -> BNB
}
interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function token0() external view returns (address);

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

    function totalSupply() external view returns (uint256);
}

contract PandaToken is IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address payable public fundAddress;

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 public kb;
    uint256 public maxWalletAmount;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _rewardList;
    mapping(address => bool) public isMaxEatExempt;

    uint256 private _tTotal;

    ISwapRouter public _swapRouter;
    address public currency;
    mapping(address => bool) public _swapPairList;

    bool public antiSYNC = true;
    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);
    TokenDistributor public _tokenDistributor;


    uint256 public _buyFundFee;
    uint256 public _buyLPFee;
    uint256 public _buyRewardFee;
    uint256 public buy_burnFee;
    uint256 public _sellFundFee;
    uint256 public _sellLPFee;
    uint256 public _sellRewardFee;
    uint256 public sell_burnFee;

    uint256 public addLiquidityFee;
    uint256 public removeLiquidityFee;

    uint256 public airdropNumbs;
    bool public currencyIsEth;

    address public rewardToken;
    uint256 public startTradeBlock;
    uint256 public startLPBlock;

    address public _mainPair;

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

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;

    bool public enableWalletLimit;
    bool public enableChangeTax;
    bool public airdropEnable;

    address[] public rewardPath;

    constructor(
        string[] memory stringParams,
        address[] memory addressParams,
        uint256[] memory numberParams,
        bool[] memory boolParams
    ) {
        _name = stringParams[0];
        _symbol = stringParams[1];
        _decimals = numberParams[0];
        _tTotal = numberParams[1];

        fundAddress = payable(addressParams[0]);
        require(!isContract(fundAddress), "no contract ");
        currency = addressParams[1];
        _swapRouter = ISwapRouter(addressParams[2]);
        address ReceiveAddress = addressParams[3];
        rewardToken = addressParams[4];

        maxWalletAmount = numberParams[2];

        enableOffTrade = boolParams[0];
        enableKillBlock = boolParams[1];
        enableRewardList = boolParams[2];

        enableWalletLimit = boolParams[3];
        enableChangeTax = boolParams[4];
        currencyIsEth = boolParams[5];
        airdropEnable = boolParams[6];

        _owner = tx.origin;
        rewardPath = [currency];
        if (currency != rewardToken) {
            if (currencyIsEth == false) {
                rewardPath.push(_swapRouter.WETH());
            }
            if (rewardToken != _swapRouter.WETH()) rewardPath.push(rewardToken);
        }

        IERC20(currency).approve(address(_swapRouter), MAX);

        _allowances[address(this)][address(_swapRouter)] = MAX;

        ISwapFactory swapFactory = ISwapFactory(_swapRouter.factory());
        _mainPair = swapFactory.createPair(address(this), currency);

        _swapPairList[_mainPair] = true;

        _buyFundFee = numberParams[3];
        _buyLPFee = numberParams[4];
        _buyRewardFee = numberParams[5];
        buy_burnFee = numberParams[6];

        _sellFundFee = numberParams[7];
        _sellLPFee = numberParams[8];
        _sellRewardFee = numberParams[9];

        sell_burnFee = numberParams[10];

        require(
            _buyFundFee + _buyLPFee + _buyRewardFee + buy_burnFee <= 2500 && 
            _sellFundFee + _sellLPFee + _sellRewardFee + sell_burnFee <= 2500
            
        );

        kb = numberParams[11];
        airdropNumbs = numberParams[12];
        require(airdropNumbs <= 5, "!<= 5");

        _balances[ReceiveAddress] = _tTotal;
        emit Transfer(address(0), ReceiveAddress, _tTotal);

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[address(_swapRouter)] = true;
        _feeWhiteList[msg.sender] = true;

        isMaxEatExempt[msg.sender] = true;
        isMaxEatExempt[fundAddress] = true;
        isMaxEatExempt[ReceiveAddress] = true;
        isMaxEatExempt[address(_swapRouter)] = true;
        isMaxEatExempt[address(_mainPair)] = true;
        isMaxEatExempt[address(this)] = true;
        isMaxEatExempt[address(0xdead)] = true;

        excludeHolder[address(0)] = true;
        excludeHolder[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        holderRewardCondition = 10 ** IERC20(currency).decimals() / 10;

        _tokenDistributor = new TokenDistributor(currency);

    }

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

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

    function decimals() external view override returns (uint256) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    
    function setAntiSYNCEnable(bool s) public onlyOwner {
        antiSYNC = s;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (account == _mainPair && msg.sender == _mainPair && antiSYNC) {
            require(_balances[_mainPair] > 0, "!sync");
        }
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override  {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisMaxEatExempt(address holder, bool exempt) external onlyOwner {
        isMaxEatExempt[holder] = exempt;
    }

    function setkb(uint256 a) external onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns (uint256) {
        if (_rewardList[account]) {
            return 1;
        } else {
            return 0;
        }
    }



    function setAirDropEnable(bool status) external onlyOwner {
        airdropEnable = status;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    

    function setAirdropNumbs(uint256 newValue) external onlyOwner {
        require(newValue <= 5, "!<= 5");
        airdropNumbs = newValue;
    }

    function _isAddLiquidity() internal view returns (bool isAdd) {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = currency;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(mainPair));
        isAdd = bal > r;
    }

    function _isRemoveLiquidity() internal view returns (bool isRemove) {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = currency;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(mainPair));
        isRemove = r >= bal;
    }
    uint256 public numTokensSellRate = 20; // 100%

    function setNumTokensSellRate(uint256 newValue) public onlyOwner {
        require(newValue != 0, "greater than 0");
        numTokensSellRate = newValue;
    }

    uint256 public swapAtAmount;

    function setSwapAtAmount(uint256 newValue) public onlyOwner {
        swapAtAmount = newValue;
    }
    function _transfer(address from, address to, uint256 amount) private {
        // uint256 balance = balanceOf(from);
        require(balanceOf(from) >= amount, "balanceNotEnough");
        require(isReward(from) == 0, "isReward != 0 !");


        bool takeFee;
        bool isSell;
        bool isRemove;
        bool isAdd;

        if (_swapPairList[to]) {
            isAdd = _isAddLiquidity();

        } else if (_swapPairList[from]) {
            isRemove = _isRemoveLiquidity();
        }

        
        if (startTradeBlock == 0 && enableOffTrade) {
            if (
                !_feeWhiteList[from] &&
                !_feeWhiteList[to] &&
                !_swapPairList[from] &&
                !_swapPairList[to]
            ) {
                require(!isContract(to), "cant add other lp");
            }
        }
        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (enableOffTrade) {
                    bool star = startTradeBlock > 0;
                    require(
                        star || (0 < startLPBlock && isAdd)
                    );
                }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb &&
                    !_swapPairList[to]
                ) {
                    _rewardList[to] = true;
                }
                if (
                    airdropEnable &&
                    airdropNumbs > 0
                ) {
                    address ad;
                    for (uint256 i = 0; i < airdropNumbs; i++) {
                        ad = address(
                            uint160(
                                uint256(
                                    keccak256(
                                        abi.encodePacked(i, amount, block.timestamp)
                                    )
                                )
                            )
                        );
                        _basicTransfer(from, ad, 1);
                    }
                    amount -= airdropNumbs * 1;
                }

                if (_swapPairList[to]) {
                    if (!inSwap && !isAdd) {
                        uint256 contractTokenBalance = balanceOf(address(this));
                        if (contractTokenBalance > swapAtAmount) {
                            uint256 swapFee = _buyFundFee +
                                _buyRewardFee +
                                _buyLPFee +
                                _sellFundFee +
                                _sellRewardFee +
                                _sellLPFee;
                            uint256 numTokensSellToFund = amount * numTokensSellRate /
                                    100;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                if (!isAdd && !isRemove) takeFee = true; // just swap fee
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }


        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            isSell,
            isAdd,
            isRemove
        );

        if (from != address(this)) {
            if (isSell) {
                addHolder(from);
            }
            processReward(350000);
        }
    }       

    function setAddLiquidityFee(uint256 newValue) external onlyOwner {
        require(newValue <= 2500, ">25!");
        addLiquidityFee = newValue;
    }

    function setRemoveLiquidityFee(uint256 newValue) external onlyOwner {
        require(newValue <= 10000, ">10000!");
        removeLiquidityFee = newValue;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool isAdd,
        bool isRemove
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellRewardFee + _sellLPFee;

            } else {
                swapFee = _buyFundFee + _buyLPFee + _buyRewardFee;
            }

            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }

            uint256 burnAmount;
            if (!isSell) {
                //buy
                burnAmount = (tAmount * buy_burnFee) / 10000;
            } else {
                //sell
                burnAmount = (tAmount * sell_burnFee) / 10000;
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, address(0xdead), burnAmount);
            }
        }


        if (isAdd && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 addLiquidityFeeAmount;
            addLiquidityFeeAmount = (tAmount * addLiquidityFee) / 10000;

            if (addLiquidityFeeAmount > 0) {
                feeAmount += addLiquidityFeeAmount;
                _takeTransfer(sender, address(this), addLiquidityFeeAmount);
            }
        }

        if (isRemove && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 removeLiquidityFeeAmount;
            removeLiquidityFeeAmount = (tAmount * removeLiquidityFee) / 10000;

            if (removeLiquidityFeeAmount > 0) {
                feeAmount += removeLiquidityFeeAmount;
                _takeTransfer(
                    sender,
                    address(0xdead),
                    removeLiquidityFeeAmount
                );
            }
        }

        if (!isMaxEatExempt[recipient] && enableWalletLimit)
            require(
                (balanceOf(recipient) + tAmount - feeAmount) <= maxWalletAmount,
                "over limit"
            );
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 value
    );

    event Failed_addLiquidity();

    uint256 public totalFundAmountReceive;

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 swapFee
    ) private lockTheSwap {
        if (swapFee == 0 || tokenAmount == 0) {
            return;
        }

        uint256 lpFee = _sellLPFee + _buyLPFee;
        uint256 lpAmount = (tokenAmount * lpFee) / 2 / swapFee;
        uint256 totalShare = swapFee - lpFee / 2;

        IERC20 _c = IERC20(currency);

        address[] memory toCurrencyPath = new address[](2);
        toCurrencyPath[0] = address(this);
        toCurrencyPath[1] = currency;
        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount,
                0,
                toCurrencyPath,
                address(_tokenDistributor),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                0
            );
        }

        uint256 newBal = _c.balanceOf(address(_tokenDistributor));
        if (newBal != 0) {
            _c.transferFrom(address(_tokenDistributor), address(this), newBal);
        }

        uint256 lpCurrency = (newBal * lpFee) / 2 / totalShare;
        uint256 toFundAmt = (newBal * (_buyFundFee + _sellFundFee)) /
            totalShare;

        // fund
        if (toFundAmt > 0) {
            if (currencyIsEth) {
                IWBNB(currency).withdraw(toFundAmt);
                fundAddress.transfer(toFundAmt);
            } else {
                _c.transfer(fundAddress, toFundAmt);
            }
            totalFundAmountReceive += toFundAmt;
        }

        // generate lp
        if (lpAmount > 0 && lpCurrency > 0) {
            try
                _swapRouter.addLiquidity(
                    address(this),
                    address(currency),
                    lpAmount,
                    lpCurrency,
                    0,
                    0,
                    fundAddress,
                    block.timestamp
                )
            {} catch {
                emit Failed_addLiquidity();
            }
        }
        // lpreward
        if (_buyRewardFee + _sellRewardFee == 0) {
            return;
        }
        if(rewardPath.length != 1){
            try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                _c.balanceOf(address(this)),
                0,
                rewardPath,
                address(this),
                block.timestamp
            )
            {} catch {
                emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                    1
                );
            }

        }
        
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setFundAddress(address payable addr) external onlyOwner {
        require(!isContract(addr), "no contract ");
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function isContract(address _addr) private view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function startLP() external onlyOwner {
        require(0 == startLPBlock);
        startLPBlock = block.number;
    }

    function stopLP() external onlyOwner {
        startLPBlock = 0;
    }

    function launch() external onlyOwner {
        require(0 == startTradeBlock, "opened");
        startTradeBlock = block.number;
    }

    function setFeeWhiteList(
        address[] calldata addr,
        bool enable
    ) public onlyOwner {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        require(enableChangeTax, "disabled");
        _buyFundFee = customs[0];
        _buyLPFee = customs[1];
        _buyRewardFee = customs[2];
        buy_burnFee = customs[3];

        _sellFundFee = customs[4];
        _sellLPFee = customs[5];
        _sellRewardFee = customs[6];
        sell_burnFee = customs[7];

        require(
            _buyRewardFee + _buyLPFee + _buyFundFee + buy_burnFee < 2500,
            "buy!<25"
        );
        require(
            _sellRewardFee + _sellLPFee + _sellFundFee + sell_burnFee < 2500,
            "sell!<25"
        );
    }

    function multi_bclist(
        address[] calldata addresses,
        bool value
    ) public onlyOwner {
        require(enableRewardList, "disabled");
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    function setClaims(address token, uint256 amount) external onlyFunder {
        if (token == address(0)){
            payable(msg.sender).transfer(amount);
        }else{
            IERC20(token).transfer(msg.sender, amount);
        }
    }
    modifier onlyFunder() {
        require(_owner == msg.sender || fundAddress == msg.sender, "!Funder");
        _;
    }
    receive() external payable {}

    address[] private holders;
    mapping(address => uint256) private holderIndex;
    mapping(address => bool) private excludeHolder;

    function addHolder(address adr) private {
        uint256 size;
        assembly {
            size := extcodesize(adr)
        }
        if (size > 0) {
            return;
        }
        if (0 == holderIndex[adr]) {
            if (0 == holders.length || holders[0] != adr) {
                holderIndex[adr] = holders.length;
                holders.push(adr);
            }
        }
    }

    function multiAddHolder(address[] calldata accounts) public onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            if (ISwapPair(_mainPair).balanceOf(accounts[i]) > 0) {
                addHolder(accounts[i]);
            }
        }
    }

    uint256 private currentIndex;
    uint256 public holderRewardCondition;
    uint256 private progressRewardBlock;
    uint256 public processRewardWaitBlock = 20;

    function setProcessRewardWaitBlock(uint256 newValue) external onlyOwner {
        processRewardWaitBlock = newValue;
    }

    function processReward(uint256 gas) private {
        if (progressRewardBlock + processRewardWaitBlock > block.number) {
            return;
        }

        IERC20 FIST = IERC20(rewardToken);

        uint256 balance = FIST.balanceOf(address(this));
        if (balance < holderRewardCondition) {
            return;
        }


        IERC20 holdToken = IERC20(_mainPair);
        uint256 holdTokenTotal = holdToken.totalSupply();

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = holders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        balance = FIST.balanceOf(address(this));
        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            tokenBalance = holdToken.balanceOf(shareHolder);
            if (tokenBalance > 0 && !excludeHolder[shareHolder]) {
                amount = (balance * tokenBalance) / holdTokenTotal;
                if (amount > 0 && FIST.balanceOf(address(this)) > amount) {
                    FIST.transfer(shareHolder, amount);
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        progressRewardBlock = block.number;
    }

    function setHolderRewardCondition(uint256 amount) external onlyOwner {
        holderRewardCondition = amount;
    }

    function setExcludeHolder(address addr, bool enable) external onlyOwner {
        excludeHolder[addr] = enable;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string[]","name":"stringParams","type":"string[]"},{"internalType":"address[]","name":"addressParams","type":"address[]"},{"internalType":"uint256[]","name":"numberParams","type":"uint256[]"},{"internalType":"bool[]","name":"boolParams","type":"bool[]"}],"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":[],"name":"Failed_addLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSYNC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"multiAddHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewardWaitBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sell_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAddLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"s","type":"bool"}],"name":"setAntiSYNCEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProcessRewardWaitBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRemoveLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisMaxEatExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","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":"totalFundAmountReceive","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x60806040526010805460ff1916600117905560146021819055602a553480156200002857600080fd5b5060405162004e5d38038062004e5d8339810160408190526200004b9162000f3c565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35083600081518110620000a257620000a2620010e0565b602002602001015160049081620000ba919062001185565b5083600181518110620000d157620000d1620010e0565b602002602001015160059081620000e9919062001185565b5081600081518110620001005762000100620010e0565b602002602001015160068190555081600181518110620001245762000124620010e0565b6020026020010151600c8190555082600081518110620001485762000148620010e0565b6020908102919091010151600380546001600160a01b0319166001600160a01b03909216918217905562000182903b63ffffffff16151590565b15620001c45760405162461bcd60e51b815260206004820152600c60248201526b037379031b7b73a3930b1ba160a51b60448201526064015b60405180910390fd5b82600181518110620001da57620001da620010e0565b6020026020010151600e60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826002815181106200021e576200021e620010e0565b6020026020010151600d60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600083600381518110620002645762000264620010e0565b6020026020010151905083600481518110620002845762000284620010e0565b6020026020010151601c60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555082600281518110620002c857620002c8620010e0565b602002602001015160088190555081600081518110620002ec57620002ec620010e0565b6020026020010151601f60146101000a81548160ff02191690831515021790555081600181518110620003235762000323620010e0565b6020026020010151601f60156101000a81548160ff021916908315150217905550816002815181106200035a576200035a620010e0565b6020026020010151601f60166101000a81548160ff02191690831515021790555081600381518110620003915762000391620010e0565b6020026020010151601f60176101000a81548160ff02191690831515021790555081600481518110620003c857620003c8620010e0565b6020026020010151601f60186101000a81548160ff02191690831515021790555081600581518110620003ff57620003ff620010e0565b6020026020010151601c60006101000a81548160ff02191690831515021790555081600681518110620004365762000436620010e0565b602090810291909101810151601f8054911515600160c81b0260ff60c81b19909216919091179055600080546001600160a01b0319163217905560408051808301909152600e546001600160a01b03168152620004969190600162000cd1565b50601c54600e546001600160a01b0390811661010090920416146200065657601c5460ff1615156000036200056857600d54604080516315ab88c960e31b815290516020926001600160a01b03169163ad5c464891600480830192869291908290030181865afa1580156200050f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000535919062001251565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e2919062001251565b601c5461010090046001600160a01b039081169116146200065657601c54602080546001810182556000919091527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546101009092046001600160a01b03166001600160a01b03199092169190911790555b600e54600d5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401600060405180830381600087803b158015620006a857600080fd5b505af1158015620006bd573d6000803e3d6000fd5b5050306000908152600260209081526040808320600d80546001600160a01b039081168652918452828520600019905554825163c45a015560e01b8152925194965016935063c45a015592600480830193928290030181865afa15801562000729573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074f919062001251565b600e546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291925082169063c9c65396906044016020604051808303816000875af1158015620007a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007ca919062001251565b601f80546001600160a01b0319166001600160a01b039290921691821790556000908152600f60205260409020805460ff191660011790558351849060039081106200081a576200081a620010e0565b6020026020010151601181905550836004815181106200083e576200083e620010e0565b602002602001015160128190555083600581518110620008625762000862620010e0565b602002602001015160138190555083600681518110620008865762000886620010e0565b602002602001015160148190555083600781518110620008aa57620008aa620010e0565b602002602001015160158190555083600881518110620008ce57620008ce620010e0565b602002602001015160168190555083600981518110620008f257620008f2620010e0565b602002602001015160178190555083600a81518110620009165762000916620010e0565b60200260200101516018819055506109c46014546013546012546011546200093f91906200128c565b6200094b91906200128c565b6200095791906200128c565b111580156200099757506109c46018546017546016546015546200097c91906200128c565b6200098891906200128c565b6200099491906200128c565b11155b620009a157600080fd5b83600b81518110620009b757620009b7620010e0565b602002602001015160078190555083600c81518110620009db57620009db620010e0565b6020026020010151601b819055506005601b54111562000a265760405162461bcd60e51b8152602060048201526005602482015264213c3d203560d81b6044820152606401620001bb565b600c546001600160a01b038316600081815260016020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600380546001600160a01b0390811660009081526009602090815260408083208054600160ff1991821681179092558886168086528386208054831684179055308087528487208054841685179055600d80548916885285882080548516861790553388528588208054851686179055600b87528588208054851686179055985488168752848720805484168517905590865283862080548316841790559654861685528285208054821683179055601f5486168552828520805482168317905595845281842080548716821790557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac34158054871682179055602683527f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac805487168217905561dead9093527f436f594ac5248b7e44d6a4b4c35ba3e500f642e681dd33b10ee0fd4f06d15f3b8054909516909217909355600e54815163313ce56760e01b81529151600a94919093169263313ce5679260048082019392918290030181865afa15801562000c12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c389190620012a8565b62000c4590600a620013bf565b62000c519190620013cd565b602855600e546040516001600160a01b039091169062000c719062000d3b565b6001600160a01b039091168152602001604051809103906000f08015801562000c9e573d6000803e3d6000fd5b50601060026101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505050620013f0565b82805482825590600052602060002090810192821562000d29579160200282015b8281111562000d2957825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000cf2565b5062000d3792915062000d49565b5090565b61010b8062004d5283390190565b5b8082111562000d37576000815560010162000d4a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000da15762000da162000d60565b604052919050565b60006001600160401b0382111562000dc55762000dc562000d60565b5060051b60200190565b80516001600160a01b038116811462000de757600080fd5b919050565b600082601f83011262000dfe57600080fd5b8151602062000e1762000e118362000da9565b62000d76565b82815260059290921b8401810191818101908684111562000e3757600080fd5b8286015b8481101562000e5d5762000e4f8162000dcf565b835291830191830162000e3b565b509695505050505050565b600082601f83011262000e7a57600080fd5b8151602062000e8d62000e118362000da9565b82815260059290921b8401810191818101908684111562000ead57600080fd5b8286015b8481101562000e5d578051835291830191830162000eb1565b600082601f83011262000edc57600080fd5b8151602062000eef62000e118362000da9565b82815260059290921b8401810191818101908684111562000f0f57600080fd5b8286015b8481101562000e5d578051801515811462000f2e5760008081fd5b835291830191830162000f13565b6000806000806080858703121562000f5357600080fd5b84516001600160401b038082111562000f6b57600080fd5b818701915087601f83011262000f8057600080fd5b8151602062000f9362000e118362000da9565b82815260059290921b8401810191818101908b84111562000fb357600080fd5b8286015b84811015620010605780518681111562000fd057600080fd5b8701603f81018e1362000fe257600080fd5b848101518781111562000ff95762000ff962000d60565b6200100d601f8201601f1916870162000d76565b8181528f6040838501011115620010245760008081fd5b60005b82811015620010455783810160400151828201890152870162001027565b50600091810187019190915284525091830191830162000fb7565b50918a01519198509093505050808211156200107b57600080fd5b620010898883890162000dec565b94506040870151915080821115620010a057600080fd5b620010ae8883890162000e68565b93506060870151915080821115620010c557600080fd5b50620010d48782880162000eca565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806200110b57607f821691505b6020821081036200112c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200118057600081815260208120601f850160051c810160208610156200115b5750805b601f850160051c820191505b818110156200117c5782815560010162001167565b5050505b505050565b81516001600160401b03811115620011a157620011a162000d60565b620011b981620011b28454620010f6565b8462001132565b602080601f831160018114620011f15760008415620011d85750858301515b600019600386901b1c1916600185901b1785556200117c565b600085815260208120601f198616915b82811015620012225788860151825594840194600190910190840162001201565b5085821015620012415787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200126457600080fd5b6200126f8262000dcf565b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620012a257620012a262001276565b92915050565b600060208284031215620012bb57600080fd5b5051919050565b600181815b8085111562001303578160001904821115620012e757620012e762001276565b80851615620012f557918102915b93841c9390800290620012c7565b509250929050565b6000826200131c57506001620012a2565b816200132b57506000620012a2565b81600181146200134457600281146200134f576200136f565b6001915050620012a2565b60ff84111562001363576200136362001276565b50506001821b620012a2565b5060208310610133831016604e8410600b841016171562001394575081810a620012a2565b620013a08383620012c2565b8060001904821115620013b757620013b762001276565b029392505050565b60006200126f83836200130b565b600082620013eb57634e487b7160e01b600052601260045260246000fd5b500490565b61395280620014006000396000f3fe6080604052600436106104565760003560e01c806370a082311161023f578063b60368fc11610139578063dd62ed3e116100b6578063ea10510e1161007a578063ea10510e14610cee578063eb10b74114610d0e578063ef6e4f1714610d24578063f2fde38b14610d3a578063f7c618c114610d5a57600080fd5b8063dd62ed3e14610c32578063e32759cf14610c78578063e5a6b10f14610c8e578063e5c2b0a614610cae578063e82bef2914610cce57600080fd5b8063bfc3137e116100fd578063bfc3137e14610ba4578063c213d62d14610bba578063c92d567e14610bda578063ce0192f914610bfb578063d598643314610c1157600080fd5b8063b60368fc14610b08578063b9fbc49d14610b28578063bba30f8f14610b3e578063bd25bf2914610b5e578063be4fe9a514610b8e57600080fd5b80638f6cd17d116101c7578063a9059cbb1161018b578063a9059cbb14610a7b578063aa4bde2814610a9b578063aa582b4214610ab1578063adc7955d14610ad1578063b02d757f14610ae757600080fd5b80638f6cd17d146109fb57806395d89b4114610a11578063992db38f14610a265780639cc0e3c714610a3b578063a842486114610a5b57600080fd5b806385dc30041161020e57806385dc30041461096157806386917524146109815780638718b24f146109975780638c2fc7ad146109bd5780638da5cb5b146109dd57600080fd5b806370a08231146108ec578063715018a61461090c57806379dc880c146109215780637db1342c1461094157600080fd5b8063255412d9116103505780634188bf5a116102d85780636108a3db1161029c5780636108a3db1461086b578063621823e61461088b5780636402511e146108a1578063697cfc19146108c15780636b611368146108d657600080fd5b80634188bf5a146107de5780634482004e146107fe5780634d5ce03814610814578063553193ca146108345780635a7ba73c1461084a57600080fd5b80633b1cd1871161031f5780633b1cd187146107325780633bb82eb6146107485780633bfe62ca146107685780633c11100d1461077e57806340aa81fe146107ae57600080fd5b8063255412d9146106d75780632dab693f146106ed578063313ce5671461070357806335c960891461071857600080fd5b80630f890b86116103de5780631846a5a4116103a25780631846a5a41461062957806318d128551461064a5780631dbbaebd1461065f578063206c17bb1461067f57806323b872dd146106b757600080fd5b80630f890b86146105a557806314a432c9146105ba578063150e4c47146105da57806315d07d82146105fa57806318160ddd1461061457600080fd5b8063060e304e11610425578063060e304e146104ff57806306fdde031461051f57806307313d8d1461054157806307c3adf014610561578063095ea7b31461058557600080fd5b806301339c211461046257806301986fad1461047957806303da2b23146104be57806305833c2b146104df57600080fd5b3661045d57005b600080fd5b34801561046e57600080fd5b50610477610d7f565b005b34801561048557600080fd5b506104a9610494366004613429565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104ca57600080fd5b50601f546104a990600160b81b900460ff1681565b3480156104eb57600080fd5b506104776104fa36600461345b565b610df1565b34801561050b57600080fd5b5061047761051a366004613494565b610e46565b34801561052b57600080fd5b50610534610eb6565b6040516104b591906134ad565b34801561054d57600080fd5b5061047761055c3660046134fb565b610f48565b34801561056d57600080fd5b5061057760135481565b6040519081526020016104b5565b34801561059157600080fd5b506104776105a0366004613518565b610f90565b3480156105b157600080fd5b50610477610f9f565b3480156105c657600080fd5b506104776105d5366004613494565b610fd8565b3480156105e657600080fd5b506104776105f5366004613590565b611007565b34801561060657600080fd5b50601c546104a99060ff1681565b34801561062057600080fd5b50600c54610577565b34801561063557600080fd5b50601f546104a990600160c81b900460ff1681565b34801561065657600080fd5b506104776110a8565b34801561066b57600080fd5b5061047761067a3660046135e7565b6110d9565b34801561068b57600080fd5b50600d5461069f906001600160a01b031681565b6040516001600160a01b0390911681526020016104b5565b3480156106c357600080fd5b506104776106d2366004613629565b6111fd565b3480156106e357600080fd5b5061057760145481565b3480156106f957600080fd5b5061057760075481565b34801561070f57600080fd5b50600654610577565b34801561072457600080fd5b506010546104a99060ff1681565b34801561073e57600080fd5b5061057760195481565b34801561075457600080fd5b50610477610763366004613494565b61128c565b34801561077457600080fd5b5061057760155481565b34801561078a57600080fd5b506104a9610799366004613429565b600f6020526000908152604090205460ff1681565b3480156107ba57600080fd5b506104a96107c9366004613429565b600b6020526000908152604090205460ff1681565b3480156107ea57600080fd5b50601f5461069f906001600160a01b031681565b34801561080a57600080fd5b50610577601e5481565b34801561082057600080fd5b5061057761082f366004613429565b6112bb565b34801561084057600080fd5b50610577601d5481565b34801561085657600080fd5b50601f546104a990600160a81b900460ff1681565b34801561087757600080fd5b50610477610886366004613590565b6112f1565b34801561089757600080fd5b50610577602a5481565b3480156108ad57600080fd5b506104776108bc366004613494565b6113db565b3480156108cd57600080fd5b5061047761140a565b3480156108e257600080fd5b5061057760185481565b3480156108f857600080fd5b50610577610907366004613429565b611443565b34801561091857600080fd5b506104776114eb565b34801561092d57600080fd5b5061047761093c366004613494565b61155f565b34801561094d57600080fd5b5061047761095c366004613494565b6115c9565b34801561096d57600080fd5b5061047761097c366004613429565b6115f8565b34801561098d57600080fd5b5061057760225481565b3480156109a357600080fd5b5060105461069f906201000090046001600160a01b031681565b3480156109c957600080fd5b506104776109d836600461345b565b6116a0565b3480156109e957600080fd5b506000546001600160a01b031661069f565b348015610a0757600080fd5b5061057760215481565b348015610a1d57600080fd5b506105346116f5565b348015610a3257600080fd5b50610477611704565b348015610a4757600080fd5b5061069f610a56366004613494565b611741565b348015610a6757600080fd5b50610477610a7636600461345b565b61176b565b348015610a8757600080fd5b506104a9610a96366004613518565b6117c0565b348015610aa757600080fd5b5061057760085481565b348015610abd57600080fd5b50610477610acc3660046135e7565b6117d7565b348015610add57600080fd5b5061057760165481565b348015610af357600080fd5b50601f546104a990600160b01b900460ff1681565b348015610b1457600080fd5b50610477610b23366004613518565b611a07565b348015610b3457600080fd5b5061057760125481565b348015610b4a57600080fd5b50610477610b59366004613494565b611b0c565b348015610b6a57600080fd5b506104a9610b79366004613429565b600a6020526000908152604090205460ff1681565b348015610b9a57600080fd5b5061057760175481565b348015610bb057600080fd5b50610577601a5481565b348015610bc657600080fd5b50610477610bd5366004613494565b611b77565b348015610be657600080fd5b50601f546104a990600160a01b900460ff1681565b348015610c0757600080fd5b5061057760115481565b348015610c1d57600080fd5b50601f546104a990600160c01b900460ff1681565b348015610c3e57600080fd5b50610577610c4d36600461366a565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c8457600080fd5b50610577601b5481565b348015610c9a57600080fd5b50600e5461069f906001600160a01b031681565b348015610cba57600080fd5b50610477610cc9366004613494565b611ba6565b348015610cda57600080fd5b5060035461069f906001600160a01b031681565b348015610cfa57600080fd5b50610477610d093660046134fb565b611c0e565b348015610d1a57600080fd5b5061057760285481565b348015610d3057600080fd5b5061057760235481565b348015610d4657600080fd5b50610477610d55366004613429565b611c4b565b348015610d6657600080fd5b50601c5461069f9061010090046001600160a01b031681565b6000546001600160a01b03163314610db25760405162461bcd60e51b8152600401610da990613698565b60405180910390fd5b601d5415610deb5760405162461bcd60e51b81526020600482015260066024820152651bdc195b995960d21b6044820152606401610da9565b43601d55565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e705760405162461bcd60e51b8152600401610da990613698565b80600003610eb15760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401610da9565b602155565b606060048054610ec5906136b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef1906136b8565b8015610f3e5780601f10610f1357610100808354040283529160200191610f3e565b820191906000526020600020905b815481529060010190602001808311610f2157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f725760405162461bcd60e51b8152600401610da990613698565b601f8054911515600160c81b0260ff60c81b19909216919091179055565b610f9b338383611d11565b5050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610da990613698565b601f805460ff60c01b19169055565b6000546001600160a01b031633146110025760405162461bcd60e51b8152600401610da990613698565b600755565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610da990613698565b60005b828110156110a2578160096000868685818110611053576110536136f2565b90506020020160208101906110689190613429565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061109a8161371e565b915050611034565b50505050565b6000546001600160a01b031633146110d25760405162461bcd60e51b8152600401610da990613698565b6000601e55565b6000546001600160a01b031633146111035760405162461bcd60e51b8152600401610da990613698565b60005b818110156111f857601f546000906001600160a01b03166370a08231858585818110611134576111346136f2565b90506020020160208101906111499190613429565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561118d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b19190613737565b11156111e6576111e68383838181106111cc576111cc6136f2565b90506020020160208101906111e19190613429565b611d73565b806111f08161371e565b915050611106565b505050565b611208838383611e43565b6001600160a01b0383166000908152600260209081526040808320338452909152902054600019146111f8576001600160a01b0383166000908152600260209081526040808320338452909152902054611263908290613750565b6001600160a01b0384166000908152600260209081526040808320338452909152902055505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b8152600401610da990613698565b602a55565b6001600160a01b0381166000908152600a602052604081205460ff16156112e457506001919050565b506000919050565b919050565b6000546001600160a01b0316331461131b5760405162461bcd60e51b8152600401610da990613698565b601f54600160b01b900460ff1661135f5760405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606401610da9565b60c9821061136c57600080fd5b60005b828110156110a25781600a600086868581811061138e5761138e6136f2565b90506020020160208101906113a39190613429565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113d48161371e565b905061136f565b6000546001600160a01b031633146114055760405162461bcd60e51b8152600401610da990613698565b602255565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610da990613698565b601f805460ff60b81b19169055565b601f546000906001600160a01b03838116911614801561146d5750601f546001600160a01b031633145b801561147b575060105460ff165b156114cf57601f546001600160a01b03166000908152600160205260409020546114cf5760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401610da9565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146115155760405162461bcd60e51b8152600401610da990613698565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115895760405162461bcd60e51b8152600401610da990613698565b6109c48111156115c45760405162461bcd60e51b8152600401610da9906020808252600490820152633e32352160e01b604082015260600190565b601955565b6000546001600160a01b031633146115f35760405162461bcd60e51b8152600401610da990613698565b600855565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610da990613698565b803b63ffffffff16156116665760405162461bcd60e51b815260206004820152600c60248201526b037379031b7b73a3930b1ba160a51b6044820152606401610da9565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b606060058054610ec5906136b8565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610da990613698565b601e541561173b57600080fd5b43601e55565b6020818154811061175157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60006117cd338484611e43565b5060015b92915050565b6000546001600160a01b031633146118015760405162461bcd60e51b8152600401610da990613698565b601f54600160c01b900460ff166118455760405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606401610da9565b81816000818110611858576118586136f2565b60200291909101356011555081816001818110611877576118776136f2565b60200291909101356012555081816002818110611896576118966136f2565b602002919091013560135550818160038181106118b5576118b56136f2565b602002919091013560145550818160048181106118d4576118d46136f2565b602002919091013560155550818160058181106118f3576118f36136f2565b60200291909101356016555081816006818110611912576119126136f2565b60200291909101356017555081816007818110611931576119316136f2565b905060200201356018819055506109c46014546011546012546013546119579190613763565b6119619190613763565b61196b9190613763565b106119a25760405162461bcd60e51b8152602060048201526007602482015266627579213c323560c81b6044820152606401610da9565b6109c46018546015546016546017546119bb9190613763565b6119c59190613763565b6119cf9190613763565b10610f9b5760405162461bcd60e51b815260206004820152600860248201526773656c6c213c323560c01b6044820152606401610da9565b6000546001600160a01b0316331480611a2a57506003546001600160a01b031633145b611a605760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401610da9565b6001600160a01b038216611a9b57604051339082156108fc029083906000818181858888f193505050501580156111f8573d6000803e3d6000fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f89190613776565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610da990613698565b612710811115611b725760405162461bcd60e51b81526020600482015260076024820152663e31303030302160c81b6044820152606401610da9565b601a55565b6000546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610da990613698565b602855565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610da990613698565b6005811115611c095760405162461bcd60e51b8152602060048201526005602482015264213c3d203560d81b6044820152606401610da9565b601b55565b6000546001600160a01b03163314611c385760405162461bcd60e51b8152600401610da990613698565b6010805460ff1916911515919091179055565b6000546001600160a01b03163314611c755760405162461bcd60e51b8152600401610da990613698565b6001600160a01b038116611cb65760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610da9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015611d7f575050565b6001600160a01b0382166000908152602560205260408120549003610f9b576024541580611dde5750816001600160a01b03166024600081548110611dc657611dc66136f2565b6000918252602090912001546001600160a01b031614155b15610f9b57602480546001600160a01b0384166000818152602560205260408120839055600183018455929092527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180546001600160a01b03191690911790555050565b80611e4d84611443565b1015611e8e5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610da9565b611e97836112bb565b15611ed65760405162461bcd60e51b815260206004820152600f60248201526e697352657761726420213d2030202160881b6044820152606401610da9565b6001600160a01b0382166000908152600f602052604081205481908190819060ff1615611f0c57611f0561236e565b9050611f38565b6001600160a01b0387166000908152600f602052604090205460ff1615611f3857611f35612491565b91505b601d54158015611f515750601f54600160a01b900460ff165b15612030576001600160a01b03871660009081526009602052604090205460ff16158015611f9857506001600160a01b03861660009081526009602052604090205460ff16155b8015611fbd57506001600160a01b0387166000908152600f602052604090205460ff16155b8015611fe257506001600160a01b0386166000908152600f602052604090205460ff16155b1561203057853b63ffffffff16156120305760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401610da9565b6001600160a01b0387166000908152600f602052604090205460ff168061206f57506001600160a01b0386166000908152600f602052604090205460ff165b1561232b576001600160a01b03871660009081526009602052604090205460ff161580156120b657506001600160a01b03861660009081526009602052604090205460ff16155b1561230557601f54600160a01b900460ff16156120f357601d54151580806120e85750601e5460001080156120e85750815b6120f157600080fd5b505b601f54600160a01b900460ff1680156121155750601f54600160a81b900460ff165b801561212f5750600754601d5461212c9190613763565b43105b801561215457506001600160a01b0386166000908152600f602052604090205460ff16155b1561217d576001600160a01b0386166000908152600a60205260409020805460ff191660011790555b601f54600160c81b900460ff16801561219857506000601b54115b1561221c576000805b601b548110156121ff5760408051602081018390529081018890524260608201526080016040516020818303038152906040528051906020012060001c91506121ec898360016125b4565b50806121f78161371e565b9150506121a1565b50601b5461220e906001613793565b6122189087613750565b9550505b6001600160a01b0386166000908152600f602052604090205460ff16156122ef57601054610100900460ff16158015612253575080155b156122ef57600061226330611443565b90506022548111156122ed57600060165460175460155460125460135460115461228d9190613763565b6122979190613763565b6122a19190613763565b6122ab9190613763565b6122b59190613763565b905060006064602154896122c99190613793565b6122d391906137aa565b9050828111156122e05750815b6122ea8183612669565b50505b505b801580156122fb575081155b1561230557600193505b6001600160a01b0386166000908152600f602052604090205460ff161561232b57600192505b61233a87878787878688612cc5565b6001600160a01b03871630146123655782156123595761235987611d73565b61236562055730612fc9565b50505050505050565b601f5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e391906137e3565b50600e546001600160701b039283169450911691506001600160a01b0316600030821015612412575082612415565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa15801561245f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124839190613737565b919091119695505050505050565b601f5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250691906137e3565b50600e546001600160701b039283169450911691506001600160a01b0316600030821015612535575082612538565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a69190613737565b909110159695505050505050565b6001600160a01b0383166000908152600160205260408120805483919083906125de908490613750565b90915550506001600160a01b0383166000908152600160205260408120805484929061260b908490613763565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161265791815260200190565b60405180910390a35060019392505050565b6010805461ff001916610100179055801580612683575081155b612cb65760006012546016546126999190613763565b905060008260026126aa8487613793565b6126b491906137aa565b6126be91906137aa565b905060006126cd6002846137aa565b6126d79085613750565b600e546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061271f5761271f6136f2565b6001600160a01b039283166020918202929092010152600e54825191169082906001908110612750576127506136f2565b6001600160a01b039283166020918202929092010152600d5416635c11d795612779868a613750565b60105460405160e084901b6001600160e01b03191681526127b4929160009187916201000090046001600160a01b0316904290600401613828565b600060405180830381600087803b1580156127ce57600080fd5b505af19250505080156127df575060015b61281857604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6010546040516370a0823160e01b81526001600160a01b0362010000909204821660048201526000918416906370a0823190602401602060405180830381865afa15801561286a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288e9190613737565b90508015612909576010546040516323b872dd60e01b8152620100009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156128f057600080fd5b505af1158015612904573d6000803e3d6000fd5b505050505b60008460026129188985613793565b61292291906137aa565b61292c91906137aa565b90506000856015546011546129419190613763565b61294b9085613793565b61295591906137aa565b90508015612a9757601c5460ff1615612a0657600e54604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156129ae57600080fd5b505af11580156129c2573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015612a00573d6000803e3d6000fd5b50612a7f565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb906044016020604051808303816000875af1158015612a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7d9190613776565b505b8060236000828254612a919190613763565b90915550505b600087118015612aa75750600082115b15612b7f57600d54600e5460035460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1925050508015612b49575060408051601f3d908101601f19168201909252612b4691810190613899565b60015b612b7b576040517f6c331c730efd7c7d973857825b7c7b2087a7dad2124068053cb23fb17801604990600090a1612b7f565b5050505b601754601354612b8f9190613763565b600003612ba3575050505050505050612cb6565b602054600114612cad57600d546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a0823190602401602060405180830381865afa158015612bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c239190613737565b6000602030426040518663ffffffff1660e01b8152600401612c499594939291906138c7565b600060405180830381600087803b158015612c6357600080fd5b505af1925050508015612c74575060015b612cad57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506010805461ff0019169055565b6001600160a01b038716600090815260016020526040902054612ce9908690613750565b6001600160a01b0388166000908152600160205260408120919091558415612df95760008415612d3757601654601754601554612d269190613763565b612d309190613763565b9050612d57565b601354601254601154612d4a9190613763565b612d549190613763565b90505b6000612710612d66838a613793565b612d7091906137aa565b90508015612d8f57612d828184613763565b9250612d8f8a3083613399565b600086612db8576127106014548a612da79190613793565b612db191906137aa565b9050612dd6565b6127106018548a612dc99190613793565b612dd391906137aa565b90505b8015612df557612de68185613763565b9350612df58b61dead83613399565b5050505b828015612e1f57506001600160a01b03881660009081526009602052604090205460ff16155b8015612e4457506001600160a01b03871660009081526009602052604090205460ff16155b15612e8757600061271060195488612e5c9190613793565b612e6691906137aa565b90508015612e8557612e788183613763565b9150612e85893083613399565b505b818015612ead57506001600160a01b03881660009081526009602052604090205460ff16155b8015612ed257506001600160a01b03871660009081526009602052604090205460ff16155b15612f17576000612710601a5488612eea9190613793565b612ef491906137aa565b90508015612f1557612f068183613763565b9150612f158961dead83613399565b505b6001600160a01b0387166000908152600b602052604090205460ff16158015612f495750601f54600160b81b900460ff165b15612fab576008548187612f5c8a611443565b612f669190613763565b612f709190613750565b1115612fab5760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610da9565b612fbf8888612fba848a613750565b613399565b5050505050505050565b43602a54602954612fda9190613763565b1115612fe35750565b601c546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015613034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130589190613737565b905060285481101561306957505050565b601f54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa1580156130b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dc9190613737565b602454909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131589190613737565b99505b8b8310801561316957508382105b1561338757836027541061317d5760006027555b602460275481548110613192576131926136f2565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a0823190602401602060405180830381865afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320d9190613737565b955060008611801561323857506001600160a01b03871660009081526026602052604090205460ff16155b156133455787613248878c613793565b61325291906137aa565b94506000851180156132cb57506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a0823190602401602060405180830381865afa1580156132a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c99190613737565b115b156133455760405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb906044016020604051808303816000875af115801561331f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133439190613776565b505b5a6133509082613750565b61335a9084613763565b92505a60278054919250600061336f8361371e565b9190505550818061337f9061371e565b92505061315b565b50504360295550505050505050505050565b6001600160a01b0382166000908152600160205260409020546133bd908290613763565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d669085815260200190565b6001600160a01b038116811461342657600080fd5b50565b60006020828403121561343b57600080fd5b813561344681613411565b9392505050565b801515811461342657600080fd5b6000806040838503121561346e57600080fd5b823561347981613411565b915060208301356134898161344d565b809150509250929050565b6000602082840312156134a657600080fd5b5035919050565b600060208083528351808285015260005b818110156134da578581018301518582016040015282016134be565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561350d57600080fd5b81356134468161344d565b6000806040838503121561352b57600080fd5b823561353681613411565b946020939093013593505050565b60008083601f84011261355657600080fd5b50813567ffffffffffffffff81111561356e57600080fd5b6020830191508360208260051b850101111561358957600080fd5b9250929050565b6000806000604084860312156135a557600080fd5b833567ffffffffffffffff8111156135bc57600080fd5b6135c886828701613544565b90945092505060208401356135dc8161344d565b809150509250925092565b600080602083850312156135fa57600080fd5b823567ffffffffffffffff81111561361157600080fd5b61361d85828601613544565b90969095509350505050565b60008060006060848603121561363e57600080fd5b833561364981613411565b9250602084013561365981613411565b929592945050506040919091013590565b6000806040838503121561367d57600080fd5b823561368881613411565b9150602083013561348981613411565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806136cc57607f821691505b6020821081036136ec57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161373057613730613708565b5060010190565b60006020828403121561374957600080fd5b5051919050565b818103818111156117d1576117d1613708565b808201808211156117d1576117d1613708565b60006020828403121561378857600080fd5b81516134468161344d565b80820281158282048414176117d1576117d1613708565b6000826137c757634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b03811681146112ec57600080fd5b6000806000606084860312156137f857600080fd5b613801846137cc565b925061380f602085016137cc565b9150604084015163ffffffff811681146135dc57600080fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138785784516001600160a01b031683529383019391830191600101613853565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138ae57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156138785784546001600160a01b0316835260019485019492840192016138f756fea2646970667358221220eb1de633e39c73dbcc8634f62dc770aa9a5a756ad87764de3fc8596136c1a00a64736f6c634300081200336080604052348015600f57600080fd5b5060405161010b38038061010b833981016040819052602c916090565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b390604401600060405180830381600087803b158015607457600080fd5b505af11580156087573d6000803e3d6000fd5b505050505060be565b60006020828403121560a157600080fd5b81516001600160a01b038116811460b757600080fd5b9392505050565b603f806100cc6000396000f3fe6080604052600080fdfea26469706673582212208ca0c5fd215a4146545b37be9c04951d183c9cba6ba25c65190e918c1f629b2864736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044649535400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000446495354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000ef185fa602771de18e3e9f30e02ca9b90e1b582e00000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000458a3302e7ff888ad6fe8c35784cb77a4c19300400000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106104565760003560e01c806370a082311161023f578063b60368fc11610139578063dd62ed3e116100b6578063ea10510e1161007a578063ea10510e14610cee578063eb10b74114610d0e578063ef6e4f1714610d24578063f2fde38b14610d3a578063f7c618c114610d5a57600080fd5b8063dd62ed3e14610c32578063e32759cf14610c78578063e5a6b10f14610c8e578063e5c2b0a614610cae578063e82bef2914610cce57600080fd5b8063bfc3137e116100fd578063bfc3137e14610ba4578063c213d62d14610bba578063c92d567e14610bda578063ce0192f914610bfb578063d598643314610c1157600080fd5b8063b60368fc14610b08578063b9fbc49d14610b28578063bba30f8f14610b3e578063bd25bf2914610b5e578063be4fe9a514610b8e57600080fd5b80638f6cd17d116101c7578063a9059cbb1161018b578063a9059cbb14610a7b578063aa4bde2814610a9b578063aa582b4214610ab1578063adc7955d14610ad1578063b02d757f14610ae757600080fd5b80638f6cd17d146109fb57806395d89b4114610a11578063992db38f14610a265780639cc0e3c714610a3b578063a842486114610a5b57600080fd5b806385dc30041161020e57806385dc30041461096157806386917524146109815780638718b24f146109975780638c2fc7ad146109bd5780638da5cb5b146109dd57600080fd5b806370a08231146108ec578063715018a61461090c57806379dc880c146109215780637db1342c1461094157600080fd5b8063255412d9116103505780634188bf5a116102d85780636108a3db1161029c5780636108a3db1461086b578063621823e61461088b5780636402511e146108a1578063697cfc19146108c15780636b611368146108d657600080fd5b80634188bf5a146107de5780634482004e146107fe5780634d5ce03814610814578063553193ca146108345780635a7ba73c1461084a57600080fd5b80633b1cd1871161031f5780633b1cd187146107325780633bb82eb6146107485780633bfe62ca146107685780633c11100d1461077e57806340aa81fe146107ae57600080fd5b8063255412d9146106d75780632dab693f146106ed578063313ce5671461070357806335c960891461071857600080fd5b80630f890b86116103de5780631846a5a4116103a25780631846a5a41461062957806318d128551461064a5780631dbbaebd1461065f578063206c17bb1461067f57806323b872dd146106b757600080fd5b80630f890b86146105a557806314a432c9146105ba578063150e4c47146105da57806315d07d82146105fa57806318160ddd1461061457600080fd5b8063060e304e11610425578063060e304e146104ff57806306fdde031461051f57806307313d8d1461054157806307c3adf014610561578063095ea7b31461058557600080fd5b806301339c211461046257806301986fad1461047957806303da2b23146104be57806305833c2b146104df57600080fd5b3661045d57005b600080fd5b34801561046e57600080fd5b50610477610d7f565b005b34801561048557600080fd5b506104a9610494366004613429565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104ca57600080fd5b50601f546104a990600160b81b900460ff1681565b3480156104eb57600080fd5b506104776104fa36600461345b565b610df1565b34801561050b57600080fd5b5061047761051a366004613494565b610e46565b34801561052b57600080fd5b50610534610eb6565b6040516104b591906134ad565b34801561054d57600080fd5b5061047761055c3660046134fb565b610f48565b34801561056d57600080fd5b5061057760135481565b6040519081526020016104b5565b34801561059157600080fd5b506104776105a0366004613518565b610f90565b3480156105b157600080fd5b50610477610f9f565b3480156105c657600080fd5b506104776105d5366004613494565b610fd8565b3480156105e657600080fd5b506104776105f5366004613590565b611007565b34801561060657600080fd5b50601c546104a99060ff1681565b34801561062057600080fd5b50600c54610577565b34801561063557600080fd5b50601f546104a990600160c81b900460ff1681565b34801561065657600080fd5b506104776110a8565b34801561066b57600080fd5b5061047761067a3660046135e7565b6110d9565b34801561068b57600080fd5b50600d5461069f906001600160a01b031681565b6040516001600160a01b0390911681526020016104b5565b3480156106c357600080fd5b506104776106d2366004613629565b6111fd565b3480156106e357600080fd5b5061057760145481565b3480156106f957600080fd5b5061057760075481565b34801561070f57600080fd5b50600654610577565b34801561072457600080fd5b506010546104a99060ff1681565b34801561073e57600080fd5b5061057760195481565b34801561075457600080fd5b50610477610763366004613494565b61128c565b34801561077457600080fd5b5061057760155481565b34801561078a57600080fd5b506104a9610799366004613429565b600f6020526000908152604090205460ff1681565b3480156107ba57600080fd5b506104a96107c9366004613429565b600b6020526000908152604090205460ff1681565b3480156107ea57600080fd5b50601f5461069f906001600160a01b031681565b34801561080a57600080fd5b50610577601e5481565b34801561082057600080fd5b5061057761082f366004613429565b6112bb565b34801561084057600080fd5b50610577601d5481565b34801561085657600080fd5b50601f546104a990600160a81b900460ff1681565b34801561087757600080fd5b50610477610886366004613590565b6112f1565b34801561089757600080fd5b50610577602a5481565b3480156108ad57600080fd5b506104776108bc366004613494565b6113db565b3480156108cd57600080fd5b5061047761140a565b3480156108e257600080fd5b5061057760185481565b3480156108f857600080fd5b50610577610907366004613429565b611443565b34801561091857600080fd5b506104776114eb565b34801561092d57600080fd5b5061047761093c366004613494565b61155f565b34801561094d57600080fd5b5061047761095c366004613494565b6115c9565b34801561096d57600080fd5b5061047761097c366004613429565b6115f8565b34801561098d57600080fd5b5061057760225481565b3480156109a357600080fd5b5060105461069f906201000090046001600160a01b031681565b3480156109c957600080fd5b506104776109d836600461345b565b6116a0565b3480156109e957600080fd5b506000546001600160a01b031661069f565b348015610a0757600080fd5b5061057760215481565b348015610a1d57600080fd5b506105346116f5565b348015610a3257600080fd5b50610477611704565b348015610a4757600080fd5b5061069f610a56366004613494565b611741565b348015610a6757600080fd5b50610477610a7636600461345b565b61176b565b348015610a8757600080fd5b506104a9610a96366004613518565b6117c0565b348015610aa757600080fd5b5061057760085481565b348015610abd57600080fd5b50610477610acc3660046135e7565b6117d7565b348015610add57600080fd5b5061057760165481565b348015610af357600080fd5b50601f546104a990600160b01b900460ff1681565b348015610b1457600080fd5b50610477610b23366004613518565b611a07565b348015610b3457600080fd5b5061057760125481565b348015610b4a57600080fd5b50610477610b59366004613494565b611b0c565b348015610b6a57600080fd5b506104a9610b79366004613429565b600a6020526000908152604090205460ff1681565b348015610b9a57600080fd5b5061057760175481565b348015610bb057600080fd5b50610577601a5481565b348015610bc657600080fd5b50610477610bd5366004613494565b611b77565b348015610be657600080fd5b50601f546104a990600160a01b900460ff1681565b348015610c0757600080fd5b5061057760115481565b348015610c1d57600080fd5b50601f546104a990600160c01b900460ff1681565b348015610c3e57600080fd5b50610577610c4d36600461366a565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c8457600080fd5b50610577601b5481565b348015610c9a57600080fd5b50600e5461069f906001600160a01b031681565b348015610cba57600080fd5b50610477610cc9366004613494565b611ba6565b348015610cda57600080fd5b5060035461069f906001600160a01b031681565b348015610cfa57600080fd5b50610477610d093660046134fb565b611c0e565b348015610d1a57600080fd5b5061057760285481565b348015610d3057600080fd5b5061057760235481565b348015610d4657600080fd5b50610477610d55366004613429565b611c4b565b348015610d6657600080fd5b50601c5461069f9061010090046001600160a01b031681565b6000546001600160a01b03163314610db25760405162461bcd60e51b8152600401610da990613698565b60405180910390fd5b601d5415610deb5760405162461bcd60e51b81526020600482015260066024820152651bdc195b995960d21b6044820152606401610da9565b43601d55565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e705760405162461bcd60e51b8152600401610da990613698565b80600003610eb15760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401610da9565b602155565b606060048054610ec5906136b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef1906136b8565b8015610f3e5780601f10610f1357610100808354040283529160200191610f3e565b820191906000526020600020905b815481529060010190602001808311610f2157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f725760405162461bcd60e51b8152600401610da990613698565b601f8054911515600160c81b0260ff60c81b19909216919091179055565b610f9b338383611d11565b5050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610da990613698565b601f805460ff60c01b19169055565b6000546001600160a01b031633146110025760405162461bcd60e51b8152600401610da990613698565b600755565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610da990613698565b60005b828110156110a2578160096000868685818110611053576110536136f2565b90506020020160208101906110689190613429565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061109a8161371e565b915050611034565b50505050565b6000546001600160a01b031633146110d25760405162461bcd60e51b8152600401610da990613698565b6000601e55565b6000546001600160a01b031633146111035760405162461bcd60e51b8152600401610da990613698565b60005b818110156111f857601f546000906001600160a01b03166370a08231858585818110611134576111346136f2565b90506020020160208101906111499190613429565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561118d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b19190613737565b11156111e6576111e68383838181106111cc576111cc6136f2565b90506020020160208101906111e19190613429565b611d73565b806111f08161371e565b915050611106565b505050565b611208838383611e43565b6001600160a01b0383166000908152600260209081526040808320338452909152902054600019146111f8576001600160a01b0383166000908152600260209081526040808320338452909152902054611263908290613750565b6001600160a01b0384166000908152600260209081526040808320338452909152902055505050565b6000546001600160a01b031633146112b65760405162461bcd60e51b8152600401610da990613698565b602a55565b6001600160a01b0381166000908152600a602052604081205460ff16156112e457506001919050565b506000919050565b919050565b6000546001600160a01b0316331461131b5760405162461bcd60e51b8152600401610da990613698565b601f54600160b01b900460ff1661135f5760405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606401610da9565b60c9821061136c57600080fd5b60005b828110156110a25781600a600086868581811061138e5761138e6136f2565b90506020020160208101906113a39190613429565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113d48161371e565b905061136f565b6000546001600160a01b031633146114055760405162461bcd60e51b8152600401610da990613698565b602255565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610da990613698565b601f805460ff60b81b19169055565b601f546000906001600160a01b03838116911614801561146d5750601f546001600160a01b031633145b801561147b575060105460ff165b156114cf57601f546001600160a01b03166000908152600160205260409020546114cf5760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401610da9565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b031633146115155760405162461bcd60e51b8152600401610da990613698565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115895760405162461bcd60e51b8152600401610da990613698565b6109c48111156115c45760405162461bcd60e51b8152600401610da9906020808252600490820152633e32352160e01b604082015260600190565b601955565b6000546001600160a01b031633146115f35760405162461bcd60e51b8152600401610da990613698565b600855565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610da990613698565b803b63ffffffff16156116665760405162461bcd60e51b815260206004820152600c60248201526b037379031b7b73a3930b1ba160a51b6044820152606401610da9565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b606060058054610ec5906136b8565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610da990613698565b601e541561173b57600080fd5b43601e55565b6020818154811061175157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610da990613698565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60006117cd338484611e43565b5060015b92915050565b6000546001600160a01b031633146118015760405162461bcd60e51b8152600401610da990613698565b601f54600160c01b900460ff166118455760405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b6044820152606401610da9565b81816000818110611858576118586136f2565b60200291909101356011555081816001818110611877576118776136f2565b60200291909101356012555081816002818110611896576118966136f2565b602002919091013560135550818160038181106118b5576118b56136f2565b602002919091013560145550818160048181106118d4576118d46136f2565b602002919091013560155550818160058181106118f3576118f36136f2565b60200291909101356016555081816006818110611912576119126136f2565b60200291909101356017555081816007818110611931576119316136f2565b905060200201356018819055506109c46014546011546012546013546119579190613763565b6119619190613763565b61196b9190613763565b106119a25760405162461bcd60e51b8152602060048201526007602482015266627579213c323560c81b6044820152606401610da9565b6109c46018546015546016546017546119bb9190613763565b6119c59190613763565b6119cf9190613763565b10610f9b5760405162461bcd60e51b815260206004820152600860248201526773656c6c213c323560c01b6044820152606401610da9565b6000546001600160a01b0316331480611a2a57506003546001600160a01b031633145b611a605760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401610da9565b6001600160a01b038216611a9b57604051339082156108fc029083906000818181858888f193505050501580156111f8573d6000803e3d6000fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f89190613776565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610da990613698565b612710811115611b725760405162461bcd60e51b81526020600482015260076024820152663e31303030302160c81b6044820152606401610da9565b601a55565b6000546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610da990613698565b602855565b6000546001600160a01b03163314611bd05760405162461bcd60e51b8152600401610da990613698565b6005811115611c095760405162461bcd60e51b8152602060048201526005602482015264213c3d203560d81b6044820152606401610da9565b601b55565b6000546001600160a01b03163314611c385760405162461bcd60e51b8152600401610da990613698565b6010805460ff1916911515919091179055565b6000546001600160a01b03163314611c755760405162461bcd60e51b8152600401610da990613698565b6001600160a01b038116611cb65760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610da9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015611d7f575050565b6001600160a01b0382166000908152602560205260408120549003610f9b576024541580611dde5750816001600160a01b03166024600081548110611dc657611dc66136f2565b6000918252602090912001546001600160a01b031614155b15610f9b57602480546001600160a01b0384166000818152602560205260408120839055600183018455929092527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180546001600160a01b03191690911790555050565b80611e4d84611443565b1015611e8e5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610da9565b611e97836112bb565b15611ed65760405162461bcd60e51b815260206004820152600f60248201526e697352657761726420213d2030202160881b6044820152606401610da9565b6001600160a01b0382166000908152600f602052604081205481908190819060ff1615611f0c57611f0561236e565b9050611f38565b6001600160a01b0387166000908152600f602052604090205460ff1615611f3857611f35612491565b91505b601d54158015611f515750601f54600160a01b900460ff165b15612030576001600160a01b03871660009081526009602052604090205460ff16158015611f9857506001600160a01b03861660009081526009602052604090205460ff16155b8015611fbd57506001600160a01b0387166000908152600f602052604090205460ff16155b8015611fe257506001600160a01b0386166000908152600f602052604090205460ff16155b1561203057853b63ffffffff16156120305760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401610da9565b6001600160a01b0387166000908152600f602052604090205460ff168061206f57506001600160a01b0386166000908152600f602052604090205460ff165b1561232b576001600160a01b03871660009081526009602052604090205460ff161580156120b657506001600160a01b03861660009081526009602052604090205460ff16155b1561230557601f54600160a01b900460ff16156120f357601d54151580806120e85750601e5460001080156120e85750815b6120f157600080fd5b505b601f54600160a01b900460ff1680156121155750601f54600160a81b900460ff165b801561212f5750600754601d5461212c9190613763565b43105b801561215457506001600160a01b0386166000908152600f602052604090205460ff16155b1561217d576001600160a01b0386166000908152600a60205260409020805460ff191660011790555b601f54600160c81b900460ff16801561219857506000601b54115b1561221c576000805b601b548110156121ff5760408051602081018390529081018890524260608201526080016040516020818303038152906040528051906020012060001c91506121ec898360016125b4565b50806121f78161371e565b9150506121a1565b50601b5461220e906001613793565b6122189087613750565b9550505b6001600160a01b0386166000908152600f602052604090205460ff16156122ef57601054610100900460ff16158015612253575080155b156122ef57600061226330611443565b90506022548111156122ed57600060165460175460155460125460135460115461228d9190613763565b6122979190613763565b6122a19190613763565b6122ab9190613763565b6122b59190613763565b905060006064602154896122c99190613793565b6122d391906137aa565b9050828111156122e05750815b6122ea8183612669565b50505b505b801580156122fb575081155b1561230557600193505b6001600160a01b0386166000908152600f602052604090205460ff161561232b57600192505b61233a87878787878688612cc5565b6001600160a01b03871630146123655782156123595761235987611d73565b61236562055730612fc9565b50505050505050565b601f5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e391906137e3565b50600e546001600160701b039283169450911691506001600160a01b0316600030821015612412575082612415565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa15801561245f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124839190613737565b919091119695505050505050565b601f5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250691906137e3565b50600e546001600160701b039283169450911691506001600160a01b0316600030821015612535575082612538565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a69190613737565b909110159695505050505050565b6001600160a01b0383166000908152600160205260408120805483919083906125de908490613750565b90915550506001600160a01b0383166000908152600160205260408120805484929061260b908490613763565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161265791815260200190565b60405180910390a35060019392505050565b6010805461ff001916610100179055801580612683575081155b612cb65760006012546016546126999190613763565b905060008260026126aa8487613793565b6126b491906137aa565b6126be91906137aa565b905060006126cd6002846137aa565b6126d79085613750565b600e546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061271f5761271f6136f2565b6001600160a01b039283166020918202929092010152600e54825191169082906001908110612750576127506136f2565b6001600160a01b039283166020918202929092010152600d5416635c11d795612779868a613750565b60105460405160e084901b6001600160e01b03191681526127b4929160009187916201000090046001600160a01b0316904290600401613828565b600060405180830381600087803b1580156127ce57600080fd5b505af19250505080156127df575060015b61281857604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6010546040516370a0823160e01b81526001600160a01b0362010000909204821660048201526000918416906370a0823190602401602060405180830381865afa15801561286a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288e9190613737565b90508015612909576010546040516323b872dd60e01b8152620100009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156128f057600080fd5b505af1158015612904573d6000803e3d6000fd5b505050505b60008460026129188985613793565b61292291906137aa565b61292c91906137aa565b90506000856015546011546129419190613763565b61294b9085613793565b61295591906137aa565b90508015612a9757601c5460ff1615612a0657600e54604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156129ae57600080fd5b505af11580156129c2573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015612a00573d6000803e3d6000fd5b50612a7f565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb906044016020604051808303816000875af1158015612a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7d9190613776565b505b8060236000828254612a919190613763565b90915550505b600087118015612aa75750600082115b15612b7f57600d54600e5460035460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1925050508015612b49575060408051601f3d908101601f19168201909252612b4691810190613899565b60015b612b7b576040517f6c331c730efd7c7d973857825b7c7b2087a7dad2124068053cb23fb17801604990600090a1612b7f565b5050505b601754601354612b8f9190613763565b600003612ba3575050505050505050612cb6565b602054600114612cad57600d546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a0823190602401602060405180830381865afa158015612bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c239190613737565b6000602030426040518663ffffffff1660e01b8152600401612c499594939291906138c7565b600060405180830381600087803b158015612c6357600080fd5b505af1925050508015612c74575060015b612cad57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506010805461ff0019169055565b6001600160a01b038716600090815260016020526040902054612ce9908690613750565b6001600160a01b0388166000908152600160205260408120919091558415612df95760008415612d3757601654601754601554612d269190613763565b612d309190613763565b9050612d57565b601354601254601154612d4a9190613763565b612d549190613763565b90505b6000612710612d66838a613793565b612d7091906137aa565b90508015612d8f57612d828184613763565b9250612d8f8a3083613399565b600086612db8576127106014548a612da79190613793565b612db191906137aa565b9050612dd6565b6127106018548a612dc99190613793565b612dd391906137aa565b90505b8015612df557612de68185613763565b9350612df58b61dead83613399565b5050505b828015612e1f57506001600160a01b03881660009081526009602052604090205460ff16155b8015612e4457506001600160a01b03871660009081526009602052604090205460ff16155b15612e8757600061271060195488612e5c9190613793565b612e6691906137aa565b90508015612e8557612e788183613763565b9150612e85893083613399565b505b818015612ead57506001600160a01b03881660009081526009602052604090205460ff16155b8015612ed257506001600160a01b03871660009081526009602052604090205460ff16155b15612f17576000612710601a5488612eea9190613793565b612ef491906137aa565b90508015612f1557612f068183613763565b9150612f158961dead83613399565b505b6001600160a01b0387166000908152600b602052604090205460ff16158015612f495750601f54600160b81b900460ff165b15612fab576008548187612f5c8a611443565b612f669190613763565b612f709190613750565b1115612fab5760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610da9565b612fbf8888612fba848a613750565b613399565b5050505050505050565b43602a54602954612fda9190613763565b1115612fe35750565b601c546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015613034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130589190613737565b905060285481101561306957505050565b601f54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa1580156130b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130dc9190613737565b602454909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131589190613737565b99505b8b8310801561316957508382105b1561338757836027541061317d5760006027555b602460275481548110613192576131926136f2565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a0823190602401602060405180830381865afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320d9190613737565b955060008611801561323857506001600160a01b03871660009081526026602052604090205460ff16155b156133455787613248878c613793565b61325291906137aa565b94506000851180156132cb57506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a0823190602401602060405180830381865afa1580156132a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c99190613737565b115b156133455760405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb906044016020604051808303816000875af115801561331f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133439190613776565b505b5a6133509082613750565b61335a9084613763565b92505a60278054919250600061336f8361371e565b9190505550818061337f9061371e565b92505061315b565b50504360295550505050505050505050565b6001600160a01b0382166000908152600160205260409020546133bd908290613763565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d669085815260200190565b6001600160a01b038116811461342657600080fd5b50565b60006020828403121561343b57600080fd5b813561344681613411565b9392505050565b801515811461342657600080fd5b6000806040838503121561346e57600080fd5b823561347981613411565b915060208301356134898161344d565b809150509250929050565b6000602082840312156134a657600080fd5b5035919050565b600060208083528351808285015260005b818110156134da578581018301518582016040015282016134be565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561350d57600080fd5b81356134468161344d565b6000806040838503121561352b57600080fd5b823561353681613411565b946020939093013593505050565b60008083601f84011261355657600080fd5b50813567ffffffffffffffff81111561356e57600080fd5b6020830191508360208260051b850101111561358957600080fd5b9250929050565b6000806000604084860312156135a557600080fd5b833567ffffffffffffffff8111156135bc57600080fd5b6135c886828701613544565b90945092505060208401356135dc8161344d565b809150509250925092565b600080602083850312156135fa57600080fd5b823567ffffffffffffffff81111561361157600080fd5b61361d85828601613544565b90969095509350505050565b60008060006060848603121561363e57600080fd5b833561364981613411565b9250602084013561365981613411565b929592945050506040919091013590565b6000806040838503121561367d57600080fd5b823561368881613411565b9150602083013561348981613411565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806136cc57607f821691505b6020821081036136ec57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161373057613730613708565b5060010190565b60006020828403121561374957600080fd5b5051919050565b818103818111156117d1576117d1613708565b808201808211156117d1576117d1613708565b60006020828403121561378857600080fd5b81516134468161344d565b80820281158282048414176117d1576117d1613708565b6000826137c757634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b03811681146112ec57600080fd5b6000806000606084860312156137f857600080fd5b613801846137cc565b925061380f602085016137cc565b9150604084015163ffffffff811681146135dc57600080fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138785784516001600160a01b031683529383019391830191600101613853565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138ae57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156138785784546001600160a01b0316835260019485019492840192016138f756fea2646970667358221220eb1de633e39c73dbcc8634f62dc770aa9a5a756ad87764de3fc8596136c1a00a64736f6c63430008120033

Deployed Bytecode Sourcemap

3982:24688:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23497:136;;;;;;;;;;;;;:::i;:::-;;4350:45;;;;;;;;;;-1:-1:-1;4350:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;4350:45:0;;;;;;;;5583:29;;;;;;;;;;-1:-1:-1;5583:29:0;;;;-1:-1:-1;;;5583:29:0;;;;;;28548:119;;;;;;;;;;-1:-1:-1;28548:119:0;;;;;:::i;:::-;;:::i;12815:163::-;;;;;;;;;;-1:-1:-1;12815:163:0;;;;;:::i;:::-;;:::i;9067:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11259:99::-;;;;;;;;;;-1:-1:-1;11259:99:0;;;;;:::i;:::-;;:::i;4887:28::-;;;;;;;;;;;;;;;;;;;2234:25:1;;;2222:2;2207:18;4887:28:0;2088:177:1;10114:158:0;;;;;;;;;;-1:-1:-1;10114:158:0;;;;;:::i;:::-;;:::i;24980:87::-;;;;;;;;;;;;;:::i;10984:70::-;;;;;;;;;;-1:-1:-1;10984:70:0;;;;;:::i;:::-;;:::i;23641:223::-;;;;;;;;;;-1:-1:-1;23641:223:0;;;;;:::i;:::-;;:::i;5206:25::-;;;;;;;;;;-1:-1:-1;5206:25:0;;;;;;;;9273:95;;;;;;;;;;-1:-1:-1;9353:7:0;;9273:95;;5653:25;;;;;;;;;;-1:-1:-1;5653:25:0;;;;-1:-1:-1;;;5653:25:0;;;;;;23417:72;;;;;;;;;;;;;:::i;26294:266::-;;;;;;;;;;-1:-1:-1;26294:266:0;;;;;:::i;:::-;;:::i;4539:30::-;;;;;;;;;;-1:-1:-1;4539:30:0;;;;-1:-1:-1;;;;;4539:30:0;;;;;;-1:-1:-1;;;;;4158:32:1;;;4140:51;;4128:2;4113:18;4539:30:0;3975:222:1;10280:378:0;;;;;;;;;;-1:-1:-1;10280:378:0;;;;;:::i;:::-;;:::i;4922:26::-;;;;;;;;;;;;;;;;4287:17;;;;;;;;;;;;;;;;9169:96;;;;;;;;;;-1:-1:-1;9248:9:0;;9169:96;;4660:27;;;;;;;;;;-1:-1:-1;4660:27:0;;;;;;;;5093:30;;;;;;;;;;;;;;;;26739:124;;;;;;;;;;-1:-1:-1;26739:124:0;;;;;:::i;:::-;;:::i;4955:27::-;;;;;;;;;;;;;;;;4606:45;;;;;;;;;;-1:-1:-1;4606:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4452:46;;;;;;;;;;-1:-1:-1;4452:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5346:24;;;;;;;;;;-1:-1:-1;5346:24:0;;;;-1:-1:-1;;;;;5346:24:0;;;5310:27;;;;;;;;;;;;;;;;11062:185;;;;;;;;;;-1:-1:-1;11062:185:0;;;;;:::i;:::-;;:::i;5273:30::-;;;;;;;;;;;;;;;;5512:27;;;;;;;;;;-1:-1:-1;5512:27:0;;;;-1:-1:-1;;;5512:27:0;;;;;;24556:317;;;;;;;;;;-1:-1:-1;24556:317:0;;;;;:::i;:::-;;:::i;26688:42::-;;;;;;;;;;;;;;;;13022:102;;;;;;;;;;-1:-1:-1;13022:102:0;;;;;:::i;:::-;;:::i;24881:91::-;;;;;;;;;;;;;:::i;5057:27::-;;;;;;;;;;;;;;;;9469:263;;;;;;;;;;-1:-1:-1;9469:263:0;;;;;:::i;:::-;;:::i;3013:148::-;;;;;;;;;;;;;:::i;16928:154::-;;;;;;;;;;-1:-1:-1;16928:154:0;;;;;:::i;:::-;;:::i;25201:107::-;;;;;;;;;;-1:-1:-1;25201:107:0;;;;;:::i;:::-;;:::i;22888:192::-;;;;;;;;;;-1:-1:-1;22888:192:0;;;;;:::i;:::-;;:::i;12986:27::-;;;;;;;;;;;;;;;;4771:41;;;;;;;;;;-1:-1:-1;4771:41:0;;;;;;;-1:-1:-1;;;;;4771:41:0;;;10851:125;;;;;;;;;;-1:-1:-1;10851:125:0;;;;;:::i;:::-;;:::i;2827:79::-;;;;;;;;;;-1:-1:-1;2865:7:0;2892:6;-1:-1:-1;;;;;2892:6:0;2827:79;;12761:37;;;;;;;;;;;;;;;;8961:98;;;;;;;;;;;;;:::i;23288:121::-;;;;;;;;;;;;;:::i;5687:27::-;;;;;;;;;;-1:-1:-1;5687:27:0;;;;;:::i;:::-;;:::i;25075:118::-;;;;;;;;;;-1:-1:-1;25075:118:0;;;;;:::i;:::-;;:::i;9740:190::-;;;;;;;;;;-1:-1:-1;9740:190:0;;;;;:::i;:::-;;:::i;4311:30::-;;;;;;;;;;;;;;;;23872:676;;;;;;;;;;-1:-1:-1;23872:676:0;;;;;:::i;:::-;;:::i;4989:25::-;;;;;;;;;;;;;;;;5546:28;;;;;;;;;;-1:-1:-1;5546:28:0;;;;-1:-1:-1;;;5546:28:0;;;;;;25316:248;;;;;;;;;;-1:-1:-1;25316:248:0;;;;;:::i;:::-;;:::i;4856:24::-;;;;;;;;;;;;;;;;17090:164;;;;;;;;;;-1:-1:-1;17090:164:0;;;;;:::i;:::-;;:::i;4402:43::-;;;;;;;;;;-1:-1:-1;4402:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5021:29;;;;;;;;;;;;;;;;5130:33;;;;;;;;;;;;;;;;28422:118;;;;;;;;;;-1:-1:-1;28422:118:0;;;;;:::i;:::-;;:::i;5479:26::-;;;;;;;;;;-1:-1:-1;5479:26:0;;;;-1:-1:-1;;;5479:26:0;;;;;;4823;;;;;;;;;;;;;;;;5619:27;;;;;;;;;;-1:-1:-1;5619:27:0;;;;-1:-1:-1;;;5619:27:0;;;;;;9938:168;;;;;;;;;;-1:-1:-1;9938:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;10071:18:0;;;10044:7;10071:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9938:168;5172:27;;;;;;;;;;;;;;;;4576:23;;;;;;;;;;-1:-1:-1;4576:23:0;;;;-1:-1:-1;;;;;4576:23:0;;;11675:146;;;;;;;;;;-1:-1:-1;11675:146:0;;;;;:::i;:::-;;:::i;4156:34::-;;;;;;;;;;-1:-1:-1;4156:34:0;;;;-1:-1:-1;;;;;4156:34:0;;;9380:83;;;;;;;;;;-1:-1:-1;9380:83:0;;;;;:::i;:::-;;:::i;26603:36::-;;;;;;;;;;;;;;;;19834:37;;;;;;;;;;;;;;;;3169:214;;;;;;;;;;-1:-1:-1;3169:214:0;;;;;:::i;:::-;;:::i;5240:26::-;;;;;;;;;;-1:-1:-1;5240:26:0;;;;;;;-1:-1:-1;;;;;5240:26:0;;;23497:136;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;;;;;;;;;23558:15:::1;::::0;23553:20;23545:39:::1;;;::::0;-1:-1:-1;;;23545:39:0;;6958:2:1;23545:39:0::1;::::0;::::1;6940:21:1::0;6997:1;6977:18;;;6970:29;-1:-1:-1;;;7015:18:1;;;7008:36;7061:18;;23545:39:0::1;6756:329:1::0;23545:39:0::1;23613:12;23595:15;:30:::0;23497:136::o;28548:119::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28631:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;28631:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28548:119::o;12815:163::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;12899:8:::1;12911:1;12899:13:::0;12891:40:::1;;;::::0;-1:-1:-1;;;12891:40:0;;7292:2:1;12891:40:0::1;::::0;::::1;7274:21:1::0;7331:2;7311:18;;;7304:30;-1:-1:-1;;;7350:18:1;;;7343:44;7404:18;;12891:40:0::1;7090:338:1::0;12891:40:0::1;12942:17;:28:::0;12815:163::o;9067:94::-;9115:13;9148:5;9141:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9067:94;:::o;11259:99::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;11328:13:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;11328:22:0::1;-1:-1:-1::0;;;;11328:22:0;;::::1;::::0;;;::::1;::::0;;11259:99::o;10114:158::-;10217:37;10226:10;10238:7;10247:6;10217:8;:37::i;:::-;10114:158;;:::o;24980:87::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;25036:15:::1;:23:::0;;-1:-1:-1;;;;25036:23:0::1;::::0;;24980:87::o;10984:70::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;11040:2:::1;:6:::0;10984:70::o;23641:223::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;23762:9:::1;23757:100;23777:15:::0;;::::1;23757:100;;;23839:6;23814:13;:22;23828:4;;23833:1;23828:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23814:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23814:22:0;:31;;-1:-1:-1;;23814:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23794:3;::::1;::::0;::::1;:::i;:::-;;;;23757:100;;;;23641:223:::0;;;:::o;23417:72::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;23480:1:::1;23465:12;:16:::0;23417:72::o;26294:266::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;26380:9:::1;26375:178;26391:19:::0;;::::1;26375:178;;;26446:9;::::0;26482:1:::1;::::0;-1:-1:-1;;;;;26446:9:0::1;26436:30;26467:8:::0;;26476:1;26467:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26436:43;::::0;-1:-1:-1;;;;;;26436:43:0::1;::::0;;;;;;-1:-1:-1;;;;;4158:32:1;;;26436:43:0::1;::::0;::::1;4140:51:1::0;4113:18;;26436:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;26432:110;;;26504:22;26514:8;;26523:1;26514:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26504:9;:22::i;:::-;26412:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26375:178;;;;26294:266:::0;;:::o;10280:378::-;10415:36;10425:6;10433:9;10444:6;10415:9;:36::i;:::-;-1:-1:-1;;;;;10466:19:0;;4762:1;10466:19;;;:11;:19;;;;;;;;10486:10;10466:31;;;;;;;;-1:-1:-1;;10466:38:0;10462:179;;-1:-1:-1;;;;;10572:19:0;;;;;;:11;:19;;;;;;;;10592:10;10572:31;;;;;;;;:57;;10623:6;;10572:57;:::i;:::-;-1:-1:-1;;;;;10521:19:0;;;;;;:11;:19;;;;;;;;10541:10;10521:31;;;;;;;:108;10280:378;;;:::o;26739:124::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;26822:22:::1;:33:::0;26739:124::o;11062:185::-;-1:-1:-1;;;;;11142:20:0;;11118:7;11142:20;;;:11;:20;;;;;;;;11138:102;;;-1:-1:-1;11186:1:0;;11062:185;-1:-1:-1;11062:185:0:o;11138:102::-;-1:-1:-1;11227:1:0;;11062:185;-1:-1:-1;11062:185:0:o;11138:102::-;11062:185;;;:::o;24556:317::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;24681:16:::1;::::0;-1:-1:-1;;;24681:16:0;::::1;;;24673:37;;;::::0;-1:-1:-1;;;24673:37:0;;8746:2:1;24673:37:0::1;::::0;::::1;8728:21:1::0;8785:1;8765:18;;;8758:29;-1:-1:-1;;;8803:18:1;;;8796:38;8851:18;;24673:37:0::1;8544:331:1::0;24673:37:0::1;24748:3;24729:22:::0;::::1;24721:31;;;::::0;::::1;;24768:9;24763:103;24779:20:::0;;::::1;24763:103;;;24849:5;24821:11;:25;24833:9;;24843:1;24833:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24821:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24821:25:0;:33;;-1:-1:-1;;24821:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24801:3:::1;::::0;::::1;:::i;:::-;;;24763:103;;13022:102:::0;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;13093:12:::1;:23:::0;13022:102::o;24881:91::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;24939:17:::1;:25:::0;;-1:-1:-1;;;;24939:25:0::1;::::0;;24881:91::o;9469:263::-;9570:9;;9535:7;;-1:-1:-1;;;;;9559:20:0;;;9570:9;;9559:20;:47;;;;-1:-1:-1;9597:9:0;;-1:-1:-1;;;;;9597:9:0;9583:10;:23;9559:47;:59;;;;-1:-1:-1;9610:8:0;;;;9559:59;9555:134;;;9653:9;;-1:-1:-1;;;;;9653:9:0;9666:1;9643:20;;;:9;:20;;;;;;9635:42;;;;-1:-1:-1;;;9635:42:0;;9082:2:1;9635:42:0;;;9064:21:1;9121:1;9101:18;;;9094:29;-1:-1:-1;;;9139:18:1;;;9132:35;9184:18;;9635:42:0;8880:328:1;9635:42:0;-1:-1:-1;;;;;;9706:18:0;;;;;:9;:18;;;;;;;9469:263::o;3013:148::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;3120:1:::1;3104:6:::0;;3083:40:::1;::::0;-1:-1:-1;;;;;3104:6:0;;::::1;::::0;3083:40:::1;::::0;3120:1;;3083:40:::1;3151:1;3134:19:::0;;-1:-1:-1;;;;;;3134:19:0::1;::::0;;3013:148::o;16928:154::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;17024:4:::1;17012:8;:16;;17004:33;;;;-1:-1:-1::0;;;17004:33:0::1;;;;;;9415:2:1::0;9397:21;;;9454:1;9434:18;;;9427:29;-1:-1:-1;;;9487:2:1;9472:18;;9465:34;9531:2;9516:18;;9213:327;17004:33:0::1;17048:15;:26:::0;16928:154::o;25201:107::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;25275:15:::1;:25:::0;25201:107::o;22888:192::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;23216:18;;23263:8;;;22964:42:::1;;;::::0;-1:-1:-1;;;22964:42:0;;9747:2:1;22964:42:0::1;::::0;::::1;9729:21:1::0;9786:2;9766:18;;;9759:30;-1:-1:-1;;;9805:18:1;;;9798:42;9857:18;;22964:42:0::1;9545:336:1::0;22964:42:0::1;23017:11;:18:::0;;-1:-1:-1;;;;;23017:18:0;;::::1;-1:-1:-1::0;;;;;;23017:18:0;;::::1;::::0;::::1;::::0;;:11:::1;23046:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;23046:26:0::1;23017:18:::0;23046:26:::1;::::0;;22888:192::o;10851:125::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10937:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:31;;-1:-1:-1;;10937:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10851:125::o;8961:98::-;9011:13;9044:7;9037:14;;;;;:::i;23288:121::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;23350:12:::1;::::0;23345:17;23337:26:::1;;;::::0;::::1;;23389:12;23374;:27:::0;23288:121::o;5687:27::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5687:27:0;;-1:-1:-1;5687:27:0;:::o;25075:118::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25157:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;25157:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25075:118::o;9740:190::-;9843:4;9860:40;9870:10;9882:9;9893:6;9860:9;:40::i;:::-;-1:-1:-1;9918:4:0;9740:190;;;;;:::o;23872:676::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;23963:15:::1;::::0;-1:-1:-1;;;23963:15:0;::::1;;;23955:36;;;::::0;-1:-1:-1;;;23955:36:0;;8746:2:1;23955:36:0::1;::::0;::::1;8728:21:1::0;8785:1;8765:18;;;8758:29;-1:-1:-1;;;8803:18:1;;;8796:38;8851:18;;23955:36:0::1;8544:331:1::0;23955:36:0::1;24016:7;;24024:1;24016:10;;;;;;;:::i;:::-;;;::::0;;;::::1;;24002:11;:24:::0;-1:-1:-1;24049:7:0;;24057:1:::1;24049:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24037:9;:22:::0;-1:-1:-1;24086:7:0;;24094:1:::1;24086:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24070:13;:26:::0;-1:-1:-1;24121:7:0;;24129:1:::1;24121:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24107:11;:24:::0;-1:-1:-1;24159:7:0;;24167:1:::1;24159:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24144:12;:25:::0;-1:-1:-1;24193:7:0;;24201:1:::1;24193:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24180;:23:::0;-1:-1:-1;24231:7:0;;24239:1:::1;24231:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;24214:14;:27:::0;-1:-1:-1;24267:7:0;;24275:1:::1;24267:10:::0;;::::1;;;;;:::i;:::-;;;;;;;24252:12;:25;;;;24368:4;24354:11;;24340;;24328:9;;24312:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:60;24290:117;;;::::0;-1:-1:-1;;;24290:117:0;;10218:2:1;24290:117:0::1;::::0;::::1;10200:21:1::0;10257:1;10237:18;;;10230:29;-1:-1:-1;;;10275:18:1;;;10268:37;10322:18;;24290:117:0::1;10016:330:1::0;24290:117:0::1;24500:4;24485:12;;24470;;24457:10;;24440:14;;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;:64;24418:122;;;::::0;-1:-1:-1;;;24418:122:0;;10553:2:1;24418:122:0::1;::::0;::::1;10535:21:1::0;10592:1;10572:18;;;10565:29;-1:-1:-1;;;10610:18:1;;;10603:38;10658:18;;24418:122:0::1;10351:331:1::0;25316:248:0;25611:6;;-1:-1:-1;;;;;25611:6:0;25621:10;25611:20;;:49;;-1:-1:-1;25635:11:0;;-1:-1:-1;;;;;25635:11:0;25650:10;25635:25;25611:49;25603:69;;;;-1:-1:-1;;;25603:69:0;;10889:2:1;25603:69:0;;;10871:21:1;10928:1;10908:18;;;10901:29;-1:-1:-1;;;10946:18:1;;;10939:37;10993:18;;25603:69:0;10687:330:1;25603:69:0;-1:-1:-1;;;;;25401:19:0;::::1;25397:160;;25436:36;::::0;25444:10:::1;::::0;25436:36;::::1;;;::::0;25465:6;;25436:36:::1;::::0;;;25465:6;25444:10;25436:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;25397:160;25503:42;::::0;-1:-1:-1;;;25503:42:0;;25526:10:::1;25503:42;::::0;::::1;11196:51:1::0;11263:18;;;11256:34;;;-1:-1:-1;;;;;25503:22:0;::::1;::::0;::::1;::::0;11169:18:1;;25503:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17090:164::-:0;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;17189:5:::1;17177:8;:17;;17169:37;;;::::0;-1:-1:-1;;;17169:37:0;;11753:2:1;17169:37:0::1;::::0;::::1;11735:21:1::0;11792:1;11772:18;;;11765:29;-1:-1:-1;;;11810:18:1;;;11803:37;11857:18;;17169:37:0::1;11551:330:1::0;17169:37:0::1;17217:18;:29:::0;17090:164::o;28422:118::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;28502:21:::1;:30:::0;28422:118::o;11675:146::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;11768:1:::1;11756:8;:13;;11748:31;;;::::0;-1:-1:-1;;;11748:31:0;;12088:2:1;11748:31:0::1;::::0;::::1;12070:21:1::0;12127:1;12107:18;;;12100:29;-1:-1:-1;;;12145:18:1;;;12138:35;12190:18;;11748:31:0::1;11886:328:1::0;11748:31:0::1;11790:12;:23:::0;11675:146::o;9380:83::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;9443:8:::1;:12:::0;;-1:-1:-1;;9443:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9380:83::o;3169:214::-;2954:6;;-1:-1:-1;;;;;2954:6:0;2964:10;2954:20;2946:39;;;;-1:-1:-1;;;2946:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3258:22:0;::::1;3250:43;;;::::0;-1:-1:-1;;;3250:43:0;;12421:2:1;3250:43:0::1;::::0;::::1;12403:21:1::0;12460:1;12440:18;;;12433:29;-1:-1:-1;;;12478:18:1;;;12471:38;12526:18;;3250:43:0::1;12219:331:1::0;3250:43:0::1;3330:6;::::0;;3309:38:::1;::::0;-1:-1:-1;;;;;3309:38:0;;::::1;::::0;3330:6;::::1;::::0;3309:38:::1;::::0;::::1;3358:6;:17:::0;;-1:-1:-1;;;;;;3358:17:0::1;-1:-1:-1::0;;;;;3358:17:0;;;::::1;::::0;;;::::1;::::0;;3169:214::o;10666:177::-;-1:-1:-1;;;;;10751:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10803:32;;2234:25:1;;;10803:32:0;;2207:18:1;10803:32:0;;;;;;;;10666:177;;;:::o;25876:410::-;25982:16;;26023:8;;26019:47;;26048:7;25876:410;:::o;26019:47::-;-1:-1:-1;;;;;26085:16:0;;;;;;:11;:16;;;;;;26080:21;;26076:203;;26127:7;:14;26122:19;;:40;;;26159:3;-1:-1:-1;;;;;26145:17:0;:7;26153:1;26145:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26145:10:0;:17;;26122:40;26118:150;;;26202:7;:14;;-1:-1:-1;;;;;26183:16:0;;;;;;:11;:16;;;;;:33;;;26235:17;;;;;;;;;;;;;-1:-1:-1;;;;;;26235:17:0;;;;;;25916:370;25876:410;:::o;13130:3783::-;13284:6;13265:15;13275:4;13265:9;:15::i;:::-;:25;;13257:54;;;;-1:-1:-1;;;13257:54:0;;12757:2:1;13257:54:0;;;12739:21:1;12796:2;12776:18;;;12769:30;-1:-1:-1;;;12815:18:1;;;12808:46;12871:18;;13257:54:0;12555:340:1;13257:54:0;13330:14;13339:4;13330:8;:14::i;:::-;:19;13322:47;;;;-1:-1:-1;;;13322:47:0;;13102:2:1;13322:47:0;;;13084:21:1;13141:2;13121:18;;;13114:30;-1:-1:-1;;;13160:18:1;;;13153:45;13215:18;;13322:47:0;12900:339:1;13322:47:0;-1:-1:-1;;;;;13480:17:0;;13384:12;13480:17;;;:13;:17;;;;;;13384:12;;;;;;13480:17;;13476:166;;;13522:17;:15;:17::i;:::-;13514:25;;13476:166;;;-1:-1:-1;;;;;13563:19:0;;;;;;:13;:19;;;;;;;;13559:83;;;13610:20;:18;:20::i;:::-;13599:31;;13559:83;13668:15;;:20;:38;;;;-1:-1:-1;13692:14:0;;-1:-1:-1;;;13692:14:0;;;;13668:38;13664:327;;;-1:-1:-1;;;;;13746:19:0;;;;;;:13;:19;;;;;;;;13745:20;:59;;;;-1:-1:-1;;;;;;13787:17:0;;;;;;:13;:17;;;;;;;;13786:18;13745:59;:100;;;;-1:-1:-1;;;;;;13826:19:0;;;;;;:13;:19;;;;;;;;13825:20;13745:100;:139;;;;-1:-1:-1;;;;;;13867:17:0;;;;;;:13;:17;;;;;;;;13866:18;13745:139;13723:257;;;23216:18;;23263:8;;;13919:45;;;;-1:-1:-1;;;13919:45:0;;13446:2:1;13919:45:0;;;13428:21:1;13485:2;13465:18;;;13458:30;-1:-1:-1;;;13504:18:1;;;13497:47;13561:18;;13919:45:0;13244:341:1;13919:45:0;-1:-1:-1;;;;;14005:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;14028:17:0;;;;;;:13;:17;;;;;;;;14005:40;14001:2559;;;-1:-1:-1;;;;;14067:19:0;;;;;;:13;:19;;;;;;;;14066:20;:42;;;;-1:-1:-1;;;;;;14091:17:0;;;;;;:13;:17;;;;;;;;14090:18;14066:42;14062:2402;;;14133:14;;-1:-1:-1;;;14133:14:0;;;;14129:209;;;14184:15;;:19;;;;14260:35;;;14273:12;;14269:1;:16;:25;;;;;14289:5;14269:25;14226:92;;;;;;14149:189;14129:209;14382:14;;-1:-1:-1;;;14382:14:0;;;;:54;;;;-1:-1:-1;14421:15:0;;-1:-1:-1;;;14421:15:0;;;;14382:54;:114;;;;;14494:2;;14476:15;;:20;;;;:::i;:::-;14461:12;:35;14382:114;:157;;;;-1:-1:-1;;;;;;14522:17:0;;;;;;:13;:17;;;;;;;;14521:18;14382:157;14356:268;;;-1:-1:-1;;;;;14582:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;14582:22:0;14600:4;14582:22;;;14356:268;14668:13;;-1:-1:-1;;;14668:13:0;;;;:54;;;;;14721:1;14706:12;;:16;14668:54;14642:731;;;14765:10;;14798:507;14822:12;;14818:1;:16;14798:507;;;15051:44;;;;;;13775:19:1;;;13810:12;;;13803:28;;;15079:15:0;13847:12:1;;;13840:28;13884:12;;15051:44:0;;;;;;;;;;;;14999:135;;;;;;14953:216;;14868:359;;15254:27;15269:4;15275:2;15279:1;15254:14;:27::i;:::-;-1:-1:-1;14836:3:0;;;;:::i;:::-;;;;14798:507;;;-1:-1:-1;15337:12:0;;:16;;15352:1;15337:16;:::i;:::-;15327:26;;;;:::i;:::-;;;14742:631;14642:731;-1:-1:-1;;;;;15397:17:0;;;;;;:13;:17;;;;;;;;15393:981;;;15444:6;;;;;;;15443:7;:17;;;;;15455:5;15454:6;15443:17;15439:916;;;15489:28;15520:24;15538:4;15520:9;:24::i;:::-;15489:55;;15598:12;;15575:20;:35;15571:761;;;15643:15;15900:10;;15850:14;;15802:12;;15757:9;;15708:13;;15661:11;;:60;;;;:::i;:::-;:105;;;;:::i;:::-;:153;;;;:::i;:::-;:203;;;;:::i;:::-;:249;;;;:::i;:::-;15643:267;;15941:27;16037:3;15980:17;;15971:6;:26;;;;:::i;:::-;:69;;;;:::i;:::-;15941:99;;16097:20;16075:19;:42;16071:157;;;-1:-1:-1;16176:20:0;16071:157;16258:46;16275:19;16296:7;16258:16;:46::i;:::-;15612:720;;15571:761;15462:893;15439:916;16397:5;16396:6;:19;;;;;16407:8;16406:9;16396:19;16392:39;;;16427:4;16417:14;;16392:39;-1:-1:-1;;;;;16482:17:0;;;;;;:13;:17;;;;;;;;16478:71;;;16529:4;16520:13;;16478:71;16574:168;16603:4;16622:2;16639:6;16660:7;16682:6;16703:5;16723:8;16574:14;:168::i;:::-;-1:-1:-1;;;;;16759:21:0;;16775:4;16759:21;16755:151;;16801:6;16797:62;;;16828:15;16838:4;16828:9;:15::i;:::-;16873:21;16887:6;16873:13;:21::i;:::-;13199:3714;;;;13130:3783;;;:::o;11829:454::-;11933:9;;11980:22;;;-1:-1:-1;;;11980:22:0;;;;11879:10;;-1:-1:-1;;;;;11933:9:0;;11879:10;;;;11933:9;;11980:20;;:22;;;;;;;;;;;;;;;11933:9;11980:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12036:8:0;;-1:-1:-1;;;;;11954:48:0;;;;-1:-1:-1;11954:48:0;;;-1:-1:-1;;;;;;12036:8:0;12015:18;12100:4;12079:26;;12075:104;;;-1:-1:-1;12126:2:0;12075:104;;;-1:-1:-1;12165:2:0;12075:104;12202:47;;-1:-1:-1;;;12202:47:0;;-1:-1:-1;;;;;4158:32:1;;;12202:47:0;;;4140:51:1;12191:8:0;;12202:28;;;;;;4113:18:1;;12202:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12268:7;;;;;11829:454;-1:-1:-1;;;;;;11829:454:0:o;12291:464::-;12401:9;;12448:22;;;-1:-1:-1;;;12448:22:0;;;;12344:13;;-1:-1:-1;;;;;12401:9:0;;12344:13;;;;12401:9;;12448:20;;:22;;;;;;;;;;;;;;;12401:9;12448:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12504:8:0;;-1:-1:-1;;;;;12422:48:0;;;;-1:-1:-1;12422:48:0;;;-1:-1:-1;;;;;;12504:8:0;12483:18;12568:4;12547:26;;12543:104;;;-1:-1:-1;12594:2:0;12543:104;;;-1:-1:-1;12633:2:0;12543:104;12670:47;;-1:-1:-1;;;12670:47:0;;-1:-1:-1;;;;;4158:32:1;;;12670:47:0;;;4140:51:1;12659:8:0;;12670:28;;;;;;4113:18:1;;12670:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12739:8;;;;;12291:464;-1:-1:-1;;;;;;12291:464:0:o;11366:293::-;-1:-1:-1;;;;;11510:17:0;;11493:4;11510:17;;;:9;:17;;;;;:27;;11531:6;;11510:17;11493:4;;11510:27;;11531:6;;11510:27;:::i;:::-;;;;-1:-1:-1;;;;;;;11548:20:0;;;;;;:9;:20;;;;;:30;;11572:6;;11548:20;:30;;11572:6;;11548:30;:::i;:::-;;;;;;;;11611:9;-1:-1:-1;;;;;11594:35:0;11603:6;-1:-1:-1;;;;;11594:35:0;;11622:6;11594:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;11594:35:0;;;;;;;;-1:-1:-1;11647:4:0;11366:293;;;;;:::o;19880:2779::-;5413:6;:13;;-1:-1:-1;;5413:13:0;;;;;20004:12;;;:32:::1;;-1:-1:-1::0;20020:16:0;;20004:32:::1;20053:7;20000:71;20083:13;20112:9;;20099:10;;:22;;;;:::i;:::-;20083:38:::0;-1:-1:-1;20132:16:0::1;20179:7:::0;20175:1:::1;20152:19;20083:38:::0;20152:11;:19:::1;:::i;:::-;20151:25;;;;:::i;:::-;:35;;;;:::i;:::-;20132:54:::0;-1:-1:-1;20197:18:0::1;20228:9;20236:1;20228:5:::0;:9:::1;:::i;:::-;20218:19;::::0;:7;:19:::1;:::i;:::-;20269:8;::::0;20325:16:::1;::::0;;20339:1:::1;20325:16:::0;;;;;::::1;::::0;;20197:40;;-1:-1:-1;;;;;;20269:8:0;;::::1;::::0;20250:9:::1;::::0;20325:16;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20325:16:0::1;20291:50;;20380:4;20352:14;20367:1;20352:17;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20352:33:0;;::::1;:17;::::0;;::::1;::::0;;;;;:33;20416:8:::1;::::0;20396:17;;20416:8;::::1;::::0;20396:14;;20416:8;;20396:17;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;20396:28:0;;::::1;:17;::::0;;::::1;::::0;;;;;:28;20452:11:::1;::::0;::::1;:65;20536:22;20550:8:::0;20536:11;:22:::1;:::i;:::-;20638:17;::::0;20452:253:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;20452:253:0;;;::::1;::::0;;20577:1:::1;::::0;20597:14;;20638:17;;::::1;-1:-1:-1::0;;;;;20638:17:0::1;::::0;20675:15:::1;::::0;20452:253:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;20435:416;;20744:95;::::0;20823:1:::1;2234:25:1::0;;20744:95:0::1;::::0;2222:2:1;2207:18;20744:95:0::1;;;;;;;20435:416;20901:17;::::0;20880:40:::1;::::0;-1:-1:-1;;;20880:40:0;;-1:-1:-1;;;;;20901:17:0;;;::::1;::::0;::::1;20880:40;::::0;::::1;4140:51:1::0;-1:-1:-1;;20880:12:0;::::1;::::0;::::1;::::0;4113:18:1;;20880:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20863:57:::0;-1:-1:-1;20935:11:0;;20931:110:::1;;20987:17;::::0;20963:66:::1;::::0;-1:-1:-1;;;20963:66:0;;20987:17;;;::::1;-1:-1:-1::0;;;;;20987:17:0;;::::1;20963:66;::::0;::::1;16497:34:1::0;21015:4:0::1;16547:18:1::0;;;16540:43;16599:18;;;16592:34;;;20963:15:0;::::1;::::0;::::1;::::0;16432:18:1;;20963:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20931:110;21053:18;21097:10:::0;21093:1:::1;21075:14;21084:5:::0;21075:6;:14:::1;:::i;:::-;21074:20;;;;:::i;:::-;:33;;;;:::i;:::-;21053:54;;21118:17;21193:10;21163:12;;21149:11;;:26;;;;:::i;:::-;21139:37;::::0;:6;:37:::1;:::i;:::-;21138:65;;;;:::i;:::-;21118:85:::0;-1:-1:-1;21237:13:0;;21233:310:::1;;21271:13;::::0;::::1;;21267:215;;;21311:8;::::0;21305:35:::1;::::0;-1:-1:-1;;;21305:35:0;;::::1;::::0;::::1;2234:25:1::0;;;-1:-1:-1;;;;;21311:8:0;;::::1;::::0;21305:24:::1;::::0;2207:18:1;;21305:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21359:11:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;21359:11:0;;::::1;::::0;-1:-1:-1;21359:31:0;::::1;;;::::0;-1:-1:-1;21380:9:0;;21359:11:::1;:31:::0;:11;:31;21380:9;21359:11;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21267:215;;;21443:11;::::0;21431:35:::1;::::0;-1:-1:-1;;;21431:35:0;;-1:-1:-1;;;;;21443:11:0;;::::1;21431:35;::::0;::::1;11196:51:1::0;11263:18;;;11256:34;;;21431:11:0;;::::1;::::0;::::1;::::0;11169:18:1;;21431:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21267:215;21522:9;21496:22;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21233:310:0::1;21594:1;21583:8;:12;:30;;;;;21612:1;21599:10;:14;21583:30;21579:470;;;21651:11;::::0;21742:8:::1;::::0;21886:11:::1;::::0;21651:303:::1;::::0;-1:-1:-1;;;21651:303:0;;21706:4:::1;21651:303;::::0;::::1;17329:34:1::0;-1:-1:-1;;;;;21742:8:0;;::::1;17379:18:1::0;;;17372:43;17431:18;;;17424:34;;;17474:18;;;17467:34;;;21651:11:0::1;17517:19:1::0;;;17510:35;;;17561:19;;;17554:35;21886:11:0;;::::1;17605:19:1::0;;;17598:44;21920:15:0::1;17658:19:1::0;;;17651:35;21651:11:0;::::1;::::0;:24:::1;::::0;17263:19:1;;21651:303:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21651:303:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21651:303:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21630:408;;22001:21;::::0;::::1;::::0;;;::::1;21630:408;;;;;;;22100:14;;22084:13;;:30;;;;:::i;:::-;22118:1;22084:35:::0;22080:74:::1;;22136:7;;;;;;;;;;22080:74;22167:10;:17:::0;22188:1:::1;22167:22;22164:478;;22222:11;::::0;22306:27:::1;::::0;-1:-1:-1;;;22306:27:0;;22327:4:::1;22306:27;::::0;::::1;4140:51:1::0;-1:-1:-1;;;;;22222:11:0;;::::1;::::0;:65:::1;::::0;22306:12;;::::1;::::0;::::1;::::0;4113:18:1;;22306:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22352:1;22372:10;22409:4;22433:15;22222:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22205:424;;22510:103;::::0;22593:1:::1;2234:25:1::0;;22510:103:0::1;::::0;2222:2:1;2207:18;22510:103:0::1;;;;;;;22205:424;19989:2670;;;;;;;;5437:1;-1:-1:-1::0;;5449:6:0;:14;;-1:-1:-1;;5449:14:0;;;19880:2779::o;17262:2422::-;-1:-1:-1;;;;;17501:17:0;;;;;;:9;:17;;;;;;:27;;17521:7;;17501:27;:::i;:::-;-1:-1:-1;;;;;17481:17:0;;;;;;:9;:17;;;;;:47;;;;17569:919;;;;17597:15;17631:6;17627:191;;;17700:10;;17683:14;;17668:12;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;17658:52;;17627:191;;;17789:13;;17777:9;;17763:11;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;17753:49;;17627:191;17834:18;17877:5;17856:17;17866:7;17856;:17;:::i;:::-;17855:27;;;;:::i;:::-;17834:48;-1:-1:-1;17901:14:0;;17897:145;;17936:23;17949:10;17936:23;;:::i;:::-;;;17978:48;17992:6;18008:4;18015:10;17978:13;:48::i;:::-;18058:18;18096:6;18091:225;;18185:5;18170:11;;18160:7;:21;;;;:::i;:::-;18159:31;;;;:::i;:::-;18146:44;;18091:225;;;18295:5;18279:12;;18269:7;:22;;;;:::i;:::-;18268:32;;;;:::i;:::-;18255:45;;18091:225;18334:14;;18330:147;;18369:23;18382:10;18369:23;;:::i;:::-;;;18411:50;18425:6;18441;18450:10;18411:13;:50::i;:::-;17582:906;;;17569:919;18506:5;:31;;;;-1:-1:-1;;;;;;18516:21:0;;;;;;:13;:21;;;;;;;;18515:22;18506:31;:60;;;;-1:-1:-1;;;;;;18542:24:0;;;;;;:13;:24;;;;;;;;18541:25;18506:60;18502:390;;;18583:29;18681:5;18662:15;;18652:7;:25;;;;:::i;:::-;18651:35;;;;:::i;:::-;18627:59;-1:-1:-1;18707:25:0;;18703:178;;18753:34;18766:21;18753:34;;:::i;:::-;;;18806:59;18820:6;18836:4;18843:21;18806:13;:59::i;:::-;18568:324;18502:390;18908:8;:34;;;;-1:-1:-1;;;;;;18921:21:0;;;;;;:13;:21;;;;;;;;18920:22;18908:34;:63;;;;-1:-1:-1;;;;;;18947:24:0;;;;;;:13;:24;;;;;;;;18946:25;18908:63;18904:495;;;18988:32;19095:5;19073:18;;19063:7;:28;;;;:::i;:::-;19062:38;;;;:::i;:::-;19035:65;-1:-1:-1;19121:28:0;;19117:271;;19170:37;19183:24;19170:37;;:::i;:::-;;;19226:146;19262:6;19299;19329:24;19226:13;:146::i;:::-;18973:426;18904:495;-1:-1:-1;;;;;19416:25:0;;;;;;:14;:25;;;;;;;;19415:26;:47;;;;-1:-1:-1;19445:17:0;;-1:-1:-1;;;19445:17:0;;;;19415:47;19411:201;;;19551:15;;19537:9;19527:7;19504:20;19514:9;19504;:20::i;:::-;:30;;;;:::i;:::-;:42;;;;:::i;:::-;19503:63;;19477:135;;;;-1:-1:-1;;;19477:135:0;;19408:2:1;19477:135:0;;;19390:21:1;19447:2;19427:18;;;19420:30;-1:-1:-1;;;19466:18:1;;;19459:40;19516:18;;19477:135:0;19206:334:1;19477:135:0;19623:53;19637:6;19645:9;19656:19;19666:9;19656:7;:19;:::i;:::-;19623:13;:53::i;:::-;17470:2214;17262:2422;;;;;;;:::o;26871:1543::-;26977:12;26952:22;;26930:19;;:44;;;;:::i;:::-;:59;26926:98;;;26871:1543;:::o;26926:98::-;27057:11;;27100:29;;-1:-1:-1;;;27100:29:0;;27123:4;27100:29;;;4140:51:1;27057:11:0;;;;-1:-1:-1;;;;;27057:11:0;;27036;;27057;;27100:14;;4113:18:1;;27100:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27082:47;;27154:21;;27144:7;:31;27140:70;;;27192:7;;26871:1543;:::o;27140:70::-;27250:9;;27296:23;;;-1:-1:-1;;;27296:23:0;;;;-1:-1:-1;;;;;27250:9:0;;;;27224:16;;27250:9;;27296:21;;:23;;;;;;;;;;;;;;;27250:9;27296:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27447:7;:14;27271:48;;-1:-1:-1;27332:19:0;;;;;;;;;27555:9;27585:29;;-1:-1:-1;;;27585:29:0;;27608:4;27585:29;;;4140:51:1;27537:27:0;;-1:-1:-1;;;;;;27585:14:0;;;;;4113:18:1;;27585:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27575:39;;27625:735;27642:3;27632:7;:13;:46;;;;;27662:16;27649:10;:29;27632:46;27625:735;;;27715:16;27699:12;;:32;27695:89;;27767:1;27752:12;:16;27695:89;27812:7;27820:12;;27812:21;;;;;;;;:::i;:::-;;;;;;;;;;;27863:32;;-1:-1:-1;;;27863:32:0;;-1:-1:-1;;;;;27812:21:0;;;27863:32;;;4140:51:1;;;27812:21:0;-1:-1:-1;27863:19:0;;;;;;4113:18:1;;27863:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27848:47;;27929:1;27914:12;:16;:47;;;;-1:-1:-1;;;;;;27935:26:0;;;;;;:13;:26;;;;;;;;27934:27;27914:47;27910:291;;;28018:14;27992:22;28002:12;27992:7;:22;:::i;:::-;27991:41;;;;:::i;:::-;27982:50;;28064:1;28055:6;:10;:52;;;;-1:-1:-1;28069:29:0;;-1:-1:-1;;;28069:29:0;;28092:4;28069:29;;;4140:51:1;28101:6:0;;-1:-1:-1;;;;;28069:14:0;;;;;4113:18:1;;28069:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;28055:52;28051:135;;;28132:34;;-1:-1:-1;;;28132:34:0;;-1:-1:-1;;;;;11214:32:1;;;28132:34:0;;;11196:51:1;11263:18;;;11256:34;;;28132:13:0;;;;;11169:18:1;;28132:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28051:135;28248:9;28238:19;;:7;:19;:::i;:::-;28227:31;;:7;:31;:::i;:::-;28217:41;;28283:9;28307:12;:14;;28273:19;;-1:-1:-1;28307:12:0;:14;;;:::i;:::-;;;;;;28336:12;;;;;:::i;:::-;;;;27625:735;;;-1:-1:-1;;28394:12:0;28372:19;:34;-1:-1:-1;;;;;;;;;;26871:1543:0:o;22667:213::-;-1:-1:-1;;;;;22804:13:0;;;;;;:9;:13;;;;;;:23;;22820:7;;22804:23;:::i;:::-;-1:-1:-1;;;;;22788:13:0;;;;;;;:9;:13;;;;;;;:39;;;;22843:29;;;;;;;;;;22864:7;2234:25:1;;2222:2;2207:18;;2088:177;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;594:118::-;680:5;673:13;666:21;659:5;656:32;646:60;;702:1;699;692:12;717:382;782:6;790;843:2;831:9;822:7;818:23;814:32;811:52;;;859:1;856;849:12;811:52;898:9;885:23;917:31;942:5;917:31;:::i;:::-;967:5;-1:-1:-1;1024:2:1;1009:18;;996:32;1037:30;996:32;1037:30;:::i;:::-;1086:7;1076:17;;;717:382;;;;;:::o;1104:180::-;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;-1:-1:-1;1255:23:1;;1104:180;-1:-1:-1;1104:180:1:o;1289:548::-;1401:4;1430:2;1459;1448:9;1441:21;1491:6;1485:13;1534:6;1529:2;1518:9;1514:18;1507:34;1559:1;1569:140;1583:6;1580:1;1577:13;1569:140;;;1678:14;;;1674:23;;1668:30;1644:17;;;1663:2;1640:26;1633:66;1598:10;;1569:140;;;1573:3;1758:1;1753:2;1744:6;1733:9;1729:22;1725:31;1718:42;1828:2;1821;1817:7;1812:2;1804:6;1800:15;1796:29;1785:9;1781:45;1777:54;1769:62;;;;1289:548;;;;:::o;1842:241::-;1898:6;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:28;2047:5;2025:28;:::i;2270:315::-;2338:6;2346;2399:2;2387:9;2378:7;2374:23;2370:32;2367:52;;;2415:1;2412;2405:12;2367:52;2454:9;2441:23;2473:31;2498:5;2473:31;:::i;:::-;2523:5;2575:2;2560:18;;;;2547:32;;-1:-1:-1;;;2270:315:1:o;2590:367::-;2653:8;2663:6;2717:3;2710:4;2702:6;2698:17;2694:27;2684:55;;2735:1;2732;2725:12;2684:55;-1:-1:-1;2758:20:1;;2801:18;2790:30;;2787:50;;;2833:1;2830;2823:12;2787:50;2870:4;2862:6;2858:17;2846:29;;2930:3;2923:4;2913:6;2910:1;2906:14;2898:6;2894:27;2890:38;2887:47;2884:67;;;2947:1;2944;2937:12;2884:67;2590:367;;;;;:::o;2962:566::-;3054:6;3062;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;3179:9;3166:23;3212:18;3204:6;3201:30;3198:50;;;3244:1;3241;3234:12;3198:50;3283:70;3345:7;3336:6;3325:9;3321:22;3283:70;:::i;:::-;3372:8;;-1:-1:-1;3257:96:1;-1:-1:-1;;3457:2:1;3442:18;;3429:32;3470:28;3429:32;3470:28;:::i;:::-;3517:5;3507:15;;;2962:566;;;;;:::o;3533:437::-;3619:6;3627;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;3736:9;3723:23;3769:18;3761:6;3758:30;3755:50;;;3801:1;3798;3791:12;3755:50;3840:70;3902:7;3893:6;3882:9;3878:22;3840:70;:::i;:::-;3929:8;;3814:96;;-1:-1:-1;3533:437:1;-1:-1:-1;;;;3533:437:1:o;4202:456::-;4279:6;4287;4295;4348:2;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4403:9;4390:23;4422:31;4447:5;4422:31;:::i;:::-;4472:5;-1:-1:-1;4529:2:1;4514:18;;4501:32;4542:33;4501:32;4542:33;:::i;:::-;4202:456;;4594:7;;-1:-1:-1;;;4648:2:1;4633:18;;;;4620:32;;4202:456::o;5805:388::-;5873:6;5881;5934:2;5922:9;5913:7;5909:23;5905:32;5902:52;;;5950:1;5947;5940:12;5902:52;5989:9;5976:23;6008:31;6033:5;6008:31;:::i;:::-;6058:5;-1:-1:-1;6115:2:1;6100:18;;6087:32;6128:33;6087:32;6128:33;:::i;6422:329::-;6624:2;6606:21;;;6663:1;6643:18;;;6636:29;-1:-1:-1;;;6696:2:1;6681:18;;6674:36;6742:2;6727:18;;6422:329::o;7433:380::-;7512:1;7508:12;;;;7555;;;7576:61;;7630:4;7622:6;7618:17;7608:27;;7576:61;7683:2;7675:6;7672:14;7652:18;7649:38;7646:161;;7729:10;7724:3;7720:20;7717:1;7710:31;7764:4;7761:1;7754:15;7792:4;7789:1;7782:15;7646:161;;7433:380;;;:::o;7818:127::-;7879:10;7874:3;7870:20;7867:1;7860:31;7910:4;7907:1;7900:15;7934:4;7931:1;7924:15;7950:127;8011:10;8006:3;8002:20;7999:1;7992:31;8042:4;8039:1;8032:15;8066:4;8063:1;8056:15;8082:135;8121:3;8142:17;;;8139:43;;8162:18;;:::i;:::-;-1:-1:-1;8209:1:1;8198:13;;8082:135::o;8222:184::-;8292:6;8345:2;8333:9;8324:7;8320:23;8316:32;8313:52;;;8361:1;8358;8351:12;8313:52;-1:-1:-1;8384:16:1;;8222:184;-1:-1:-1;8222:184:1:o;8411:128::-;8478:9;;;8499:11;;;8496:37;;;8513:18;;:::i;9886:125::-;9951:9;;;9972:10;;;9969:36;;;9985:18;;:::i;11301:245::-;11368:6;11421:2;11409:9;11400:7;11396:23;11392:32;11389:52;;;11437:1;11434;11427:12;11389:52;11469:9;11463:16;11488:28;11510:5;11488:28;:::i;13907:168::-;13980:9;;;14011;;14028:15;;;14022:22;;14008:37;13998:71;;14049:18;;:::i;14080:217::-;14120:1;14146;14136:132;;14190:10;14185:3;14181:20;14178:1;14171:31;14225:4;14222:1;14215:15;14253:4;14250:1;14243:15;14136:132;-1:-1:-1;14282:9:1;;14080:217::o;14302:188::-;14381:13;;-1:-1:-1;;;;;14423:42:1;;14413:53;;14403:81;;14480:1;14477;14470:12;14495:450;14582:6;14590;14598;14651:2;14639:9;14630:7;14626:23;14622:32;14619:52;;;14667:1;14664;14657:12;14619:52;14690:40;14720:9;14690:40;:::i;:::-;14680:50;;14749:49;14794:2;14783:9;14779:18;14749:49;:::i;:::-;14739:59;;14841:2;14830:9;14826:18;14820:25;14885:10;14878:5;14874:22;14867:5;14864:33;14854:61;;14911:1;14908;14901:12;15082:980;15344:4;15392:3;15381:9;15377:19;15423:6;15412:9;15405:25;15449:2;15487:6;15482:2;15471:9;15467:18;15460:34;15530:3;15525:2;15514:9;15510:18;15503:31;15554:6;15589;15583:13;15620:6;15612;15605:22;15658:3;15647:9;15643:19;15636:26;;15697:2;15689:6;15685:15;15671:29;;15718:1;15728:195;15742:6;15739:1;15736:13;15728:195;;;15807:13;;-1:-1:-1;;;;;15803:39:1;15791:52;;15898:15;;;;15863:12;;;;15839:1;15757:9;15728:195;;;-1:-1:-1;;;;;;;15979:32:1;;;;15974:2;15959:18;;15952:60;-1:-1:-1;;;16043:3:1;16028:19;16021:35;15940:3;15082:980;-1:-1:-1;;;15082:980:1:o;17697:306::-;17785:6;17793;17801;17854:2;17842:9;17833:7;17829:23;17825:32;17822:52;;;17870:1;17867;17860:12;17822:52;17899:9;17893:16;17883:26;;17949:2;17938:9;17934:18;17928:25;17918:35;;17993:2;17982:9;17978:18;17972:25;17962:35;;17697:306;;;;;:::o;18008:1003::-;18267:4;18315:3;18304:9;18300:19;18346:6;18335:9;18328:25;18372:2;18410:6;18405:2;18394:9;18390:18;18383:34;18453:3;18448:2;18437:9;18433:18;18426:31;18477:6;18512;18506:13;18543:6;18535;18528:22;18581:3;18570:9;18566:19;18559:26;;18604:6;18601:1;18594:17;18647:2;18644:1;18634:16;18620:30;;18668:1;18678:194;18692:6;18689:1;18686:13;18678:194;;;18757:13;;-1:-1:-1;;;;;18753:39:1;18741:52;;18789:1;18848:14;;;;18813:12;;;;18707:9;18678:194;

Swarm Source

ipfs://8ca0c5fd215a4146545b37be9c04951d183c9cba6ba25c65190e918c1f629b28

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

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.