ETH Price: $2,603.80 (-2.77%)
Gas: 1 Gwei

Contract

0x15Fb0d51420D3259607c45D1f6F4Ae2fF730B6c7
 

Overview

ETH Balance

0.05 ETH

Eth Value

$130.19 (@ $2,603.80/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203361332024-07-18 21:36:1122 days ago1721338571IN
0x15Fb0d51...fF730B6c7
0 ETH0.000417468.97647482
Approve202775202024-07-10 17:13:5930 days ago1720631639IN
0x15Fb0d51...fF730B6c7
0 ETH0.0006427813.83907732
Approve202587772024-07-08 2:21:3533 days ago1720405295IN
0x15Fb0d51...fF730B6c7
0 ETH0.000144183.10262525
Approve202310672024-07-04 5:29:4737 days ago1720070987IN
0x15Fb0d51...fF730B6c7
0 ETH0.000138623
Approve202293102024-07-03 23:36:4737 days ago1720049807IN
0x15Fb0d51...fF730B6c7
0 ETH0.000409558.80634264
Approve202293102024-07-03 23:36:4737 days ago1720049807IN
0x15Fb0d51...fF730B6c7
0 ETH0.000409558.80634264
Approve202090772024-07-01 3:47:1140 days ago1719805631IN
0x15Fb0d51...fF730B6c7
0 ETH0.000253185.44402739
Approve202090702024-07-01 3:45:4740 days ago1719805547IN
0x15Fb0d51...fF730B6c7
0 ETH0.00018664.03952077
Approve202090652024-07-01 3:44:4740 days ago1719805487IN
0x15Fb0d51...fF730B6c7
0 ETH0.000200474.33977712
Approve201927902024-06-28 21:12:1142 days ago1719609131IN
0x15Fb0d51...fF730B6c7
0 ETH0.000124192.67387986
Approve201454402024-06-22 6:25:1148 days ago1719037511IN
0x15Fb0d51...fF730B6c7
0 ETH0.000108582.35126053
Approve201283422024-06-19 21:02:3551 days ago1718830955IN
0x15Fb0d51...fF730B6c7
0 ETH0.0004747610.29342563
Approve200376502024-06-07 4:45:5964 days ago1717735559IN
0x15Fb0d51...fF730B6c7
0 ETH0.000327197.04455247
Approve200339762024-06-06 16:27:4764 days ago1717691267IN
0x15Fb0d51...fF730B6c7
0 ETH0.0011701125.19243453
Approve200325122024-06-06 11:33:1164 days ago1717673591IN
0x15Fb0d51...fF730B6c7
0 ETH0.0009572520.60967164
Approve200161612024-06-04 4:46:2367 days ago1717476383IN
0x15Fb0d51...fF730B6c7
0 ETH0.000249145.39463051
Approve199738462024-05-29 6:51:5972 days ago1716965519IN
0x15Fb0d51...fF730B6c7
0 ETH0.0009174519.72719577
Approve199735982024-05-29 6:01:5972 days ago1716962519IN
0x15Fb0d51...fF730B6c7
0 ETH0.000430879.26464571
Approve199614952024-05-27 13:26:3574 days ago1716816395IN
0x15Fb0d51...fF730B6c7
0 ETH0.0009813921.10205841
Approve199572322024-05-26 23:08:2375 days ago1716764903IN
0x15Fb0d51...fF730B6c7
0 ETH0.000207074.45833548
Approve199566212024-05-26 21:04:5975 days ago1716757499IN
0x15Fb0d51...fF730B6c7
0 ETH0.000298786.43291119
Approve199555722024-05-26 17:34:1175 days ago1716744851IN
0x15Fb0d51...fF730B6c7
0 ETH0.000357837.75829663
Approve199369732024-05-24 3:11:3578 days ago1716520295IN
0x15Fb0d51...fF730B6c7
0 ETH0.000352227.57363893
Approve199364092024-05-24 1:18:2378 days ago1716513503IN
0x15Fb0d51...fF730B6c7
0 ETH0.000488310.49963152
Approve199363222024-05-24 1:00:5978 days ago1716512459IN
0x15Fb0d51...fF730B6c7
0 ETH0.000331597.12992825
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
151210612022-07-11 11:16:51760 days ago1657538211
0x15Fb0d51...fF730B6c7
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BOI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

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

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

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

    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;

        allowed[WETH] = true;

        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {

        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, WETH);
            }
        }

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

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

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

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

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");

        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);

            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            if (rewardAddress == address(BASE)) {

                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);

            } else {

                IERC20 rewardToken = IERC20(rewardAddress);

                uint256 beforeBalance = rewardToken.balanceOf(shareholder);

                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;

                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;

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

                }

                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));

            }

        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

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

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");

        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

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

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        _sent = IERC20(token).transfer(_to, _contractBalance);
    }

}

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

    uint256 public constant MASK = type(uint128).max;
    address BASE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Yellow Boi";
    string constant _symbol = "BOI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000 * (10 ** _decimals);
    uint256 public _maxWallet = 15_000 * (10 ** _decimals);

    uint256 public minAmountToTriggerSwap = 0;

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

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

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 0;
    uint256 buyOperationsFee = 0;
    uint256 buyTreasuryFee = 0;
    uint256 buyTotalFee = 0;

    uint256 sellLiquidityFee = 0;
    uint256 sellReflectionFee = 0;
    uint256 sellOperationsFee = 0;
    uint256 sellTreasuryFee = 0;
    uint256 sellTotalFee = 0;

    uint256 feeDenominator = 10000;

    uint256 _liquidityTokensToSwap;
    uint256 _reflectionTokensToSwap;
    uint256 _operationsTokensToSwap;
    uint256 _treasuryTokensToSwap;

    address public autoLiquidityReceiver = 0xdF52768ca8cE88b64Ae1519061711d86186F6eeF;
    address public operationsFeeReceiver = 0xdF52768ca8cE88b64Ae1519061711d86186F6eeF;
    address public treasuryFeeReceiver = msg.sender;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000; // 0.0025%

    bool public tradingEnabled = false;

    bool inSwap;
    modifier swapping() {
        inSwap = true; _;
        inSwap = false;
    }

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

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

        autoLiquidityReceiver = msg.sender;

        _setAutomatedMarketMakerPair(pair, true);

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

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

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

        require(tradingEnabled || isDisabledExempt[sender], "Trading is currently disabled");

        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;

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

        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) {
                swapBack();
            }
        }

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

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

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

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

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

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

    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {

        if (isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            bool isBuy = automatedMarketMakerPairs[sender] || sender == routerAddress;
            bool isSell =  automatedMarketMakerPairs[recipient]|| recipient == routerAddress;

            if (isBuy || isSell) {
                return !isFeeExempt[sender] && !isFeeExempt[recipient];
            } else {
                return false;
            }
        }

    }

    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        if (selling) {
            return sellTotalFee;
        }
        return buyTotalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;

        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        if (totalFee > 0) {
            if (isSell) {
                if (sellLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
                }
                if (sellOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
                }
                if (sellReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
                }
                if (sellTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * sellTreasuryFee / totalFee;
                }
            } else {
                if (buyLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
                }
                if (buyOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
                }
                if (buyReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
                }
                if (buyTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * buyTreasuryFee / totalFee;
                }
            }
        }

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

        return amount.sub(feeAmount);
    }

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

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        if (value) {
            isDividendExempt[_pair] = true;
        }
        if (!value) {
            isDividendExempt[_pair] = false;
        }
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap).add(_treasuryTokensToSwap);
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);

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

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

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

        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHTreasury = amountETH.mul(_treasuryTokensToSwap).div(totalTokensToSwap);
        
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
        _treasuryTokensToSwap = 0;

        if (amountETHReflection > 0) {
            try distributor.deposit{value: amountETHReflection}() {} catch {}
        }
        if (amountETHOperations > 0) {
            payable(operationsFeeReceiver).transfer(amountETHOperations);
        }
        if (amountETHTreasury > 0) {
            payable(treasuryFeeReceiver).transfer(amountETHTreasury);
        }

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

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

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = _BASE;
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setMaxWallet(
        uint256 amount
    ) external authorized {
        _maxWallet = amount;
    }

    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external authorized {
        minAmountToTriggerSwap = amount;
    }

    function setIsFeeOnTransferEnabled(
        bool status
    ) external authorized {
        isFeeOnTransferEnabled = status;
    }

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

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

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

    function checkIsDisabledExempt(
        address holder
    ) public view returns (bool) {
        return isDisabledExempt[holder];
    }

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

    function checkIsFeeExempt(
        address holder
    ) public view returns (bool) {
        return isFeeExempt[holder];
    }

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

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

    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _buyTreasuryFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _sellTreasuryFee,
        uint256 _feeDenominator
    ) external authorized {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTreasuryFee = _buyTreasuryFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee).add(_buyTreasuryFee);

        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTreasuryFee = _sellTreasuryFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee).add(_sellTreasuryFee);

        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver,
        address _treasuryFeeReceiver
    ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function enableTrading() external authorized {
        if (!tradingEnabled) {
            tradingEnabled = true;
        }
    }

    function toggleTrading(
        bool _enabled
    ) external authorized {
        tradingEnabled = _enabled;
    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);

        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        }
        pair = _pair;

        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_BASE","type":"address"}],"name":"changeBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_setWETH","type":"bool"}],"name":"changeRouterPairDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"changeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeOnTransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTriggerSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_treasuryFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buyOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sellOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDisabledExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsFeeOnTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinAmountToTriggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556003805482169092179091556004805461dead9083168117909155600580548316905560068054909216179055620000696009600a62000697565b6200007890620f424062000756565b600755620000896009600a62000697565b6200009790613a9862000756565b600855600060098190556010805460ff1916905560128190556013819055601481905560158190556016819055601781905560188190556019819055601a819055601b55612710601c55602180546001600160a01b031990811673df52768ca8ce88b64ae1519061711d86186f6eef90811790925560228054821690921790915560238054909116331790556027805460ff60a01b1916600160a01b1790556007546200014890611388906200062b565b6028556029805460ff191690553480156200016257600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560248054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b815292519192839263c45a015592600480840193919291829003018186803b158015620001e857600080fd5b505afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002239190620005f9565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200027057600080fd5b505af115801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab9190620005f9565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060248054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c4648926004808201939291829003018186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003609190620005f9565b600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080336040516200039690620005eb565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620003ca573d6000803e3d6000fd5b50602680546001600160a01b039283166001600160a01b03199182168117909255602780548216909217909155336000818152600c60209081526040808320805460ff199081166001908117909255600d845282852080548216831790556025805489168652600e90945282852080548216831790553085528285208054821683179055600454881685529190932080549091168317905560218054909416909217909255546200047d92169062000500565b62000491816007546200057d60201b60201c565b50602554600754620004ad916001600160a01b0316906200057d565b50600754336000818152600a6020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200078e565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915562000552576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b8062000579576001600160a01b0382166000908152600e60205260409020805460ff191690555b5050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005d99086815260200190565b60405180910390a35060015b92915050565b611f70806200586c83390190565b6000602082840312156200060c57600080fd5b81516001600160a01b03811681146200062457600080fd5b9392505050565b6000826200064957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200068f57816000190482111562000673576200067362000778565b808516156200068157918102915b93841c939080029062000653565b509250929050565b60006200062460ff841683600082620006b357506001620005e5565b81620006c257506000620005e5565b8160018114620006db5760028114620006e65762000706565b6001915050620005e5565b60ff841115620006fa57620006fa62000778565b50506001821b620005e5565b5060208310610133831016604e8410600b84101617156200072b575081810a620005e5565b6200073783836200064e565b80600019048211156200074e576200074e62000778565b029392505050565b600081600019048311821515161562000773576200077362000778565b500290565b634e487b7160e01b600052601160045260246000fd5b6150ce806200079e6000396000f3fe608060405260043610620003e75760003560e01c8063845610ee1162000203578063b62496f51162000117578063e0f8e24311620000ad578063f2fde38b1162000078578063f2fde38b1462000cc4578063f708a64f1462000ce9578063f887ea401462000d0e578063fe9fbb801462000d3057600080fd5b8063e0f8e2431462000c2f578063e91f214e1462000c54578063f0b37c041462000c7a578063f1f3bca31462000c9f57600080fd5b8063cd806f4311620000ee578063cd806f431462000b76578063d7c010321462000b9b578063dd62ed3e1462000bc0578063df20fd491462000c0a57600080fd5b8063b62496f51462000afb578063b6a5d7de1462000b2f578063ca33e64c1462000b5457600080fd5b80639a7a23d61162000199578063a9059cbb1162000164578063a9059cbb1462000a6a578063ad5c46481462000a8f578063add5df661462000ab1578063af06795a1462000ad657600080fd5b80639a7a23d614620009e95780639d64bf931462000a0e578063a51af4c51462000a26578063a8aa1b311462000a4857600080fd5b80638a8c523c11620001da5780638a8c523c146200095357806391950f30146200096b5780639571a07d146200098757806395d89b4114620009bb57600080fd5b8063845610ee14620008e9578063893d20e8146200090e57806389ef69f6146200092e57600080fd5b806338e9914411620002fb57806360733e8f11620002915780637088fb7f116200025c5780637088fb7f146200085a57806370a08231146200087257806382247ec014620008ac5780638366e79a14620008c457600080fd5b806360733e8f1462000798578063658d4b7f14620007d55780636d92e1a514620007fa5780636ddd1713146200083757600080fd5b80634ada218b11620002d25780634ada218b146200070d578063571ac8b014620007295780635881f3ef146200074e5780635d0044ca146200077357600080fd5b806338e9914414620006685780633f4218e014620006a55780634355855a14620006d957600080fd5b806326560be7116200037d5780632f54bf6e11620003485780632f54bf6e14620005cd578063313ce56714620006005780633425c001146200061e578063379fad9a146200064357600080fd5b806326560be7146200053a578063296020e7146200055f5780632af10fac14620005935780632b112e4914620005b557600080fd5b8063095ea7b311620003be578063095ea7b314620004a857806315d61a8214620004cd57806318160ddd14620004f457806323b872dd146200051557600080fd5b806303382cbb14620003f457806306fdde03146200043357806307c89fe8146200047257600080fd5b36620003ef57005b600080fd5b3480156200040157600080fd5b5060225462000416906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200044057600080fd5b5060408051808201909152600a81526959656c6c6f7720426f6960b01b60208201525b6040516200042a919062002f4a565b3480156200047f57600080fd5b50620004976200049136600462002cae565b62000d55565b60405190151581526020016200042a565b348015620004b557600080fd5b5062000497620004c736600462002df7565b62000dab565b348015620004da57600080fd5b50620004f2620004ec36600462002e87565b62000e19565b005b3480156200050157600080fd5b506007545b6040519081526020016200042a565b3480156200052257600080fd5b50620004976200053436600462002d7e565b62000e48565b3480156200054757600080fd5b50620004f26200055936600462002e26565b62000f11565b3480156200056c57600080fd5b50620004976200057e36600462002cae565b600f6020526000908152604090205460ff1681565b348015620005a057600080fd5b5060235462000416906001600160a01b031681565b348015620005c257600080fd5b506200050662000f4e565b348015620005da57600080fd5b5062000497620005ec36600462002cae565b6000546001600160a01b0391821691161490565b3480156200060d57600080fd5b50604051600981526020016200042a565b3480156200062b57600080fd5b50620004f26200063d36600462002cae565b62000fa4565b3480156200065057600080fd5b50620004f26200066236600462002e26565b62000ff2565b3480156200067557600080fd5b50620004976200068736600462002cae565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015620006b257600080fd5b5062000497620006c436600462002cae565b600d6020526000908152604090205460ff1681565b348015620006e657600080fd5b5062000497620006f836600462002cae565b600e6020526000908152604090205460ff1681565b3480156200071a57600080fd5b50602954620004979060ff1681565b3480156200073657600080fd5b50620004976200074836600462002cae565b6200102f565b3480156200075b57600080fd5b50620004166200076d36600462002cae565b6200103f565b3480156200078057600080fd5b50620004f26200079236600462002e87565b620013d0565b348015620007a557600080fd5b5062000497620007b736600462002cae565b6001600160a01b03166000908152600d602052604090205460ff1690565b348015620007e257600080fd5b50620004f2620007f436600462002dc4565b620013ff565b3480156200080757600080fd5b50620004976200081936600462002cae565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156200084457600080fd5b506027546200049790600160a01b900460ff1681565b3480156200086757600080fd5b50620004f262001454565b3480156200087f57600080fd5b50620005066200089136600462002cae565b6001600160a01b03166000908152600a602052604090205490565b348015620008b957600080fd5b506200050660085481565b348015620008d157600080fd5b5062000497620008e336600462002cee565b620014b5565b348015620008f657600080fd5b50620004f26200090836600462002cae565b620015f3565b3480156200091b57600080fd5b506000546001600160a01b031662000416565b3480156200093b57600080fd5b50620004f26200094d36600462002cae565b62001642565b3480156200096057600080fd5b50620004f262001693565b3480156200097857600080fd5b50601054620004979060ff1681565b3480156200099457600080fd5b5062000497620009a636600462002cae565b600c6020526000908152604090205460ff1681565b348015620009c857600080fd5b50604080518082019091526003815262424f4960e81b602082015262000463565b348015620009f657600080fd5b50620004f262000a0836600462002dc4565b620016d8565b34801562000a1b57600080fd5b506200050660095481565b34801562000a3357600080fd5b5060275462000416906001600160a01b031681565b34801562000a5557600080fd5b5060255462000416906001600160a01b031681565b34801562000a7757600080fd5b506200049762000a8936600462002df7565b62001711565b34801562000a9c57600080fd5b5060035462000416906001600160a01b031681565b34801562000abe57600080fd5b50620004f262000ad036600462002eea565b62001720565b34801562000ae357600080fd5b50620004f262000af536600462002dc4565b620017b2565b34801562000b0857600080fd5b506200049762000b1a36600462002cae565b60116020526000908152604090205460ff1681565b34801562000b3c57600080fd5b50620004f262000b4e36600462002cae565b62001807565b34801562000b6157600080fd5b5060215462000416906001600160a01b031681565b34801562000b8357600080fd5b50620004f262000b9536600462002dc4565b6200185b565b34801562000ba857600080fd5b50620004f262000bba36600462002d2c565b62001b07565b34801562000bcd57600080fd5b506200050662000bdf36600462002cee565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801562000c1757600080fd5b50620004f262000c2936600462002e66565b62001b70565b34801562000c3c57600080fd5b50620004f262000c4e36600462002cae565b62001bbc565b34801562000c6157600080fd5b50620005066fffffffffffffffffffffffffffffffff81565b34801562000c8757600080fd5b50620004f262000c9936600462002cae565b62001c0b565b34801562000cac57600080fd5b506200050662000cbe36600462002e26565b62001c59565b34801562000cd157600080fd5b50620004f262000ce336600462002cae565b62001c72565b34801562000cf657600080fd5b50620004f262000d0836600462002dc4565b62001d0b565b34801562000d1b57600080fd5b5060245462000416906001600160a01b031681565b34801562000d3d57600080fd5b506200049762000d4f36600462002cae565b62001e1a565b600080546001600160a01b0316331462000d8c5760405162461bcd60e51b815260040162000d839062002fa2565b60405180910390fd5b506001600160a01b03166000908152600f602052604090205460ff1690565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000e079086815260200190565b60405180910390a35060015b92915050565b62000e243362001e1a565b62000e435760405162461bcd60e51b815260040162000d839062002fc2565b600955565b6007546001600160a01b0384166000908152600b6020908152604080832033845290915281205490911462000efa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b8252838120338252909152919091205462000ed591849062001e38565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b62000f0784848462001e67565b90505b9392505050565b62000f1c3362001e1a565b62000f3b5760405162461bcd60e51b815260040162000d839062002fc2565b6029805460ff1916911515919091179055565b6005546001600160a01b03166000908152600a602052604081205462000f9f906004546001600160a01b03166000908152600a602052604090205462000f98906007549062002276565b9062002276565b905090565b6000546001600160a01b0316331462000fd15760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b62000ffd3362001e1a565b6200101c5760405162461bcd60e51b815260040162000d839062002fc2565b6010805460ff1916911515919091179055565b600062000e138260075462000dab565b600080546001600160a01b031633146200106d5760405162461bcd60e51b815260040162000d839062002fa2565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620010ac57600080fd5b505afa158015620010c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e7919062002cce565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200113057600080fd5b505afa15801562001145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116b919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015620011b257600080fd5b505afa158015620011c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ed919062002cce565b91506001600160a01b0382166200137e57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123857600080fd5b505afa1580156200124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001273919062002cce565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620012bc57600080fd5b505afa158015620012d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f7919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200134057600080fd5b505af115801562001355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200137b919062002cce565b91505b602580546001600160a01b038085166001600160a01b0319928316179092556024805493909216921682179055600754306000908152600b602090815260408083209483529390529190912055919050565b620013db3362001e1a565b620013fa5760405162461bcd60e51b815260040162000d839062002fc2565b600855565b6200140a3362001e1a565b620014295760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620014815760405162461bcd60e51b815260040162000d839062002fa2565b6040514790339082156108fc029083906000818181858888f19350505050158015620014b1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314620014e35760405162461bcd60e51b815260040162000d839062002fa2565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156200152657600080fd5b505afa1580156200153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001561919062002ea1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015620015b057600080fd5b505af1158015620015c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015eb919062002e46565b949350505050565b6000546001600160a01b03163314620016205760405162461bcd60e51b815260040162000d839062002fa2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200166f5760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6200169e3362001e1a565b620016bd5760405162461bcd60e51b815260040162000d839062002fc2565b60295460ff16620016d6576029805460ff191660011790555b565b6000546001600160a01b03163314620017055760405162461bcd60e51b815260040162000d839062002fa2565b620014b1828262002284565b600062000f0a33848462001e67565b6200172b3362001e1a565b6200174a5760405162461bcd60e51b815260040162000d839062002fc2565b601289905560138890556014879055601586905562001778866200177189818d8d620022fe565b90620022fe565b601655601785905560188490556019839055601a829055620017a2826200177185818989620022fe565b601b55601c555050505050505050565b620017bd3362001e1a565b620017dc5760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620018345760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314620018885760405162461bcd60e51b815260040162000d839062002fa2565b602480546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620018dd57600080fd5b505afa158015620018f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001918919062002cce565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200196557600080fd5b505af11580156200197a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019a0919062002cce565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060245490951683529390529190912055801562001a9357602460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a3757600080fd5b505afa15801562001a4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a72919062002cce565b600380546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001aa39062002ca0565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562001ad7573d6000803e3d6000fd5b50602680546001600160a01b03929092166001600160a01b03199283168117909155602780549092161790555050565b62001b123362001e1a565b62001b315760405162461bcd60e51b815260040162000d839062002fc2565b602180546001600160a01b039485166001600160a01b031991821617909155602280549385169382169390931790925560238054919093169116179055565b62001b7b3362001e1a565b62001b9a5760405162461bcd60e51b815260040162000d839062002fc2565b60278054921515600160a01b0260ff60a01b1990931692909217909155602855565b6000546001600160a01b0316331462001be95760405162461bcd60e51b815260040162000d839062002fa2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001c385760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000811562001c6a575050601b5490565b505060165490565b6000546001600160a01b0316331462001c9f5760405162461bcd60e51b815260040162000d839062002fa2565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b62001d163362001e1a565b62001d355760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915562001dd057602654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801562001db357600080fd5b505af115801562001dc8573d6000803e3d6000fd5b505050505050565b6026546001600160a01b038381166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162001d98565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818484111562001e5f5760405162461bcd60e51b815260040162000d83919062002f4a565b505050900390565b602954600090610100900460ff161562001e905762001e888484846200230c565b905062000f0a565b60295460ff168062001eba57506001600160a01b0384166000908152600c602052604090205460ff165b62001f085760405162461bcd60e51b815260206004820152601d60248201527f54726164696e672069732063757272656e746c792064697361626c6564000000604482015260640162000d83565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff168062001f4b5750816001600160a01b0316856001600160a01b0316145b90508015801562001f7557506001600160a01b0385166000908152600f602052604090205460ff16155b1562001ff3576008546001600160a01b0386166000908152600a602052604090205462001fa49086906200305a565b1062001ff35760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604482015260640162000d83565b8080156200200357506009548410155b15620020235762002013620023b3565b1562002023576200202362002413565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b0389166000908152600a90915291909120546200207791869062001e38565b6001600160a01b0387166000908152600a60205260408120919091556200209f87876200282c565b620020ab5784620020b8565b620020b887878762002973565b6001600160a01b0387166000908152600a6020526040902054909150620020e09082620022fe565b6001600160a01b038088166000908152600a6020908152604080832094909455918a168152600e909152205460ff1662002187576026546001600160a01b038881166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200217357600080fd5b505af192505050801562002185575060015b505b6001600160a01b0386166000908152600e602052604090205460ff166200221b576026546001600160a01b038781166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200220757600080fd5b505af192505050801562002219575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200226191815260200190565b60405180910390a35060019695505050505050565b600062000f0a8284620030ba565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155620022d6576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b80620014b157506001600160a01b03166000908152600e60205260409020805460ff19169055565b600062000f0a82846200305a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a909152918220546200235f91849062001e38565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054620023909083620022fe565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b3360009081526011602052604081205460ff16158015620023dc5750602954610100900460ff16155b8015620023f25750602754600160a01b900460ff165b801562000f9f575050602854306000908152600a6020526040902054101590565b6029805461ff001916610100179055306000908152600a6020526040812054905060006200245d60205462001771601e5462001771601f54601d54620022fe90919063ffffffff16565b90506000620024796002601d5462002c8490919063ffffffff16565b9050600062002489848362002276565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620024c657620024c6620030ea565b6001600160a01b039283166020918202929092010152600354825191169082906001908110620024fa57620024fa620030ea565b6001600160a01b03928316602091820292909201015260245460405163791ac94760e01b81524792919091169063791ac947906200254690869060009087903090429060040162002fe7565b600060405180830381600087803b1580156200256157600080fd5b505af115801562002576573d6000803e3d6000fd5b5050505060006200259182476200227690919063ffffffff16565b90506000620025be6002620025b789620025b7601d548762002c9290919063ffffffff16565b9062002c84565b90506000620025de88620025b7601e548662002c9290919063ffffffff16565b90506000620025fe89620025b7601f548762002c9290919063ffffffff16565b905060006200261e8a620025b76020548862002c9290919063ffffffff16565b6000601d819055601f819055601e81905560205590508215620026a157602660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200268c57600080fd5b505af1935050505080156200269f575060015b505b8115620026e5576022546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015620026e3573d6000803e3d6000fd5b505b801562002729576023546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562002727573d6000803e3d6000fd5b505b881562002814576024805460215460405163f305d71960e01b81523060048201529283018c905260006044840181905260648401526001600160a01b0390811660848401524260a4840152169063f305d71990869060c4016060604051808303818588803b1580156200279b57600080fd5b505af1158015620027b0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620027d7919062002ebb565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506029805461ff0019169055505050505050505050565b60105460009060ff161562002886576001600160a01b0383166000908152600d602052604090205460ff161580156200287e57506001600160a01b0382166000908152600d602052604090205460ff16155b905062000e13565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff1680620028c95750816001600160a01b0316856001600160a01b0316145b6001600160a01b0385166000908152601160205260408120549192509060ff1680620029065750826001600160a01b0316856001600160a01b0316145b90508180620029125750805b1562002966576001600160a01b0386166000908152600d602052604090205460ff161580156200295b57506001600160a01b0385166000908152600d602052604090205460ff16155b935050505062000e13565b6000935050505062000e13565b6024546001600160a01b0383811660009081526011602052604081205490929190911690829060ff1680620029b95750816001600160a01b0316856001600160a01b0316145b90506000620029c88262001c59565b90506000620029e8601c54620025b7848962002c9290919063ffffffff16565b9050811562002bf657821562002afa576017541562002a3757816017548262002a12919062003098565b62002a1e919062003075565b601d600082825462002a3191906200305a565b90915550505b6019541562002a7657816019548262002a51919062003098565b62002a5d919062003075565b601f600082825462002a7091906200305a565b90915550505b6018541562002ab557816018548262002a90919062003098565b62002a9c919062003075565b601e600082825462002aaf91906200305a565b90915550505b601a541562002af45781601a548262002acf919062003098565b62002adb919062003075565b6020600082825462002aee91906200305a565b90915550505b62002bf6565b6012541562002b3957816012548262002b14919062003098565b62002b20919062003075565b601d600082825462002b3391906200305a565b90915550505b6014541562002b7857816014548262002b53919062003098565b62002b5f919062003075565b601f600082825462002b7291906200305a565b90915550505b6013541562002bb757816013548262002b92919062003098565b62002b9e919062003075565b601e600082825462002bb191906200305a565b90915550505b6015541562002bf657816015548262002bd1919062003098565b62002bdd919062003075565b6020600082825462002bf091906200305a565b90915550505b306000908152600a602052604090205462002c129082620022fe565b306000818152600a6020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002c649085815260200190565b60405180910390a362002c78868262002276565b98975050505050505050565b600062000f0a828462003075565b600062000f0a828462003098565b611f70806200312983390190565b60006020828403121562002cc157600080fd5b813562000f0a8162003100565b60006020828403121562002ce157600080fd5b815162000f0a8162003100565b6000806040838503121562002d0257600080fd5b823562002d0f8162003100565b9150602083013562002d218162003100565b809150509250929050565b60008060006060848603121562002d4257600080fd5b833562002d4f8162003100565b9250602084013562002d618162003100565b9150604084013562002d738162003100565b809150509250925092565b60008060006060848603121562002d9457600080fd5b833562002da18162003100565b9250602084013562002db38162003100565b929592945050506040919091013590565b6000806040838503121562002dd857600080fd5b823562002de58162003100565b9150602083013562002d218162003119565b6000806040838503121562002e0b57600080fd5b823562002e188162003100565b946020939093013593505050565b60006020828403121562002e3957600080fd5b813562000f0a8162003119565b60006020828403121562002e5957600080fd5b815162000f0a8162003119565b6000806040838503121562002e7a57600080fd5b823562002e188162003119565b60006020828403121562002e9a57600080fd5b5035919050565b60006020828403121562002eb457600080fd5b5051919050565b60008060006060848603121562002ed157600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002f0a57600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b600060208083528351808285015260005b8181101562002f795785810183015185820160400152820162002f5b565b8181111562002f8c576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015620030395784516001600160a01b03168352938301939183019160010162003012565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115620030705762003070620030d4565b500190565b6000826200309357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620030b557620030b5620030d4565b500290565b600082821015620030cf57620030cf620030d4565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146200311657600080fd5b50565b80151581146200311657600080fdfe60806040526003805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556004805490911690911790556ec097ce7bc90715b34b9f10000000006015553480156200005a57600080fd5b5060405162001f7038038062001f708339810160408190526200007d91620001de565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000d857737a250d5630b4cf539739df2c5dacb4c659f2488d620000da565b815b600580546001600160a01b039283166001600160a01b03199182161790915560028054909116331790556004805482166000908152600e602052604090819020805460ff19166001179055600354905163095ea7b360e01b815292169163095ea7b3916200016291869160001991016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156200017d57600080fd5b505af115801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000216565b50505062000241565b80516001600160a01b0381168114620001d957600080fd5b919050565b60008060408385031215620001f257600080fd5b620001fd83620001c1565b91506200020d60208401620001c1565b90509250929050565b6000602082840312156200022957600080fd5b815180151581146200023a57600080fd5b9392505050565b611d1f80620002516000396000f3fe60806040526004361061024a5760003560e01c806387f681d811610139578063ca89b899116100b6578063e2d2e2191161007a578063e2d2e2191461083e578063efca2eed14610854578063f0b37c041461086a578063f2fde38b1461088a578063f854a27f146108aa578063fe9fbb80146108da57600080fd5b8063ca89b89914610762578063ce7c2ac21461078f578063d0e30db0146107e6578063d63a8e11146107ee578063e0f8e2431461081e57600080fd5b8063ad5c4648116100fd578063ad5c4648146106a9578063b6a5d7de146106c9578063bcd259a8146106e9578063c161357a14610709578063c238efd51461072957600080fd5b806387f681d8146105cf5780638e424175146105ef578063929925db14610638578063997664d714610673578063a995bb141461068957600080fd5b80632f54bf6e116101c757806363eabae91161018b57806363eabae9146105075780637088fb7f1461055a5780638366e79a1461056f57806383e845001461058f578063845610ee146105af57600080fd5b80632f54bf6e146104395780633333cfc3146104785780633a98ef39146104985780635881f3ef146104ae578063610035a4146104ce57600080fd5b806315f7e05e1161020e57806315f7e05e1461035d5780631b386a421461037d5780632870e95d146103c357806328fd3198146103e35780632bcf161c1461040357600080fd5b806302c4aede146102565780630300f925146102a9578063061ad62a146102ef57806311ce023d1461032557806314b6ca961461033b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061028c610271366004611a63565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b506102e16102c4366004611a80565b600a60209081526000928352604080842090915290825290205481565b6040519081526020016102a0565b3480156102fb57600080fd5b5061028c61030a366004611a63565b600f602052600090815260409020546001600160a01b031681565b34801561033157600080fd5b506102e160155481565b34801561034757600080fd5b5061035b610356366004611b28565b610913565b005b34801561036957600080fd5b5061035b610378366004611a63565b610af4565b34801561038957600080fd5b506102e1610398366004611a80565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156103cf57600080fd5b5061035b6103de366004611a63565b610b01565b3480156103ef57600080fd5b506102e16103fe366004611a63565b610b55565b34801561040f57600080fd5b506102e161041e366004611a63565b6001600160a01b031660009081526009602052604090205490565b34801561044557600080fd5b50610468610454366004611a63565b6000546001600160a01b0391821691161490565b60405190151581526020016102a0565b34801561048457600080fd5b5061035b610493366004611afa565b610bde565b3480156104a457600080fd5b506102e160115481565b3480156104ba57600080fd5b5061035b6104c9366004611a63565b610c3c565b3480156104da57600080fd5b506104686104e9366004611a63565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561051357600080fd5b5061035b610522366004611afa565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b34801561056657600080fd5b5061035b610c88565b34801561057b57600080fd5b5061046861058a366004611a80565b610ce5565b34801561059b57600080fd5b5061035b6105aa366004611a80565b610e69565b3480156105bb57600080fd5b5061035b6105ca366004611a63565b610ec1565b3480156105db57600080fd5b5061035b6105ea366004611a63565b610f0d565b3480156105fb57600080fd5b5061046861060a366004611a80565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b50610468610653366004611a80565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561067f57600080fd5b506102e160125481565b34801561069557600080fd5b5061035b6106a4366004611a80565b610f60565b3480156106b557600080fd5b5060045461028c906001600160a01b031681565b3480156106d557600080fd5b5061035b6106e4366004611a63565b611012565b3480156106f557600080fd5b5061035b610704366004611a80565b611063565b34801561071557600080fd5b5061035b610724366004611ab9565b6110d4565b34801561073557600080fd5b5061028c610744366004611a63565b6001600160a01b039081166000908152600d60205260409020541690565b34801561076e57600080fd5b506102e161077d366004611a63565b60096020526000908152604090205481565b34801561079b57600080fd5b506107cb6107aa366004611a63565b60106020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102a0565b61035b611186565b3480156107fa57600080fd5b50610468610809366004611a63565b600e6020526000908152604090205460ff1681565b34801561082a57600080fd5b5061035b610839366004611a63565b6111dc565b34801561084a57600080fd5b506102e160145481565b34801561086057600080fd5b506102e160135481565b34801561087657600080fd5b5061035b610885366004611a63565b611228565b34801561089657600080fd5b5061035b6108a5366004611a63565b611273565b3480156108b657600080fd5b506104686108c5366004611a63565b600c6020526000908152604090205460ff1681565b3480156108e657600080fd5b506104686108f5366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b6002546001600160a01b0316331461092a57600080fd5b6001600160a01b038216600090815260106020526040902054156109ba576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156109a3576001600160a01b038083166000908152600f602052604090205461099e91849116611309565b6109ba565b6004546109ba9083906001600160a01b0316611309565b6000811180156109e057506001600160a01b038216600090815260106020526040902054155b15610a4657600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055610a79565b80158015610a6b57506001600160a01b03821660009081526010602052604090205415155b15610a7957610a79826118f4565b6001600160a01b038216600090815260106020526040902054601154610aaa918391610aa491611a09565b90611a1c565b6011556001600160a01b0382166000908152601060205260409020819055610ad181611a28565b6001600160a01b0390921660009081526010602052604090206001019190915550565b610afe3382611309565b50565b6001600160a01b0381166000908152600e602052604090205460ff16610b2657600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610b7a57506000919050565b6001600160a01b038216600090815260106020526040812054610b9c90611a28565b6001600160a01b038416600090815260106020526040902060010154909150808211610bcc575060009392505050565b610bd68282611a09565b949350505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890611bf4565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c0890611bf4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610c0890611bf4565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314610d105760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b038316301415610d695760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c08565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de39190611b71565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611b54565b6000546001600160a01b03163314610e935760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610c0890611bf4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190611b54565b505050565b6000546001600160a01b0316331461103c5760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff166110ca5760405162461bcd60e51b8152602060048201526011602482015270165bdd4818d85b89dd08191bc81d1a185d607a1b6044820152606401610c08565b610ce18282611309565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b390604401602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611b54565b50505050565b6002546001600160a01b0316331461119d57600080fd5b60125434906111ac9082611a1c565b6012556011546015546111d6916111cd916111c79085611a4b565b90611a57565b60145490611a1c565b60145550565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610c0890611bf4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610c0890611bf4565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b0381166000908152600e602052604090205460ff166113715760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265776172642061646472657373210000000000000000006044820152606401610c08565b6001600160a01b038216600090815260106020526040902054611392575050565b600061139d83610b55565b9050801561100d576013546113b29082611a1c565b6013556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546113e89082611a1c565b6001600160a01b038416600090815260106020526040902060028101919091555461141290611a28565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611501576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611476573d6000803e3d6000fd5b506001600160a01b03821660009081526009602052604090205461149a9082611a1c565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546114d69082611a1c565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055505050565b6040516370a0823160e01b81526001600160a01b03848116600483015283916000918316906370a082319060240160206040518083038186803b15801561154757600080fd5b505afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190611b71565b6001600160a01b038581166000908152600d60205260409020549192501661169457604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906115e2576115e2611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061161657611616611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061165c9060009086908c904290600401611b8a565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050506117c9565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b0316918391506000906116d7576116d7611cb0565b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061171b5761171b611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061174f5761174f611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906117959060009086908c904290600401611b8a565b6000604051808303818588803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561180e57600080fd5b505afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190611b71565b90506118746118558284611a09565b6001600160a01b03871660009081526009602052604090205490611a1c565b6001600160a01b0386166000908152600960205260409020556118c661189a8284611a09565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611a1c565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b6006805461190490600190611c6d565b8154811061191457611914611cb0565b60009182526020808320909101546001600160a01b038481168452600790925260409092205460068054929093169291811061195257611952611cb0565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526007918290526040812054600680549193929161199e90600190611c6d565b815481106119ae576119ae611cb0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560068054806119e4576119e4611c9a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611a158284611c6d565b9392505050565b6000611a158284611c14565b6000611a456015546111c760145485611a4b90919063ffffffff16565b92915050565b6000611a158284611c4e565b6000611a158284611c2c565b600060208284031215611a7557600080fd5b8135611a1581611cc6565b60008060408385031215611a9357600080fd5b8235611a9e81611cc6565b91506020830135611aae81611cc6565b809150509250929050565b600080600060608486031215611ace57600080fd5b8335611ad981611cc6565b92506020840135611ae981611cc6565b929592945050506040919091013590565b60008060408385031215611b0d57600080fd5b8235611b1881611cc6565b91506020830135611aae81611cdb565b60008060408385031215611b3b57600080fd5b8235611b4681611cc6565b946020939093013593505050565b600060208284031215611b6657600080fd5b8151611a1581611cdb565b600060208284031215611b8357600080fd5b5051919050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611bd45784516001600160a01b031683529383019391830191600101611baf565b50506001600160a01b039690961660408501525050506060015292915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60008219821115611c2757611c27611c84565b500190565b600082611c4957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c6857611c68611c84565b500290565b600082821015611c7f57611c7f611c84565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610afe57600080fd5b8015158114610afe57600080fdfea2646970667358221220a1c44a72f026b038d04989d822bceac7fd6ed1159979c6bbb017cd888f4c380864736f6c63430008070033a26469706673582212206a8489a53330ac60d0ed8a994d9bdccba787d65b7e260563626934aa55bee6a464736f6c6343000807003360806040526003805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556004805490911690911790556ec097ce7bc90715b34b9f10000000006015553480156200005a57600080fd5b5060405162001f7038038062001f708339810160408190526200007d91620001de565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000d857737a250d5630b4cf539739df2c5dacb4c659f2488d620000da565b815b600580546001600160a01b039283166001600160a01b03199182161790915560028054909116331790556004805482166000908152600e602052604090819020805460ff19166001179055600354905163095ea7b360e01b815292169163095ea7b3916200016291869160001991016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156200017d57600080fd5b505af115801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000216565b50505062000241565b80516001600160a01b0381168114620001d957600080fd5b919050565b60008060408385031215620001f257600080fd5b620001fd83620001c1565b91506200020d60208401620001c1565b90509250929050565b6000602082840312156200022957600080fd5b815180151581146200023a57600080fd5b9392505050565b611d1f80620002516000396000f3fe60806040526004361061024a5760003560e01c806387f681d811610139578063ca89b899116100b6578063e2d2e2191161007a578063e2d2e2191461083e578063efca2eed14610854578063f0b37c041461086a578063f2fde38b1461088a578063f854a27f146108aa578063fe9fbb80146108da57600080fd5b8063ca89b89914610762578063ce7c2ac21461078f578063d0e30db0146107e6578063d63a8e11146107ee578063e0f8e2431461081e57600080fd5b8063ad5c4648116100fd578063ad5c4648146106a9578063b6a5d7de146106c9578063bcd259a8146106e9578063c161357a14610709578063c238efd51461072957600080fd5b806387f681d8146105cf5780638e424175146105ef578063929925db14610638578063997664d714610673578063a995bb141461068957600080fd5b80632f54bf6e116101c757806363eabae91161018b57806363eabae9146105075780637088fb7f1461055a5780638366e79a1461056f57806383e845001461058f578063845610ee146105af57600080fd5b80632f54bf6e146104395780633333cfc3146104785780633a98ef39146104985780635881f3ef146104ae578063610035a4146104ce57600080fd5b806315f7e05e1161020e57806315f7e05e1461035d5780631b386a421461037d5780632870e95d146103c357806328fd3198146103e35780632bcf161c1461040357600080fd5b806302c4aede146102565780630300f925146102a9578063061ad62a146102ef57806311ce023d1461032557806314b6ca961461033b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061028c610271366004611a63565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b506102e16102c4366004611a80565b600a60209081526000928352604080842090915290825290205481565b6040519081526020016102a0565b3480156102fb57600080fd5b5061028c61030a366004611a63565b600f602052600090815260409020546001600160a01b031681565b34801561033157600080fd5b506102e160155481565b34801561034757600080fd5b5061035b610356366004611b28565b610913565b005b34801561036957600080fd5b5061035b610378366004611a63565b610af4565b34801561038957600080fd5b506102e1610398366004611a80565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156103cf57600080fd5b5061035b6103de366004611a63565b610b01565b3480156103ef57600080fd5b506102e16103fe366004611a63565b610b55565b34801561040f57600080fd5b506102e161041e366004611a63565b6001600160a01b031660009081526009602052604090205490565b34801561044557600080fd5b50610468610454366004611a63565b6000546001600160a01b0391821691161490565b60405190151581526020016102a0565b34801561048457600080fd5b5061035b610493366004611afa565b610bde565b3480156104a457600080fd5b506102e160115481565b3480156104ba57600080fd5b5061035b6104c9366004611a63565b610c3c565b3480156104da57600080fd5b506104686104e9366004611a63565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561051357600080fd5b5061035b610522366004611afa565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b34801561056657600080fd5b5061035b610c88565b34801561057b57600080fd5b5061046861058a366004611a80565b610ce5565b34801561059b57600080fd5b5061035b6105aa366004611a80565b610e69565b3480156105bb57600080fd5b5061035b6105ca366004611a63565b610ec1565b3480156105db57600080fd5b5061035b6105ea366004611a63565b610f0d565b3480156105fb57600080fd5b5061046861060a366004611a80565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b50610468610653366004611a80565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561067f57600080fd5b506102e160125481565b34801561069557600080fd5b5061035b6106a4366004611a80565b610f60565b3480156106b557600080fd5b5060045461028c906001600160a01b031681565b3480156106d557600080fd5b5061035b6106e4366004611a63565b611012565b3480156106f557600080fd5b5061035b610704366004611a80565b611063565b34801561071557600080fd5b5061035b610724366004611ab9565b6110d4565b34801561073557600080fd5b5061028c610744366004611a63565b6001600160a01b039081166000908152600d60205260409020541690565b34801561076e57600080fd5b506102e161077d366004611a63565b60096020526000908152604090205481565b34801561079b57600080fd5b506107cb6107aa366004611a63565b60106020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102a0565b61035b611186565b3480156107fa57600080fd5b50610468610809366004611a63565b600e6020526000908152604090205460ff1681565b34801561082a57600080fd5b5061035b610839366004611a63565b6111dc565b34801561084a57600080fd5b506102e160145481565b34801561086057600080fd5b506102e160135481565b34801561087657600080fd5b5061035b610885366004611a63565b611228565b34801561089657600080fd5b5061035b6108a5366004611a63565b611273565b3480156108b657600080fd5b506104686108c5366004611a63565b600c6020526000908152604090205460ff1681565b3480156108e657600080fd5b506104686108f5366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b6002546001600160a01b0316331461092a57600080fd5b6001600160a01b038216600090815260106020526040902054156109ba576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156109a3576001600160a01b038083166000908152600f602052604090205461099e91849116611309565b6109ba565b6004546109ba9083906001600160a01b0316611309565b6000811180156109e057506001600160a01b038216600090815260106020526040902054155b15610a4657600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055610a79565b80158015610a6b57506001600160a01b03821660009081526010602052604090205415155b15610a7957610a79826118f4565b6001600160a01b038216600090815260106020526040902054601154610aaa918391610aa491611a09565b90611a1c565b6011556001600160a01b0382166000908152601060205260409020819055610ad181611a28565b6001600160a01b0390921660009081526010602052604090206001019190915550565b610afe3382611309565b50565b6001600160a01b0381166000908152600e602052604090205460ff16610b2657600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610b7a57506000919050565b6001600160a01b038216600090815260106020526040812054610b9c90611a28565b6001600160a01b038416600090815260106020526040902060010154909150808211610bcc575060009392505050565b610bd68282611a09565b949350505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890611bf4565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c0890611bf4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610c0890611bf4565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314610d105760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b038316301415610d695760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c08565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de39190611b71565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611b54565b6000546001600160a01b03163314610e935760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610c0890611bf4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190611b54565b505050565b6000546001600160a01b0316331461103c5760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff166110ca5760405162461bcd60e51b8152602060048201526011602482015270165bdd4818d85b89dd08191bc81d1a185d607a1b6044820152606401610c08565b610ce18282611309565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b390604401602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611b54565b50505050565b6002546001600160a01b0316331461119d57600080fd5b60125434906111ac9082611a1c565b6012556011546015546111d6916111cd916111c79085611a4b565b90611a57565b60145490611a1c565b60145550565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610c0890611bf4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610c0890611bf4565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b0381166000908152600e602052604090205460ff166113715760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265776172642061646472657373210000000000000000006044820152606401610c08565b6001600160a01b038216600090815260106020526040902054611392575050565b600061139d83610b55565b9050801561100d576013546113b29082611a1c565b6013556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546113e89082611a1c565b6001600160a01b038416600090815260106020526040902060028101919091555461141290611a28565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611501576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611476573d6000803e3d6000fd5b506001600160a01b03821660009081526009602052604090205461149a9082611a1c565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546114d69082611a1c565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055505050565b6040516370a0823160e01b81526001600160a01b03848116600483015283916000918316906370a082319060240160206040518083038186803b15801561154757600080fd5b505afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190611b71565b6001600160a01b038581166000908152600d60205260409020549192501661169457604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906115e2576115e2611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061161657611616611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061165c9060009086908c904290600401611b8a565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050506117c9565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b0316918391506000906116d7576116d7611cb0565b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061171b5761171b611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061174f5761174f611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906117959060009086908c904290600401611b8a565b6000604051808303818588803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561180e57600080fd5b505afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190611b71565b90506118746118558284611a09565b6001600160a01b03871660009081526009602052604090205490611a1c565b6001600160a01b0386166000908152600960205260409020556118c661189a8284611a09565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611a1c565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b6006805461190490600190611c6d565b8154811061191457611914611cb0565b60009182526020808320909101546001600160a01b038481168452600790925260409092205460068054929093169291811061195257611952611cb0565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526007918290526040812054600680549193929161199e90600190611c6d565b815481106119ae576119ae611cb0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560068054806119e4576119e4611c9a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611a158284611c6d565b9392505050565b6000611a158284611c14565b6000611a456015546111c760145485611a4b90919063ffffffff16565b92915050565b6000611a158284611c4e565b6000611a158284611c2c565b600060208284031215611a7557600080fd5b8135611a1581611cc6565b60008060408385031215611a9357600080fd5b8235611a9e81611cc6565b91506020830135611aae81611cc6565b809150509250929050565b600080600060608486031215611ace57600080fd5b8335611ad981611cc6565b92506020840135611ae981611cc6565b929592945050506040919091013590565b60008060408385031215611b0d57600080fd5b8235611b1881611cc6565b91506020830135611aae81611cdb565b60008060408385031215611b3b57600080fd5b8235611b4681611cc6565b946020939093013593505050565b600060208284031215611b6657600080fd5b8151611a1581611cdb565b600060208284031215611b8357600080fd5b5051919050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611bd45784516001600160a01b031683529383019391830191600101611baf565b50506001600160a01b039690961660408501525050506060015292915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60008219821115611c2757611c27611c84565b500190565b600082611c4957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c6857611c68611c84565b500290565b600082821015611c7f57611c7f611c84565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610afe57600080fd5b8015158114610afe57600080fdfea2646970667358221220a1c44a72f026b038d04989d822bceac7fd6ed1159979c6bbb017cd888f4c380864736f6c63430008070033

Deployed Bytecode

0x608060405260043610620003e75760003560e01c8063845610ee1162000203578063b62496f51162000117578063e0f8e24311620000ad578063f2fde38b1162000078578063f2fde38b1462000cc4578063f708a64f1462000ce9578063f887ea401462000d0e578063fe9fbb801462000d3057600080fd5b8063e0f8e2431462000c2f578063e91f214e1462000c54578063f0b37c041462000c7a578063f1f3bca31462000c9f57600080fd5b8063cd806f4311620000ee578063cd806f431462000b76578063d7c010321462000b9b578063dd62ed3e1462000bc0578063df20fd491462000c0a57600080fd5b8063b62496f51462000afb578063b6a5d7de1462000b2f578063ca33e64c1462000b5457600080fd5b80639a7a23d61162000199578063a9059cbb1162000164578063a9059cbb1462000a6a578063ad5c46481462000a8f578063add5df661462000ab1578063af06795a1462000ad657600080fd5b80639a7a23d614620009e95780639d64bf931462000a0e578063a51af4c51462000a26578063a8aa1b311462000a4857600080fd5b80638a8c523c11620001da5780638a8c523c146200095357806391950f30146200096b5780639571a07d146200098757806395d89b4114620009bb57600080fd5b8063845610ee14620008e9578063893d20e8146200090e57806389ef69f6146200092e57600080fd5b806338e9914411620002fb57806360733e8f11620002915780637088fb7f116200025c5780637088fb7f146200085a57806370a08231146200087257806382247ec014620008ac5780638366e79a14620008c457600080fd5b806360733e8f1462000798578063658d4b7f14620007d55780636d92e1a514620007fa5780636ddd1713146200083757600080fd5b80634ada218b11620002d25780634ada218b146200070d578063571ac8b014620007295780635881f3ef146200074e5780635d0044ca146200077357600080fd5b806338e9914414620006685780633f4218e014620006a55780634355855a14620006d957600080fd5b806326560be7116200037d5780632f54bf6e11620003485780632f54bf6e14620005cd578063313ce56714620006005780633425c001146200061e578063379fad9a146200064357600080fd5b806326560be7146200053a578063296020e7146200055f5780632af10fac14620005935780632b112e4914620005b557600080fd5b8063095ea7b311620003be578063095ea7b314620004a857806315d61a8214620004cd57806318160ddd14620004f457806323b872dd146200051557600080fd5b806303382cbb14620003f457806306fdde03146200043357806307c89fe8146200047257600080fd5b36620003ef57005b600080fd5b3480156200040157600080fd5b5060225462000416906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200044057600080fd5b5060408051808201909152600a81526959656c6c6f7720426f6960b01b60208201525b6040516200042a919062002f4a565b3480156200047f57600080fd5b50620004976200049136600462002cae565b62000d55565b60405190151581526020016200042a565b348015620004b557600080fd5b5062000497620004c736600462002df7565b62000dab565b348015620004da57600080fd5b50620004f2620004ec36600462002e87565b62000e19565b005b3480156200050157600080fd5b506007545b6040519081526020016200042a565b3480156200052257600080fd5b50620004976200053436600462002d7e565b62000e48565b3480156200054757600080fd5b50620004f26200055936600462002e26565b62000f11565b3480156200056c57600080fd5b50620004976200057e36600462002cae565b600f6020526000908152604090205460ff1681565b348015620005a057600080fd5b5060235462000416906001600160a01b031681565b348015620005c257600080fd5b506200050662000f4e565b348015620005da57600080fd5b5062000497620005ec36600462002cae565b6000546001600160a01b0391821691161490565b3480156200060d57600080fd5b50604051600981526020016200042a565b3480156200062b57600080fd5b50620004f26200063d36600462002cae565b62000fa4565b3480156200065057600080fd5b50620004f26200066236600462002e26565b62000ff2565b3480156200067557600080fd5b50620004976200068736600462002cae565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015620006b257600080fd5b5062000497620006c436600462002cae565b600d6020526000908152604090205460ff1681565b348015620006e657600080fd5b5062000497620006f836600462002cae565b600e6020526000908152604090205460ff1681565b3480156200071a57600080fd5b50602954620004979060ff1681565b3480156200073657600080fd5b50620004976200074836600462002cae565b6200102f565b3480156200075b57600080fd5b50620004166200076d36600462002cae565b6200103f565b3480156200078057600080fd5b50620004f26200079236600462002e87565b620013d0565b348015620007a557600080fd5b5062000497620007b736600462002cae565b6001600160a01b03166000908152600d602052604090205460ff1690565b348015620007e257600080fd5b50620004f2620007f436600462002dc4565b620013ff565b3480156200080757600080fd5b50620004976200081936600462002cae565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156200084457600080fd5b506027546200049790600160a01b900460ff1681565b3480156200086757600080fd5b50620004f262001454565b3480156200087f57600080fd5b50620005066200089136600462002cae565b6001600160a01b03166000908152600a602052604090205490565b348015620008b957600080fd5b506200050660085481565b348015620008d157600080fd5b5062000497620008e336600462002cee565b620014b5565b348015620008f657600080fd5b50620004f26200090836600462002cae565b620015f3565b3480156200091b57600080fd5b506000546001600160a01b031662000416565b3480156200093b57600080fd5b50620004f26200094d36600462002cae565b62001642565b3480156200096057600080fd5b50620004f262001693565b3480156200097857600080fd5b50601054620004979060ff1681565b3480156200099457600080fd5b5062000497620009a636600462002cae565b600c6020526000908152604090205460ff1681565b348015620009c857600080fd5b50604080518082019091526003815262424f4960e81b602082015262000463565b348015620009f657600080fd5b50620004f262000a0836600462002dc4565b620016d8565b34801562000a1b57600080fd5b506200050660095481565b34801562000a3357600080fd5b5060275462000416906001600160a01b031681565b34801562000a5557600080fd5b5060255462000416906001600160a01b031681565b34801562000a7757600080fd5b506200049762000a8936600462002df7565b62001711565b34801562000a9c57600080fd5b5060035462000416906001600160a01b031681565b34801562000abe57600080fd5b50620004f262000ad036600462002eea565b62001720565b34801562000ae357600080fd5b50620004f262000af536600462002dc4565b620017b2565b34801562000b0857600080fd5b506200049762000b1a36600462002cae565b60116020526000908152604090205460ff1681565b34801562000b3c57600080fd5b50620004f262000b4e36600462002cae565b62001807565b34801562000b6157600080fd5b5060215462000416906001600160a01b031681565b34801562000b8357600080fd5b50620004f262000b9536600462002dc4565b6200185b565b34801562000ba857600080fd5b50620004f262000bba36600462002d2c565b62001b07565b34801562000bcd57600080fd5b506200050662000bdf36600462002cee565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801562000c1757600080fd5b50620004f262000c2936600462002e66565b62001b70565b34801562000c3c57600080fd5b50620004f262000c4e36600462002cae565b62001bbc565b34801562000c6157600080fd5b50620005066fffffffffffffffffffffffffffffffff81565b34801562000c8757600080fd5b50620004f262000c9936600462002cae565b62001c0b565b34801562000cac57600080fd5b506200050662000cbe36600462002e26565b62001c59565b34801562000cd157600080fd5b50620004f262000ce336600462002cae565b62001c72565b34801562000cf657600080fd5b50620004f262000d0836600462002dc4565b62001d0b565b34801562000d1b57600080fd5b5060245462000416906001600160a01b031681565b34801562000d3d57600080fd5b506200049762000d4f36600462002cae565b62001e1a565b600080546001600160a01b0316331462000d8c5760405162461bcd60e51b815260040162000d839062002fa2565b60405180910390fd5b506001600160a01b03166000908152600f602052604090205460ff1690565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000e079086815260200190565b60405180910390a35060015b92915050565b62000e243362001e1a565b62000e435760405162461bcd60e51b815260040162000d839062002fc2565b600955565b6007546001600160a01b0384166000908152600b6020908152604080832033845290915281205490911462000efa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b8252838120338252909152919091205462000ed591849062001e38565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b62000f0784848462001e67565b90505b9392505050565b62000f1c3362001e1a565b62000f3b5760405162461bcd60e51b815260040162000d839062002fc2565b6029805460ff1916911515919091179055565b6005546001600160a01b03166000908152600a602052604081205462000f9f906004546001600160a01b03166000908152600a602052604090205462000f98906007549062002276565b9062002276565b905090565b6000546001600160a01b0316331462000fd15760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b62000ffd3362001e1a565b6200101c5760405162461bcd60e51b815260040162000d839062002fc2565b6010805460ff1916911515919091179055565b600062000e138260075462000dab565b600080546001600160a01b031633146200106d5760405162461bcd60e51b815260040162000d839062002fa2565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620010ac57600080fd5b505afa158015620010c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e7919062002cce565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200113057600080fd5b505afa15801562001145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200116b919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015620011b257600080fd5b505afa158015620011c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ed919062002cce565b91506001600160a01b0382166200137e57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123857600080fd5b505afa1580156200124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001273919062002cce565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620012bc57600080fd5b505afa158015620012d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f7919062002cce565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200134057600080fd5b505af115801562001355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200137b919062002cce565b91505b602580546001600160a01b038085166001600160a01b0319928316179092556024805493909216921682179055600754306000908152600b602090815260408083209483529390529190912055919050565b620013db3362001e1a565b620013fa5760405162461bcd60e51b815260040162000d839062002fc2565b600855565b6200140a3362001e1a565b620014295760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620014815760405162461bcd60e51b815260040162000d839062002fa2565b6040514790339082156108fc029083906000818181858888f19350505050158015620014b1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314620014e35760405162461bcd60e51b815260040162000d839062002fa2565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156200152657600080fd5b505afa1580156200153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001561919062002ea1565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015620015b057600080fd5b505af1158015620015c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015eb919062002e46565b949350505050565b6000546001600160a01b03163314620016205760405162461bcd60e51b815260040162000d839062002fa2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200166f5760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6200169e3362001e1a565b620016bd5760405162461bcd60e51b815260040162000d839062002fc2565b60295460ff16620016d6576029805460ff191660011790555b565b6000546001600160a01b03163314620017055760405162461bcd60e51b815260040162000d839062002fa2565b620014b1828262002284565b600062000f0a33848462001e67565b6200172b3362001e1a565b6200174a5760405162461bcd60e51b815260040162000d839062002fc2565b601289905560138890556014879055601586905562001778866200177189818d8d620022fe565b90620022fe565b601655601785905560188490556019839055601a829055620017a2826200177185818989620022fe565b601b55601c555050505050505050565b620017bd3362001e1a565b620017dc5760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620018345760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314620018885760405162461bcd60e51b815260040162000d839062002fa2565b602480546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620018dd57600080fd5b505afa158015620018f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001918919062002cce565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200196557600080fd5b505af11580156200197a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019a0919062002cce565b602580546001600160a01b0319166001600160a01b03928316179055600754306000908152600b6020908152604080832060245490951683529390529190912055801562001a9357602460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a3757600080fd5b505afa15801562001a4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a72919062002cce565b600380546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001aa39062002ca0565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562001ad7573d6000803e3d6000fd5b50602680546001600160a01b03929092166001600160a01b03199283168117909155602780549092161790555050565b62001b123362001e1a565b62001b315760405162461bcd60e51b815260040162000d839062002fc2565b602180546001600160a01b039485166001600160a01b031991821617909155602280549385169382169390931790925560238054919093169116179055565b62001b7b3362001e1a565b62001b9a5760405162461bcd60e51b815260040162000d839062002fc2565b60278054921515600160a01b0260ff60a01b1990931692909217909155602855565b6000546001600160a01b0316331462001be95760405162461bcd60e51b815260040162000d839062002fa2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001c385760405162461bcd60e51b815260040162000d839062002fa2565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000811562001c6a575050601b5490565b505060165490565b6000546001600160a01b0316331462001c9f5760405162461bcd60e51b815260040162000d839062002fa2565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b62001d163362001e1a565b62001d355760405162461bcd60e51b815260040162000d839062002fc2565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915562001dd057602654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801562001db357600080fd5b505af115801562001dc8573d6000803e3d6000fd5b505050505050565b6026546001600160a01b038381166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162001d98565b6001600160a01b031660009081526001602052604090205460ff1690565b6000818484111562001e5f5760405162461bcd60e51b815260040162000d83919062002f4a565b505050900390565b602954600090610100900460ff161562001e905762001e888484846200230c565b905062000f0a565b60295460ff168062001eba57506001600160a01b0384166000908152600c602052604090205460ff165b62001f085760405162461bcd60e51b815260206004820152601d60248201527f54726164696e672069732063757272656e746c792064697361626c6564000000604482015260640162000d83565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff168062001f4b5750816001600160a01b0316856001600160a01b0316145b90508015801562001f7557506001600160a01b0385166000908152600f602052604090205460ff16155b1562001ff3576008546001600160a01b0386166000908152600a602052604090205462001fa49086906200305a565b1062001ff35760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604482015260640162000d83565b8080156200200357506009548410155b15620020235762002013620023b3565b1562002023576200202362002413565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b0389166000908152600a90915291909120546200207791869062001e38565b6001600160a01b0387166000908152600a60205260408120919091556200209f87876200282c565b620020ab5784620020b8565b620020b887878762002973565b6001600160a01b0387166000908152600a6020526040902054909150620020e09082620022fe565b6001600160a01b038088166000908152600a6020908152604080832094909455918a168152600e909152205460ff1662002187576026546001600160a01b038881166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200217357600080fd5b505af192505050801562002185575060015b505b6001600160a01b0386166000908152600e602052604090205460ff166200221b576026546001600160a01b038781166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200220757600080fd5b505af192505050801562002219575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200226191815260200190565b60405180910390a35060019695505050505050565b600062000f0a8284620030ba565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155620022d6576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b80620014b157506001600160a01b03166000908152600e60205260409020805460ff19169055565b600062000f0a82846200305a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a909152918220546200235f91849062001e38565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054620023909083620022fe565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b3360009081526011602052604081205460ff16158015620023dc5750602954610100900460ff16155b8015620023f25750602754600160a01b900460ff165b801562000f9f575050602854306000908152600a6020526040902054101590565b6029805461ff001916610100179055306000908152600a6020526040812054905060006200245d60205462001771601e5462001771601f54601d54620022fe90919063ffffffff16565b90506000620024796002601d5462002c8490919063ffffffff16565b9050600062002489848362002276565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620024c657620024c6620030ea565b6001600160a01b039283166020918202929092010152600354825191169082906001908110620024fa57620024fa620030ea565b6001600160a01b03928316602091820292909201015260245460405163791ac94760e01b81524792919091169063791ac947906200254690869060009087903090429060040162002fe7565b600060405180830381600087803b1580156200256157600080fd5b505af115801562002576573d6000803e3d6000fd5b5050505060006200259182476200227690919063ffffffff16565b90506000620025be6002620025b789620025b7601d548762002c9290919063ffffffff16565b9062002c84565b90506000620025de88620025b7601e548662002c9290919063ffffffff16565b90506000620025fe89620025b7601f548762002c9290919063ffffffff16565b905060006200261e8a620025b76020548862002c9290919063ffffffff16565b6000601d819055601f819055601e81905560205590508215620026a157602660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200268c57600080fd5b505af1935050505080156200269f575060015b505b8115620026e5576022546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015620026e3573d6000803e3d6000fd5b505b801562002729576023546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562002727573d6000803e3d6000fd5b505b881562002814576024805460215460405163f305d71960e01b81523060048201529283018c905260006044840181905260648401526001600160a01b0390811660848401524260a4840152169063f305d71990869060c4016060604051808303818588803b1580156200279b57600080fd5b505af1158015620027b0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620027d7919062002ebb565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506029805461ff0019169055505050505050505050565b60105460009060ff161562002886576001600160a01b0383166000908152600d602052604090205460ff161580156200287e57506001600160a01b0382166000908152600d602052604090205460ff16155b905062000e13565b6024546001600160a01b0384811660009081526011602052604081205491909216919060ff1680620028c95750816001600160a01b0316856001600160a01b0316145b6001600160a01b0385166000908152601160205260408120549192509060ff1680620029065750826001600160a01b0316856001600160a01b0316145b90508180620029125750805b1562002966576001600160a01b0386166000908152600d602052604090205460ff161580156200295b57506001600160a01b0385166000908152600d602052604090205460ff16155b935050505062000e13565b6000935050505062000e13565b6024546001600160a01b0383811660009081526011602052604081205490929190911690829060ff1680620029b95750816001600160a01b0316856001600160a01b0316145b90506000620029c88262001c59565b90506000620029e8601c54620025b7848962002c9290919063ffffffff16565b9050811562002bf657821562002afa576017541562002a3757816017548262002a12919062003098565b62002a1e919062003075565b601d600082825462002a3191906200305a565b90915550505b6019541562002a7657816019548262002a51919062003098565b62002a5d919062003075565b601f600082825462002a7091906200305a565b90915550505b6018541562002ab557816018548262002a90919062003098565b62002a9c919062003075565b601e600082825462002aaf91906200305a565b90915550505b601a541562002af45781601a548262002acf919062003098565b62002adb919062003075565b6020600082825462002aee91906200305a565b90915550505b62002bf6565b6012541562002b3957816012548262002b14919062003098565b62002b20919062003075565b601d600082825462002b3391906200305a565b90915550505b6014541562002b7857816014548262002b53919062003098565b62002b5f919062003075565b601f600082825462002b7291906200305a565b90915550505b6013541562002bb757816013548262002b92919062003098565b62002b9e919062003075565b601e600082825462002bb191906200305a565b90915550505b6015541562002bf657816015548262002bd1919062003098565b62002bdd919062003075565b6020600082825462002bf091906200305a565b90915550505b306000908152600a602052604090205462002c129082620022fe565b306000818152600a6020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002c649085815260200190565b60405180910390a362002c78868262002276565b98975050505050505050565b600062000f0a828462003075565b600062000f0a828462003098565b611f70806200312983390190565b60006020828403121562002cc157600080fd5b813562000f0a8162003100565b60006020828403121562002ce157600080fd5b815162000f0a8162003100565b6000806040838503121562002d0257600080fd5b823562002d0f8162003100565b9150602083013562002d218162003100565b809150509250929050565b60008060006060848603121562002d4257600080fd5b833562002d4f8162003100565b9250602084013562002d618162003100565b9150604084013562002d738162003100565b809150509250925092565b60008060006060848603121562002d9457600080fd5b833562002da18162003100565b9250602084013562002db38162003100565b929592945050506040919091013590565b6000806040838503121562002dd857600080fd5b823562002de58162003100565b9150602083013562002d218162003119565b6000806040838503121562002e0b57600080fd5b823562002e188162003100565b946020939093013593505050565b60006020828403121562002e3957600080fd5b813562000f0a8162003119565b60006020828403121562002e5957600080fd5b815162000f0a8162003119565b6000806040838503121562002e7a57600080fd5b823562002e188162003119565b60006020828403121562002e9a57600080fd5b5035919050565b60006020828403121562002eb457600080fd5b5051919050565b60008060006060848603121562002ed157600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002f0a57600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b600060208083528351808285015260005b8181101562002f795785810183015185820160400152820162002f5b565b8181111562002f8c576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015620030395784516001600160a01b03168352938301939183019160010162003012565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115620030705762003070620030d4565b500190565b6000826200309357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620030b557620030b5620030d4565b500290565b600082821015620030cf57620030cf620030d4565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146200311657600080fd5b50565b80151581146200311657600080fdfe60806040526003805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556004805490911690911790556ec097ce7bc90715b34b9f10000000006015553480156200005a57600080fd5b5060405162001f7038038062001f708339810160408190526200007d91620001de565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000d857737a250d5630b4cf539739df2c5dacb4c659f2488d620000da565b815b600580546001600160a01b039283166001600160a01b03199182161790915560028054909116331790556004805482166000908152600e602052604090819020805460ff19166001179055600354905163095ea7b360e01b815292169163095ea7b3916200016291869160001991016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156200017d57600080fd5b505af115801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000216565b50505062000241565b80516001600160a01b0381168114620001d957600080fd5b919050565b60008060408385031215620001f257600080fd5b620001fd83620001c1565b91506200020d60208401620001c1565b90509250929050565b6000602082840312156200022957600080fd5b815180151581146200023a57600080fd5b9392505050565b611d1f80620002516000396000f3fe60806040526004361061024a5760003560e01c806387f681d811610139578063ca89b899116100b6578063e2d2e2191161007a578063e2d2e2191461083e578063efca2eed14610854578063f0b37c041461086a578063f2fde38b1461088a578063f854a27f146108aa578063fe9fbb80146108da57600080fd5b8063ca89b89914610762578063ce7c2ac21461078f578063d0e30db0146107e6578063d63a8e11146107ee578063e0f8e2431461081e57600080fd5b8063ad5c4648116100fd578063ad5c4648146106a9578063b6a5d7de146106c9578063bcd259a8146106e9578063c161357a14610709578063c238efd51461072957600080fd5b806387f681d8146105cf5780638e424175146105ef578063929925db14610638578063997664d714610673578063a995bb141461068957600080fd5b80632f54bf6e116101c757806363eabae91161018b57806363eabae9146105075780637088fb7f1461055a5780638366e79a1461056f57806383e845001461058f578063845610ee146105af57600080fd5b80632f54bf6e146104395780633333cfc3146104785780633a98ef39146104985780635881f3ef146104ae578063610035a4146104ce57600080fd5b806315f7e05e1161020e57806315f7e05e1461035d5780631b386a421461037d5780632870e95d146103c357806328fd3198146103e35780632bcf161c1461040357600080fd5b806302c4aede146102565780630300f925146102a9578063061ad62a146102ef57806311ce023d1461032557806314b6ca961461033b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061028c610271366004611a63565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b506102e16102c4366004611a80565b600a60209081526000928352604080842090915290825290205481565b6040519081526020016102a0565b3480156102fb57600080fd5b5061028c61030a366004611a63565b600f602052600090815260409020546001600160a01b031681565b34801561033157600080fd5b506102e160155481565b34801561034757600080fd5b5061035b610356366004611b28565b610913565b005b34801561036957600080fd5b5061035b610378366004611a63565b610af4565b34801561038957600080fd5b506102e1610398366004611a80565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156103cf57600080fd5b5061035b6103de366004611a63565b610b01565b3480156103ef57600080fd5b506102e16103fe366004611a63565b610b55565b34801561040f57600080fd5b506102e161041e366004611a63565b6001600160a01b031660009081526009602052604090205490565b34801561044557600080fd5b50610468610454366004611a63565b6000546001600160a01b0391821691161490565b60405190151581526020016102a0565b34801561048457600080fd5b5061035b610493366004611afa565b610bde565b3480156104a457600080fd5b506102e160115481565b3480156104ba57600080fd5b5061035b6104c9366004611a63565b610c3c565b3480156104da57600080fd5b506104686104e9366004611a63565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561051357600080fd5b5061035b610522366004611afa565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b34801561056657600080fd5b5061035b610c88565b34801561057b57600080fd5b5061046861058a366004611a80565b610ce5565b34801561059b57600080fd5b5061035b6105aa366004611a80565b610e69565b3480156105bb57600080fd5b5061035b6105ca366004611a63565b610ec1565b3480156105db57600080fd5b5061035b6105ea366004611a63565b610f0d565b3480156105fb57600080fd5b5061046861060a366004611a80565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b50610468610653366004611a80565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561067f57600080fd5b506102e160125481565b34801561069557600080fd5b5061035b6106a4366004611a80565b610f60565b3480156106b557600080fd5b5060045461028c906001600160a01b031681565b3480156106d557600080fd5b5061035b6106e4366004611a63565b611012565b3480156106f557600080fd5b5061035b610704366004611a80565b611063565b34801561071557600080fd5b5061035b610724366004611ab9565b6110d4565b34801561073557600080fd5b5061028c610744366004611a63565b6001600160a01b039081166000908152600d60205260409020541690565b34801561076e57600080fd5b506102e161077d366004611a63565b60096020526000908152604090205481565b34801561079b57600080fd5b506107cb6107aa366004611a63565b60106020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102a0565b61035b611186565b3480156107fa57600080fd5b50610468610809366004611a63565b600e6020526000908152604090205460ff1681565b34801561082a57600080fd5b5061035b610839366004611a63565b6111dc565b34801561084a57600080fd5b506102e160145481565b34801561086057600080fd5b506102e160135481565b34801561087657600080fd5b5061035b610885366004611a63565b611228565b34801561089657600080fd5b5061035b6108a5366004611a63565b611273565b3480156108b657600080fd5b506104686108c5366004611a63565b600c6020526000908152604090205460ff1681565b3480156108e657600080fd5b506104686108f5366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b6002546001600160a01b0316331461092a57600080fd5b6001600160a01b038216600090815260106020526040902054156109ba576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156109a3576001600160a01b038083166000908152600f602052604090205461099e91849116611309565b6109ba565b6004546109ba9083906001600160a01b0316611309565b6000811180156109e057506001600160a01b038216600090815260106020526040902054155b15610a4657600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055610a79565b80158015610a6b57506001600160a01b03821660009081526010602052604090205415155b15610a7957610a79826118f4565b6001600160a01b038216600090815260106020526040902054601154610aaa918391610aa491611a09565b90611a1c565b6011556001600160a01b0382166000908152601060205260409020819055610ad181611a28565b6001600160a01b0390921660009081526010602052604090206001019190915550565b610afe3382611309565b50565b6001600160a01b0381166000908152600e602052604090205460ff16610b2657600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610b7a57506000919050565b6001600160a01b038216600090815260106020526040812054610b9c90611a28565b6001600160a01b038416600090815260106020526040902060010154909150808211610bcc575060009392505050565b610bd68282611a09565b949350505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890611bf4565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c0890611bf4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610c0890611bf4565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce1573d6000803e3d6000fd5b5050565b600080546001600160a01b03163314610d105760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b038316301415610d695760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c08565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de39190611b71565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015610e3157600080fd5b505af1158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611b54565b6000546001600160a01b03163314610e935760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610c0890611bf4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b6000546001600160a01b03163314610f8a5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190611b54565b505050565b6000546001600160a01b0316331461103c5760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff166110ca5760405162461bcd60e51b8152602060048201526011602482015270165bdd4818d85b89dd08191bc81d1a185d607a1b6044820152606401610c08565b610ce18282611309565b6000546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610c0890611bf4565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b390604401602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611b54565b50505050565b6002546001600160a01b0316331461119d57600080fd5b60125434906111ac9082611a1c565b6012556011546015546111d6916111cd916111c79085611a4b565b90611a57565b60145490611a1c565b60145550565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610c0890611bf4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112525760405162461bcd60e51b8152600401610c0890611bf4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610c0890611bf4565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b0381166000908152600e602052604090205460ff166113715760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964207265776172642061646472657373210000000000000000006044820152606401610c08565b6001600160a01b038216600090815260106020526040902054611392575050565b600061139d83610b55565b9050801561100d576013546113b29082611a1c565b6013556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546113e89082611a1c565b6001600160a01b038416600090815260106020526040902060028101919091555461141290611a28565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611501576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611476573d6000803e3d6000fd5b506001600160a01b03821660009081526009602052604090205461149a9082611a1c565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546114d69082611a1c565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055505050565b6040516370a0823160e01b81526001600160a01b03848116600483015283916000918316906370a082319060240160206040518083038186803b15801561154757600080fd5b505afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190611b71565b6001600160a01b038581166000908152600d60205260409020549192501661169457604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906115e2576115e2611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061161657611616611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061165c9060009086908c904290600401611b8a565b6000604051808303818588803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b5050505050506117c9565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b0316918391506000906116d7576116d7611cb0565b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061171b5761171b611cb0565b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061174f5761174f611cb0565b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906117959060009086908c904290600401611b8a565b6000604051808303818588803b1580156117ae57600080fd5b505af11580156117c2573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561180e57600080fd5b505afa158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190611b71565b90506118746118558284611a09565b6001600160a01b03871660009081526009602052604090205490611a1c565b6001600160a01b0386166000908152600960205260409020556118c661189a8284611a09565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611a1c565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b6006805461190490600190611c6d565b8154811061191457611914611cb0565b60009182526020808320909101546001600160a01b038481168452600790925260409092205460068054929093169291811061195257611952611cb0565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526007918290526040812054600680549193929161199e90600190611c6d565b815481106119ae576119ae611cb0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560068054806119e4576119e4611c9a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611a158284611c6d565b9392505050565b6000611a158284611c14565b6000611a456015546111c760145485611a4b90919063ffffffff16565b92915050565b6000611a158284611c4e565b6000611a158284611c2c565b600060208284031215611a7557600080fd5b8135611a1581611cc6565b60008060408385031215611a9357600080fd5b8235611a9e81611cc6565b91506020830135611aae81611cc6565b809150509250929050565b600080600060608486031215611ace57600080fd5b8335611ad981611cc6565b92506020840135611ae981611cc6565b929592945050506040919091013590565b60008060408385031215611b0d57600080fd5b8235611b1881611cc6565b91506020830135611aae81611cdb565b60008060408385031215611b3b57600080fd5b8235611b4681611cc6565b946020939093013593505050565b600060208284031215611b6657600080fd5b8151611a1581611cdb565b600060208284031215611b8357600080fd5b5051919050565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611bd45784516001600160a01b031683529383019391830191600101611baf565b50506001600160a01b039690961660408501525050506060015292915050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60008219821115611c2757611c27611c84565b500190565b600082611c4957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c6857611c68611c84565b500290565b600082821015611c7f57611c7f611c84565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610afe57600080fd5b8015158114610afe57600080fdfea2646970667358221220a1c44a72f026b038d04989d822bceac7fd6ed1159979c6bbb017cd888f4c380864736f6c63430008070033a26469706673582212206a8489a53330ac60d0ed8a994d9bdccba787d65b7e260563626934aa55bee6a464736f6c63430008070033

Deployed Bytecode Sourcemap

16782:18526:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18606:81;;;;;;;;;;-1:-1:-1;18606:81:0;;;;-1:-1:-1;;;;;18606:81:0;;;;;;-1:-1:-1;;;;;5271:32:1;;;5253:51;;5241:2;5226:18;18606:81:0;;;;;;;;20438:80;;;;;;;;;;-1:-1:-1;20510:5:0;;;;;;;;;;;;-1:-1:-1;;;20510:5:0;;;;20438:80;;;;;;;:::i;32544:129::-;;;;;;;;;;-1:-1:-1;32544:129:0;;;;;:::i;:::-;;:::i;:::-;;;7183:14:1;;7176:22;7158:41;;7146:2;7131:18;32544:129:0;7018:187:1;20860:241:0;;;;;;;;;;-1:-1:-1;20860:241:0;;;;;:::i;:::-;;:::i;30947:137::-;;;;;;;;;;-1:-1:-1;30947:137:0;;;;;:::i;:::-;;:::i;:::-;;20168:88;;;;;;;;;;-1:-1:-1;20241:12:0;;20168:88;;;9574:25:1;;;9562:2;9547:18;20168:88:0;9428:177:1;21439:401:0;;;;;;;;;;-1:-1:-1;21439:401:0;;;;;:::i;:::-;;:::i;34197:118::-;;;;;;;;;;-1:-1:-1;34197:118:0;;;;;:::i;:::-;;:::i;17818:40::-;;;;;;;;;;-1:-1:-1;17818:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18694:47;;;;;;;;;;-1:-1:-1;18694:47:0;;;;-1:-1:-1;;;;;18694:47:0;;;34516:142;;;;;;;;;;;;;:::i;4520:103::-;;;;;;;;;;-1:-1:-1;4520:103:0;;;;;:::i;:::-;4575:4;4610:5;-1:-1:-1;;;;;4599:16:0;;;4610:5;;4599:16;;4520:103;20262:80;;;;;;;;;;-1:-1:-1;20262:80:0;;17358:1;10990:36:1;;10978:2;10963:18;20262:80:0;10848:184:1;32426:110:0;;;;;;;;;;-1:-1:-1;32426:110:0;;;;;:::i;:::-;;:::i;31092:134::-;;;;;;;;;;-1:-1:-1;31092:134:0;;;;;:::i;:::-;;:::i;31868:140::-;;;;;;;;;;-1:-1:-1;31868:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;31976:24:0;31952:4;31976:24;;;:16;:24;;;;;;;;;31868:140;17711:44;;;;;;;;;;-1:-1:-1;17711:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17762:49;;;;;;;;;;-1:-1:-1;17762:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19001:34;;;;;;;;;;-1:-1:-1;19001:34:0;;;;;;;;21109:133;;;;;;;;;;-1:-1:-1;21109:133:0;;;;;:::i;:::-;;:::i;34670:571::-;;;;;;;;;;-1:-1:-1;34670:571:0;;;;;:::i;:::-;;:::i;30827:112::-;;;;;;;;;;-1:-1:-1;30827:112:0;;;;;:::i;:::-;;:::i;32169:130::-;;;;;;;;;;-1:-1:-1;32169:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;32272:19:0;32248:4;32272:19;;;:11;:19;;;;;;;;;32169:130;32016:145;;;;;;;;;;-1:-1:-1;32016:145:0;;;;;:::i;:::-;;:::i;31557:140::-;;;;;;;;;;-1:-1:-1;31557:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;31665:24:0;31641:4;31665:24;;;:16;:24;;;;;;;;;31557:140;18889:30;;;;;;;;;;-1:-1:-1;18889:30:0;;;;-1:-1:-1;;;18889:30:0;;;;;;29669:142;;;;;;;;;;;;;:::i;20608:105::-;;;;;;;;;;-1:-1:-1;20608:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;20692:18:0;20674:7;20692:18;;;:9;:18;;;;;;;20608:105;17427:54;;;;;;;;;;;;;;;;30545:274;;;;;;;;;;-1:-1:-1;30545:274:0;;;;;:::i;:::-;;:::i;29819:101::-;;;;;;;;;;-1:-1:-1;29819:101:0;;;;;:::i;:::-;;:::i;20524:78::-;;;;;;;;;;-1:-1:-1;20576:7:0;20594:5;-1:-1:-1;;;;;20594:5:0;20524:78;;32307:107;;;;;;;;;;-1:-1:-1;32307:107:0;;;;;:::i;:::-;;:::i;34057:132::-;;;;;;;;;;;;;:::i;17867:42::-;;;;;;;;;;-1:-1:-1;17867:42:0;;;;;;;;17655:49;;;;;;;;;;-1:-1:-1;17655:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20348:84;;;;;;;;;;-1:-1:-1;20422:7:0;;;;;;;;;;;;-1:-1:-1;;;20422:7:0;;;;20348:84;;26585:167;;;;;;;;;;-1:-1:-1;26585:167:0;;;;;:::i;:::-;;:::i;17490:41::-;;;;;;;;;;;;;;;;18847:33;;;;;;;;;;-1:-1:-1;18847:33:0;;;;-1:-1:-1;;;;;18847:33:0;;;18781:19;;;;;;;;;;-1:-1:-1;18781:19:0;;;;-1:-1:-1;;;;;18781:19:0;;;21250:181;;;;;;;;;;-1:-1:-1;21250:181:0;;;;;:::i;:::-;;:::i;16972:64::-;;;;;;;;;;-1:-1:-1;16972:64:0;;;;-1:-1:-1;;;;;16972:64:0;;;32681:1012;;;;;;;;;;-1:-1:-1;32681:1012:0;;;;;:::i;:::-;;:::i;31705:155::-;;;;;;;;;;-1:-1:-1;31705:155:0;;;;;:::i;:::-;;:::i;17918:58::-;;;;;;;;;;-1:-1:-1;17918:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4193:94;;;;;;;;;;-1:-1:-1;4193:94:0;;;;;:::i;:::-;;:::i;18518:81::-;;;;;;;;;;-1:-1:-1;18518:81:0;;;;-1:-1:-1;;;;;18518:81:0;;;30037:500;;;;;;;;;;-1:-1:-1;30037:500:0;;;;;:::i;:::-;;:::i;33701:348::-;;;;;;;;;;-1:-1:-1;33701:348:0;;;;;:::i;:::-;;:::i;20719:133::-;;;;;;;;;;-1:-1:-1;20719:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20821:19:0;;;20803:7;20821:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20719:133;34323:185;;;;;;;;;;-1:-1:-1;34323:185:0;;;;;:::i;:::-;;:::i;29928:101::-;;;;;;;;;;-1:-1:-1;29928:101:0;;;;;:::i;:::-;;:::i;16853:48::-;;;;;;;;;;-1:-1:-1;16853:48:0;16884:17;16853:48;;4363:97;;;;;;;;;;-1:-1:-1;4363:97:0;;;;;:::i;:::-;;:::i;24285:187::-;;;;;;;;;;-1:-1:-1;24285:187:0;;;;;:::i;:::-;;:::i;4920:173::-;;;;;;;;;;-1:-1:-1;4920:173:0;;;;;:::i;:::-;;:::i;31234:315::-;;;;;;;;;;-1:-1:-1;31234:315:0;;;;;:::i;:::-;;:::i;18750:24::-;;;;;;;;;;-1:-1:-1;18750:24:0;;;;-1:-1:-1;;;;;18750:24:0;;;4694:107;;;;;;;;;;-1:-1:-1;4694:107:0;;;;;:::i;:::-;;:::i;32544:129::-;32626:4;4610:5;;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;32650:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;::::0;32544:129::o;20860:241::-;20989:10;20960:4;20977:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20977:32:0;;;;;;;;;;:41;;;21034:37;20960:4;;20977:32;;21034:37;;;;21012:6;9574:25:1;;9562:2;9547:18;;9428:177;21034:37:0;;;;;;;;-1:-1:-1;21089:4:0;20860:241;;;;;:::o;30947:137::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;31045:22:::1;:31:::0;30947:137::o;21439:401::-;21629:12;;-1:-1:-1;;;;;21594:19:0;;21573:4;21594:19;;;:11;:19;;;;;;;;21614:10;21594:31;;;;;;;;21573:4;;21594:47;21590:183;;21692:69;;;;;;;;;;;-1:-1:-1;;;21692:69:0;;;;;;;;-1:-1:-1;;;;;21692:19:0;;-1:-1:-1;21692:19:0;;;:11;:19;;;;;21712:10;21692:31;;;;;;;;;;:69;;21728:6;;21692:35;:69::i;:::-;-1:-1:-1;;;;;21658:19:0;;;;;;:11;:19;;;;;;;;21678:10;21658:31;;;;;;;:103;21590:183;21792:40;21806:6;21814:9;21825:6;21792:13;:40::i;:::-;21785:47;;21439:401;;;;;;:::o;34197:118::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;34282:14:::1;:25:::0;;-1:-1:-1;;34282:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34197:118::o;34516:142::-;34644:4;;-1:-1:-1;;;;;34644:4:0;34569:7;20692:18;;;:9;:18;;;;;;34596:54;;34623:4;;-1:-1:-1;;;;;34623:4:0;20674:7;20692:18;;;:9;:18;;;;;;34596:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;34589:61;;34516:142;:::o;32426:110::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32505:15:0::1;32523:5;32505:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;32505:23:0::1;::::0;;32426:110::o;31092:134::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;31187:22:::1;:31:::0;;-1:-1:-1;;31187:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31092:134::o;21109:133::-;21180:4;21204:30;21212:7;21221:12;;21204:7;:30::i;34670:571::-;34760:13;4610:5;;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;34786:27:::1;34827:7;34786:49;;34868:16;-1:-1:-1::0;;;;;34868:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34856:47:0::1;;34912:4;34919:16;-1:-1:-1::0;;;;;34919:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34856:87;::::0;-1:-1:-1;;;;;;34856:87:0::1;::::0;;;;;;-1:-1:-1;;;;;5761:15:1;;;34856:87:0::1;::::0;::::1;5743:34:1::0;5813:15;;5793:18;;;5786:43;5678:18;;34856:87:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34848:95:::0;-1:-1:-1;;;;;;34958:19:0;::::1;34954:150;;35014:16;-1:-1:-1::0;;;;;35014:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35002:50:0::1;;35061:4;35068:16;-1:-1:-1::0;;;;;35068:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35002:90;::::0;-1:-1:-1;;;;;;35002:90:0::1;::::0;;;;;;-1:-1:-1;;;;;5761:15:1;;;35002:90:0::1;::::0;::::1;5743:34:1::0;5813:15;;5793:18;;;5786:43;5678:18;;35002:90:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34994:98;;34954:150;35114:4;:12:::0;;-1:-1:-1;;;;;35114:12:0;;::::1;-1:-1:-1::0;;;;;;35114:12:0;;::::1;;::::0;;;35139:6:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;35221:12:::1;::::0;35195:4:::1;35114;35175:26:::0;;;:11:::1;:26;::::0;;;;;;;:43;;;;;;;;;;:58;35121:5;34670:571;-1:-1:-1;34670:571:0:o;30827:112::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;30912:10:::1;:19:::0;30827:112::o;32016:145::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32125:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32125:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32016:145::o;29669:142::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;29766:37:::1;::::0;29734:21:::1;::::0;29774:10:::1;::::0;29766:37;::::1;;;::::0;29734:21;;29716:15:::1;29766:37:::0;29716:15;29766:37;29734:21;29774:10;29766:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29705:106;29669:142::o:0;30545:274::-;30657:10;4610:5;;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;30707:39:::1;::::0;-1:-1:-1;;;30707:39:0;;30740:4:::1;30707:39;::::0;::::1;5253:51:1::0;30680:24:0::1;::::0;-1:-1:-1;;;;;30707:24:0;::::1;::::0;::::1;::::0;5226:18:1;;30707:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30765:46;::::0;-1:-1:-1;;;30765:46:0;;-1:-1:-1;;;;;6040:32:1;;;30765:46:0::1;::::0;::::1;6022:51:1::0;6089:18;;;6082:34;;;30680:66:0;;-1:-1:-1;30765:23:0;;::::1;::::0;::::1;::::0;5995:18:1;;30765:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30757:54:::0;30545:274;-1:-1:-1;;;;30545:274:0:o;29819:101::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;29900:4:::1;:12:::0;;-1:-1:-1;;;;;;29900:12:0::1;-1:-1:-1::0;;;;;29900:12:0;;;::::1;::::0;;;::::1;::::0;;29819:101::o;32307:107::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32384:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;32384:22:0::1;32402:4;32384:22;::::0;;32307:107::o;34057:132::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;34118:14:::1;::::0;::::1;;34113:69;;34149:14;:21:::0;;-1:-1:-1;;34149:21:0::1;34166:4;34149:21;::::0;;34113:69:::1;34057:132::o:0;26585:167::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;26702:42:::1;26731:5;26738;26702:28;:42::i;21250:181::-:0;21355:4;21379:44;21393:10;21405:9;21416:6;21379:13;:44::i;32681:1012::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;33056:15:::1;:34:::0;;;33101:16:::1;:36:::0;;;33148:16:::1;:36:::0;;;33195:14:::1;:32:::0;;;33252:83:::1;33212:15:::0;33252:62:::1;33167:17:::0;33252:62;33074:16;33120:17;33252:20:::1;:39::i;:::-;:43:::0;::::1;:62::i;:83::-;33238:11;:97:::0;33348:16:::1;:36:::0;;;33395:17:::1;:38:::0;;;33444:17:::1;:38:::0;;;33493:15:::1;:34:::0;;;33553:87:::1;33511:16:::0;33553:65:::1;33464:18:::0;33553:65;33367:17;33415:18;33553:21:::1;:41::i;:87::-;33538:12;:102:::0;33653:14:::1;:32:::0;-1:-1:-1;;;;;;;;32681:1012:0:o;31705:155::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31819:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31819:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31705:155::o;4193:94::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4253:19:0::1;;::::0;;;4275:4:::1;4253:19;::::0;;;;;;;:26;;-1:-1:-1;;4253:26:0::1;::::0;;::::1;::::0;;4193:94::o;30037:500::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;30161:6:::1;:28:::0;;-1:-1:-1;;;;;;30161:28:0::1;-1:-1:-1::0;;;;;30161:28:0;::::1;::::0;;::::1;::::0;;;30219:16:::1;::::0;;-1:-1:-1;;;30219:16:0;;;;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;30161:28;30219:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30248:4;::::0;30207:61:::1;::::0;-1:-1:-1;;;30207:61:0;;-1:-1:-1;;;;;30248:4:0;;::::1;30207:61;::::0;::::1;5743:34:1::0;30262:4:0::1;5793:18:1::0;;;5786:43;30207:40:0;::::1;::::0;::::1;::::0;5678:18:1;;30207:61:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30200:4;:68:::0;;-1:-1:-1;;;;;;30200:68:0::1;-1:-1:-1::0;;;;;30200:68:0;;::::1;;::::0;;30325:12:::1;::::0;30299:4:::1;-1:-1:-1::0;30279:26:0;;;:11:::1;:26;::::0;;;;;;;30314:6:::1;::::0;;;::::1;30279:43:::0;;;;;;;;;:58;30348:61;::::1;;;30384:6;;;;;;;;;-1:-1:-1::0;;;;;30384:6:0::1;-1:-1:-1::0;;;;;30384:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30377:4;:20:::0;;-1:-1:-1;;;;;;30377:20:0::1;-1:-1:-1::0;;;;;30377:20:0;;;::::1;::::0;;;::::1;::::0;;30348:61:::1;30457:7;30466:10;30433:44;;;;;:::i;:::-;-1:-1:-1::0;;;;;5761:15:1;;;5743:34;;5813:15;;5808:2;5793:18;;5786:43;5693:2;5678:18;30433:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30419:11:0::1;:58:::0;;-1:-1:-1;;;;;30419:58:0;;;::::1;-1:-1:-1::0;;;;;;30419:58:0;;::::1;::::0;::::1;::::0;;;30488:18:::1;:41:::0;;;;::::1;;::::0;;-1:-1:-1;;30037:500:0:o;33701:348::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;33885:21:::1;:46:::0;;-1:-1:-1;;;;;33885:46:0;;::::1;-1:-1:-1::0;;;;;;33885:46:0;;::::1;;::::0;;;33942:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;33999:19:::1;:42:::0;;;;;::::1;::::0;::::1;;::::0;;33701:348::o;34323:185::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;34440:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34440:22:0::1;-1:-1:-1::0;;;;34440:22:0;;::::1;::::0;;;::::1;::::0;;;34473:17:::1;:27:::0;34323:185::o;29928:101::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;30009:4:::1;:12:::0;;-1:-1:-1;;;;;;30009:12:0::1;-1:-1:-1::0;;;;;30009:12:0;;;::::1;::::0;;;::::1;::::0;;29928:101::o;4363:97::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4425:19:0::1;4447:5;4425:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4425:27:0::1;::::0;;4363:97::o;24285:187::-;24357:7;24381;24377:59;;;-1:-1:-1;;24412:12:0;;;24285:187::o;24377:59::-;-1:-1:-1;;24453:11:0;;;24285:187::o;4920:173::-;4575:4;4610:5;-1:-1:-1;;;;;4610:5:0;3917:10;4599:16;3901:38;;;;-1:-1:-1;;;3901:38:0;;;;;;;:::i;:::-;4996:5:::1;:11:::0;;-1:-1:-1;;;;;;4996:11:0::1;-1:-1:-1::0;;;;;4996:11:0;::::1;::::0;;::::1;::::0;;5018:19;;;-1:-1:-1;5018:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5018:26:0::1;::::0;;::::1;::::0;;;5060:25;;5253:51:1;;;5060:25:0::1;::::0;5226:18:1;5060:25:0::1;;;;;;;4920:173:::0;:::o;31234:315::-;4078:24;4091:10;4078:12;:24::i;:::-;4070:48;;;;-1:-1:-1;;;4070:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31348:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31348:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31392:150:::1;;31419:11;::::0;:31:::1;::::0;-1:-1:-1;;;31419:31:0;;-1:-1:-1;;;;;6040:32:1;;;31419:31:0::1;::::0;::::1;6022:51:1::0;31419:11:0::1;6089:18:1::0;;;6082:34;31419:11:0;;::::1;::::0;:20:::1;::::0;5995:18:1;;31419:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29766:37;29705:106;29669:142::o:0;31392:150::-:1;31483:11;::::0;-1:-1:-1;;;;;31512:17:0;;::::1;31483:11;31512:17:::0;;;:9:::1;:17;::::0;;;;;;;31483:47;;-1:-1:-1;;;31483:47:0;;::::1;::::0;::::1;6022:51:1::0;;;;6089:18;;;6082:34;31483:11:0;::::1;::::0;:20:::1;::::0;5995:18:1;;31483:47:0::1;5840:282:1::0;4694:107:0;-1:-1:-1;;;;;4774:19:0;4750:4;4774:19;;;:14;:19;;;;;;;;;4694:107::o;2007:206::-;2093:7;2154:12;2146:6;;;;2138:29;;;;-1:-1:-1;;;2138:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2189:5:0;;;2007:206::o;21848:1423::-;21995:6;;21974:4;;21995:6;;;;;21991:87;;;22025:41;22040:6;22048:9;22059:6;22025:14;:41::i;:::-;22018:48;;;;21991:87;22098:14;;;;;:42;;-1:-1:-1;;;;;;22116:24:0;;;;;;:16;:24;;;;;;;;22098:42;22090:84;;;;-1:-1:-1;;;22090:84:0;;8932:2:1;22090:84:0;;;8914:21:1;8971:2;8951:18;;;8944:30;9010:31;8990:18;;;8983:59;9059:18;;22090:84:0;8730:353:1;22090:84:0;22219:6;;-1:-1:-1;;;;;22251:36:0;;;22187:21;22251:36;;;:25;:36;;;;;;22219:6;;;;;22187:21;22251:36;;;:66;;;22304:13;-1:-1:-1;;;;;22291:26:0;:9;-1:-1:-1;;;;;22291:26:0;;22251:66;22237:80;;22335:6;22334:7;:30;;;;-1:-1:-1;;;;;;22346:18:0;;;;;;:7;:18;;;;;;;;22345:19;22334:30;22330:149;;;22423:10;;-1:-1:-1;;;;;22390:20:0;;;;;;:9;:20;;;;;;:29;;22413:6;;22390:29;:::i;:::-;22389:44;22381:86;;;;-1:-1:-1;;;22381:86:0;;8240:2:1;22381:86:0;;;8222:21:1;8279:2;8259:18;;;8252:30;8318:31;8298:18;;;8291:59;8367:18;;22381:86:0;8038:353:1;22381:86:0;22495:6;:42;;;;;22515:22;;22505:6;:32;;22495:42;22491:141;;;22558:16;:14;:16::i;:::-;22554:67;;;22595:10;:8;:10::i;:::-;22664:53;;;;;;;;;;;-1:-1:-1;;;22664:53:0;;;;;;;;-1:-1:-1;;;;;22664:17:0;;-1:-1:-1;22664:17:0;;;:9;:17;;;;;;;;:53;;22686:6;;22664:21;:53::i;:::-;-1:-1:-1;;;;;22644:17:0;;;;;;:9;:17;;;;;:73;;;;22755:32;22654:6;22777:9;22755:13;:32::i;:::-;:78;;22827:6;22755:78;;;22790:34;22798:6;22806:9;22817:6;22790:7;:34::i;:::-;-1:-1:-1;;;;;22869:20:0;;;;;;:9;:20;;;;;;22730:103;;-1:-1:-1;22869:40:0;;22730:103;22869:24;:40::i;:::-;-1:-1:-1;;;;;22846:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;22927:24;;;;;:16;:24;;;;;;;22922:120;;22972:11;;-1:-1:-1;;;;;23001:17:0;;;22972:11;23001:17;;;:9;:17;;;;;;;;22972:47;;-1:-1:-1;;;22972:47:0;;;;;6022:51:1;;;;6089:18;;;6082:34;22972:11:0;;;:20;;5995:18:1;;22972:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22968:63;;-1:-1:-1;;;;;23057:27:0;;;;;;:16;:27;;;;;;;;23052:129;;23105:11;;-1:-1:-1;;;;;23137:20:0;;;23105:11;23137:20;;;:9;:20;;;;;;;;23105:53;;-1:-1:-1;;;23105:53:0;;;;;6022:51:1;;;;6089:18;;;6082:34;23105:11:0;;;:20;;5995:18:1;;23105:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23101:69;;23215:9;-1:-1:-1;;;;;23198:43:0;23207:6;-1:-1:-1;;;;;23198:43:0;;23226:14;23198:43;;;;9574:25:1;;9562:2;9547:18;;9428:177;23198:43:0;;;;;;;;-1:-1:-1;23259:4:0;;21848:1423;-1:-1:-1;;;;;;21848:1423:0:o;1583:98::-;1641:7;1668:5;1672:1;1668;:5;:::i;26760:315::-;-1:-1:-1;;;;;26869:32:0;;;;;;:25;:32;;;;;:40;;-1:-1:-1;;26869:40:0;;;;;;;;;;;;26920:68;;-1:-1:-1;;;;;26946:23:0;;;;;;:16;:23;;;;;:30;;-1:-1:-1;;26946:30:0;26972:4;26946:30;;;26920:68;27003:5;26998:70;;-1:-1:-1;;;;;;27025:23:0;27051:5;27025:23;;;:16;:23;;;;;:31;;-1:-1:-1;;27025:31:0;;;26760:315::o;1477:98::-;1535:7;1562:5;1566:1;1562;:5;:::i;23279:313::-;23443:53;;;;;;;;;;;-1:-1:-1;;;23443:53:0;;;;;;;;-1:-1:-1;;;;;23443:17:0;;23406:4;23443:17;;;:9;:17;;;;;;;:53;;23465:6;;23443:21;:53::i;:::-;-1:-1:-1;;;;;23423:17:0;;;;;;;:9;:17;;;;;;:73;;;;23530:20;;;;;;;:32;;23555:6;23530:24;:32::i;:::-;-1:-1:-1;;;;;23507:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;23580:4:0;23279:313;;;;;:::o;26383:194::-;26483:10;26432:4;26457:37;;;:25;:37;;;;;;;;26456:38;:49;;;;-1:-1:-1;26499:6:0;;;;;;;26498:7;26456:49;:64;;;;-1:-1:-1;26509:11:0;;-1:-1:-1;;;26509:11:0;;;;26456:64;:113;;;;-1:-1:-1;;26552:17:0;;26542:4;26524:24;;;;:9;:24;;;;;;:45;;;26383:194::o;27083:2180::-;19093:6;:13;;-1:-1:-1;;19093:13:0;;;;;27176:4:::1;-1:-1:-1::0;20692:18:0;;;:9;:18;;;;;;27132:50:::1;;27193:25;27221:107;27306:21;;27221:80;27277:23;;27221:51;27248:23;;27221:22;;:26;;:51;;;;:::i;:107::-;27193:135;;27349:26;27378:29;27405:1;27378:22;;:26;;:29;;;;:::i;:::-;27349:58:::0;-1:-1:-1;27418:20:0::1;27441:39;:15:::0;27349:58;27441:19:::1;:39::i;:::-;27517:16;::::0;;27531:1:::1;27517:16:::0;;;;;::::1;::::0;;27418:62;;-1:-1:-1;27493:21:0::1;::::0;27517:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27517:16:0::1;27493:40;;27562:4;27544;27549:1;27544:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27544:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27588:4:::1;::::0;27578:7;;27588:4;::::1;::::0;27578;;27588;;27578:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;27578:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27661:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27661:188:0;;27627:21:::1;::::0;27661:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27733:12;;27603:21:::1;::::0;27776:4;;27803::::1;::::0;27823:15:::1;::::0;27661:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27862:17;27882:40;27908:13;27882:21;:25;;:40;;;;:::i;:::-;27862:60;;27935:26;27964:67;28029:1;27964:60;28006:17;27964:37;27978:22;;27964:9;:13;;:37;;;;:::i;:::-;:41:::0;::::1;:60::i;:67::-;27935:96;;28042:27;28072:61;28115:17;28072:38;28086:23;;28072:9;:13;;:38;;;;:::i;:61::-;28042:91;;28144:27;28174:61;28217:17;28174:38;28188:23;;28174:9;:13;;:38;;;;:::i;:61::-;28144:91;;28246:25;28274:59;28315:17;28274:36;28288:21;;28274:9;:13;;:36;;;;:::i;:59::-;28379:1;28354:22;:26:::0;;;28391:23:::1;:27:::0;;;28429:23:::1;:27:::0;;;28467:21:::1;:25:::0;28246:87;-1:-1:-1;28509:23:0;;28505:120:::1;;28553:11;;;;;;;;;-1:-1:-1::0;;;;;28553:11:0::1;-1:-1:-1::0;;;;;28553:19:0::1;;28580;28553:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28549:65:::0;::::1;28639:23:::0;;28635:116:::1;;28687:21;::::0;28679:60:::1;::::0;-1:-1:-1;;;;;28687:21:0;;::::1;::::0;28679:60;::::1;;;::::0;28719:19;;28687:21:::1;28679:60:::0;28687:21;28679:60;28719:19;28687:21;28679:60;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28635:116;28765:21:::0;;28761:110:::1;;28811:19;::::0;28803:56:::1;::::0;-1:-1:-1;;;;;28811:19:0;;::::1;::::0;28803:56;::::1;;;::::0;28841:17;;28811:19:::1;28803:56:::0;28811:19;28803:56;28841:17;28811:19;28803:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28761:110;28887:22:::0;;28883:373:::1;;28926:6;::::0;;29103:21:::1;::::0;28926:247:::1;::::0;-1:-1:-1;;;28926:247:0;;29002:4:::1;28926:247;::::0;::::1;6747:34:1::0;6797:18;;;6790:34;;;28926:6:0::1;6840:18:1::0;;;6833:34;;;6883:18;;;6876:34;-1:-1:-1;;;;;29103:21:0;;::::1;6926:19:1::0;;;6919:44;29143:15:0::1;6979:19:1::0;;;6972:35;28926:6:0::1;::::0;:22:::1;::::0;28956:18;;6681:19:1;;28926:247:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29193:51:0::1;::::0;;10769:25:1;;;10825:2;10810:18;;10803:34;;;29193:51:0::1;::::0;-1:-1:-1;10742:18:1;29193:51:0::1;;;;;;;28883:373;-1:-1:-1::0;;19120:6:0;:14;;-1:-1:-1;;19120:14:0;;;-1:-1:-1;;;;;;;;;27083:2180:0:o;23600:677::-;23729:22;;23706:4;;23729:22;;23725:543;;;-1:-1:-1;;;;;23776:19:0;;;;;;:11;:19;;;;;;;;23775:20;:47;;;;-1:-1:-1;;;;;;23800:22:0;;;;;;:11;:22;;;;;;;;23799:23;23775:47;23768:54;;;;23725:543;23887:6;;-1:-1:-1;;;;;23922:33:0;;;23855:21;23922:33;;;:25;:33;;;;;;23887:6;;;;;23855:21;23922:33;;;:60;;;23969:13;-1:-1:-1;;;;;23959:23:0;:6;-1:-1:-1;;;;;23959:23:0;;23922:60;-1:-1:-1;;;;;24012:36:0;;23997:11;24012:36;;;:25;:36;;;;;;23909:73;;-1:-1:-1;23997:11:0;24012:36;;;:65;;;24064:13;-1:-1:-1;;;;;24051:26:0;:9;-1:-1:-1;;;;;24051:26:0;;24012:65;23997:80;;24098:5;:15;;;;24107:6;24098:15;24094:163;;;-1:-1:-1;;;;;24142:19:0;;;;;;:11;:19;;;;;;;;24141:20;:47;;;;-1:-1:-1;;;;;;24166:22:0;;;;;;:11;:22;;;;;;;;24165:23;24141:47;24134:54;;;;;;;24094:163;24236:5;24229:12;;;;;;;24480:1895;24651:6;;-1:-1:-1;;;;;24683:35:0;;;24599:7;24683:35;;;:25;:35;;;;;;24599:7;;24651:6;;;;;24599:7;;24683:35;;;:64;;;24734:13;-1:-1:-1;;;;;24722:25:0;:8;-1:-1:-1;;;;;24722:25:0;;24683:64;24669:78;;24760:16;24779:19;24791:6;24779:11;:19::i;:::-;24760:38;;24809:17;24829:40;24854:14;;24829:20;24840:8;24829:6;:10;;:20;;;;:::i;:40::-;24809:60;-1:-1:-1;24886:12:0;;24882:1308;;24919:6;24915:1264;;;24950:16;;:20;24946:134;;25052:8;25033:16;;25021:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24995:22;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;24946:134:0;25102:17;;:21;25098:137;;25207:8;25187:17;;25175:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;25148:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;25098:137:0;25257:17;;:21;25253:137;;25362:8;25342:17;;25330:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;25303:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;25253:137:0;25412:15;;:19;25408:131;;25511:8;25493:15;;25481:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;25456:21;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25408:131:0;24915:1264;;;25583:15;;:19;25579:132;;25683:8;25665:15;;25653:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;25627:22;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;25579:132:0;25733:16;;:20;25729:135;;25836:8;25817:16;;25805:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;25778:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;25729:135:0;25886:16;;:20;25882:135;;25989:8;25970:16;;25958:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;25931:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;25882:135:0;26039:14;;:18;26035:129;;26136:8;26119:14;;26107:9;:26;;;;:::i;:::-;:37;;;;:::i;:::-;26082:21;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;26035:129:0;26247:4;26229:24;;;;:9;:24;;;;;;:39;;26258:9;26229:28;:39::i;:::-;26220:4;26202:24;;;;:9;:24;;;;;;;:66;;;;26284:42;;-1:-1:-1;;;;;26284:42:0;;;;;;;26316:9;9574:25:1;;9562:2;9547:18;;9428:177;26284:42:0;;;;;;;;26346:21;:6;26357:9;26346:10;:21::i;:::-;26339:28;24480:1895;-1:-1:-1;;;;;;;;24480:1895:0:o;1795:98::-;1853:7;1880:5;1884:1;1880;:5;:::i;1689:98::-;1747:7;1774:5;1778:1;1774;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;782:388::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;-1:-1:-1;1092:2:1;1077:18;;1064:32;1105:33;1064:32;1105:33;:::i;:::-;1157:7;1147:17;;;782:388;;;;;:::o;1175:529::-;1252:6;1260;1268;1321:2;1309:9;1300:7;1296:23;1292:32;1289:52;;;1337:1;1334;1327:12;1289:52;1376:9;1363:23;1395:31;1420:5;1395:31;:::i;:::-;1445:5;-1:-1:-1;1502:2:1;1487:18;;1474:32;1515:33;1474:32;1515:33;:::i;:::-;1567:7;-1:-1:-1;1626:2:1;1611:18;;1598:32;1639:33;1598:32;1639:33;:::i;:::-;1691:7;1681:17;;;1175:529;;;;;:::o;1709:456::-;1786:6;1794;1802;1855:2;1843:9;1834:7;1830:23;1826:32;1823:52;;;1871:1;1868;1861:12;1823:52;1910:9;1897:23;1929:31;1954:5;1929:31;:::i;:::-;1979:5;-1:-1:-1;2036:2:1;2021:18;;2008:32;2049:33;2008:32;2049:33;:::i;:::-;1709:456;;2101:7;;-1:-1:-1;;;2155:2:1;2140:18;;;;2127:32;;1709:456::o;2170:382::-;2235:6;2243;2296:2;2284:9;2275:7;2271:23;2267:32;2264:52;;;2312:1;2309;2302:12;2264:52;2351:9;2338:23;2370:31;2395:5;2370:31;:::i;:::-;2420:5;-1:-1:-1;2477:2:1;2462:18;;2449:32;2490:30;2449:32;2490:30;:::i;2557:315::-;2625:6;2633;2686:2;2674:9;2665:7;2661:23;2657:32;2654:52;;;2702:1;2699;2692:12;2654:52;2741:9;2728:23;2760:31;2785:5;2760:31;:::i;:::-;2810:5;2862:2;2847:18;;;;2834:32;;-1:-1:-1;;;2557:315:1:o;2877:241::-;2933:6;2986:2;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3041:9;3028:23;3060:28;3082:5;3060:28;:::i;3123:245::-;3190:6;3243:2;3231:9;3222:7;3218:23;3214:32;3211:52;;;3259:1;3256;3249:12;3211:52;3291:9;3285:16;3310:28;3332:5;3310:28;:::i;3373:309::-;3438:6;3446;3499:2;3487:9;3478:7;3474:23;3470:32;3467:52;;;3515:1;3512;3505:12;3467:52;3554:9;3541:23;3573:28;3595:5;3573:28;:::i;3687:180::-;3746:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:52;;;3815:1;3812;3805:12;3767:52;-1:-1:-1;3838:23:1;;3687:180;-1:-1:-1;3687:180:1:o;3872:184::-;3942:6;3995:2;3983:9;3974:7;3970:23;3966:32;3963:52;;;4011:1;4008;4001:12;3963:52;-1:-1:-1;4034:16:1;;3872:184;-1:-1:-1;3872:184:1:o;4061:306::-;4149:6;4157;4165;4218:2;4206:9;4197:7;4193:23;4189:32;4186:52;;;4234:1;4231;4224:12;4186:52;4263:9;4257:16;4247:26;;4313:2;4302:9;4298:18;4292:25;4282:35;;4357:2;4346:9;4342:18;4336:25;4326:35;;4061:306;;;;;:::o;4372:730::-;4503:6;4511;4519;4527;4535;4543;4551;4559;4567;4620:3;4608:9;4599:7;4595:23;4591:33;4588:53;;;4637:1;4634;4627:12;4588:53;-1:-1:-1;;4660:23:1;;;4730:2;4715:18;;4702:32;;-1:-1:-1;4781:2:1;4766:18;;4753:32;;4832:2;4817:18;;4804:32;;-1:-1:-1;4883:3:1;4868:19;;4855:33;;-1:-1:-1;4935:3:1;4920:19;;4907:33;;-1:-1:-1;4987:3:1;4972:19;;4959:33;;-1:-1:-1;5039:3:1;5024:19;;5011:33;;-1:-1:-1;5091:3:1;5076:19;5063:33;;-1:-1:-1;4372:730:1;-1:-1:-1;4372:730:1:o;7436:597::-;7548:4;7577:2;7606;7595:9;7588:21;7638:6;7632:13;7681:6;7676:2;7665:9;7661:18;7654:34;7706:1;7716:140;7730:6;7727:1;7724:13;7716:140;;;7825:14;;;7821:23;;7815:30;7791:17;;;7810:2;7787:26;7780:66;7745:10;;7716:140;;;7874:6;7871:1;7868:13;7865:91;;;7944:1;7939:2;7930:6;7919:9;7915:22;7911:31;7904:42;7865:91;-1:-1:-1;8017:2:1;7996:15;-1:-1:-1;;7992:29:1;7977:45;;;;8024:2;7973:54;;7436:597;-1:-1:-1;;;7436:597:1:o;8396:329::-;8598:2;8580:21;;;8637:1;8617:18;;;8610:29;-1:-1:-1;;;8670:2:1;8655:18;;8648:36;8716:2;8701:18;;8396:329::o;9088:335::-;9290:2;9272:21;;;9329:2;9309:18;;;9302:30;-1:-1:-1;;;9363:2:1;9348:18;;9341:41;9414:2;9399:18;;9088:335::o;9610:980::-;9872:4;9920:3;9909:9;9905:19;9951:6;9940:9;9933:25;9977:2;10015:6;10010:2;9999:9;9995:18;9988:34;10058:3;10053:2;10042:9;10038:18;10031:31;10082:6;10117;10111:13;10148:6;10140;10133:22;10186:3;10175:9;10171:19;10164:26;;10225:2;10217:6;10213:15;10199:29;;10246:1;10256:195;10270:6;10267:1;10264:13;10256:195;;;10335:13;;-1:-1:-1;;;;;10331:39:1;10319:52;;10426:15;;;;10391:12;;;;10367:1;10285:9;10256:195;;;-1:-1:-1;;;;;;;10507:32:1;;;;10502:2;10487:18;;10480:60;-1:-1:-1;;;10571:3:1;10556:19;10549:35;10468:3;9610:980;-1:-1:-1;;;9610:980:1:o;11037:128::-;11077:3;11108:1;11104:6;11101:1;11098:13;11095:39;;;11114:18;;:::i;:::-;-1:-1:-1;11150:9:1;;11037:128::o;11170:217::-;11210:1;11236;11226:132;;11280:10;11275:3;11271:20;11268:1;11261:31;11315:4;11312:1;11305:15;11343:4;11340:1;11333:15;11226:132;-1:-1:-1;11372:9:1;;11170:217::o;11392:168::-;11432:7;11498:1;11494;11490:6;11486:14;11483:1;11480:21;11475:1;11468:9;11461:17;11457:45;11454:71;;;11505:18;;:::i;:::-;-1:-1:-1;11545:9:1;;11392:168::o;11565:125::-;11605:4;11633:1;11630;11627:8;11624:34;;;11638:18;;:::i;:::-;-1:-1:-1;11675:9:1;;11565:125::o;11695:127::-;11756:10;11751:3;11747:20;11744:1;11737:31;11787:4;11784:1;11777:15;11811:4;11808:1;11801:15;11827:127;11888:10;11883:3;11879:20;11876:1;11869:31;11919:4;11916:1;11909:15;11943:4;11940:1;11933:15;12091:131;-1:-1:-1;;;;;12166:31:1;;12156:42;;12146:70;;12212:1;12209;12202:12;12146:70;12091:131;:::o;12227:118::-;12313:5;12306:13;12299:21;12292:5;12289:32;12279:60;;12335:1;12332;12325:12

Swarm Source

ipfs://a1c44a72f026b038d04989d822bceac7fd6ed1159979c6bbb017cd888f4c3808

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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