ETH Price: $2,907.82 (-4.04%)
Gas: 2 Gwei

Token

Staked Wrapped Bear Bucks (xBEAR)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 xBEAR

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
430,714,003 xBEAR

Value
$0.00
0x411ab2be4b5774b4ef4091f5ddf16decf1ae2de7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
xBEAR

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-10
*/

/**
 * xBEAR    BEARBUCKS.FINANCE    T.ME/BEARBUCKS
*/

// 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 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;

    //bool public blacklistMode = true;

    address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed; // to be shown in UI
    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[USDT] = true;
        allowed[USDC] = true;
        allowed[DAI] = 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, USDT);
            }
        }

        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 changeUSDT(
        address _USDT
    ) external onlyOwner {
        USDT = _USDT;
    }

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

}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

contract xBEAR is IERC20, Auth, ReentrancyGuard {
    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;
    address WBEAR = 0xd11a3EdaC587faa6bD870683114F5Aa08499f187;
    address TREASURY = 0xdbc85dF60C8E6cF056FF418EdCA44Be368da85D5;
    IERC20 wbear = IERC20(WBEAR);

    address public XBEAR;
    IERC20 xbear;

    string constant _name = "Staked Wrapped Bear Bucks";
    string constant _symbol = "xBEAR";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000 * (10 ** _decimals);

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

    mapping (address => bool) public isDividendExempt;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public tradingEnabled = false;

    bool public canEmergencySweep = true;
    bool public hasEmergencySweeped = false;
    bool public paused = false;
    bool public safetyChecks = false;

    mapping (address => bool) private _depositors;

    constructor () Auth(msg.sender) {
        XBEAR = address(this);
        xbear = IERC20(XBEAR);

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

        isDividendExempt[pair] = true;
        isDividendExempt[XBEAR] = true;
        isDividendExempt[DEAD] = true;

        approve(XBEAR, _totalSupply);
        approve(WBEAR, _totalSupply);
        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[XBEAR] = _totalSupply;
        emit Transfer(address(0), XBEAR, _totalSupply);
    }

    function isTreasury(address account) public view returns (bool) {
        return account == TREASURY;
    }

    function isDepositor(address account) public view returns (bool) {
        return _depositors[account];
    }

    modifier onlyTreasury() {
        require(isTreasury(msg.sender), "!TREASURY"); _;
    }

    modifier onlyOwnerOrTreasury() {
        require(isOwner(msg.sender) || isTreasury(msg.sender), "!OWNER && !TREASURY"); _;
    }

    modifier onlyDepositor() {
        require(isDepositor(msg.sender), "!DEPOSITOR"); _;
    }

    function mint(
        uint256 _amount
    ) external nonReentrant {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(!paused, "This contract is paused");
        if (safetyChecks) {
            require(wbear.balanceOf(msg.sender) >= _amount, "Your wBEAR balance is too low");
            require(wbear.allowance(msg.sender, XBEAR) >= _amount, "xBEAR allowance is too low");
            require(_totalSupply >= _amount, "The amount exceeds the supply");
        }
        bool _transfer = wbear.transferFrom(msg.sender, XBEAR, _amount);
        require(_transfer, "Failed to receive tokens");
        _transferFrom(XBEAR, msg.sender, _amount);
    }

    function redeem(
        uint256 _amount
    ) external nonReentrant {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(!paused, "This contract is paused");
        if (safetyChecks) {
            require(_balances[msg.sender] >= _amount, "Your xBEAR balance is too low");
            require(_allowances[msg.sender][XBEAR] >= _amount, "xBEAR allowance is too low");
        }
        require(wbear.balanceOf(XBEAR) >= _amount, "The contract wBEAR balance is too low");
        bool _transfer = _transferFrom(msg.sender, XBEAR, _amount);
        require(_transfer, "Failed to send tokens");
        wbear.transfer(msg.sender, _amount);
    }

    function depositRewards() external payable onlyTreasury {
        if (msg.value > 0) {
            try distributor.deposit{value: msg.value}() {} catch {}
        }
    }

    function forceDepositRewards(
        uint256 _amount
    ) external payable onlyOwnerOrTreasury {
        require(_amount > 0, "Amount must be greater than zero");
        require(XBEAR.balance > 0, "Balance must exceed deposit amount");
        try distributor.deposit{value: _amount}() {} catch {}
    }

    function autoDepositRewards() external payable onlyDepositor {
        if (msg.value > 0) {
            try distributor.deposit{value: msg.value}() {} catch {}
        }
    }

    function toggleDepositor(
        address _depositor
    ) external onlyOwner {
        _depositors[_depositor] = _depositors[_depositor];
    }

    function addDepositor(
        address _depositor
    ) external onlyOwner {
        _depositors[_depositor] = true;
    }

    function removeDepositor(
        address _depositor
    ) external onlyOwner {
        _depositors[_depositor] = false;
    }

    function checkDepositor(
        address _depositor
    ) public view returns (bool) {
        return _depositors[_depositor];
    }

    function disableEmergencySweeping() external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        canEmergencySweep = false;
    }

    function emergencySweepCustom(
        address _to,
        uint256 _amount,
        bool _disable
    ) external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(canEmergencySweep, "Emergency sweeping has been disabled");
        wbear.transfer(_to, _amount);
        if (_disable) {
            hasEmergencySweeped = true;
        }
    }

    function emergencySweepFull(
        address _to
    ) external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(canEmergencySweep, "Emergency sweeping has been disabled");
        wbear.transfer(_to, wbear.balanceOf(XBEAR));
        hasEmergencySweeped = true;
    }

    function togglePaused(
        bool _paused
    ) external onlyOwner {
        paused = _paused;
    }

    function toggleSafetyChecks(
        bool _safetyChecks
    ) external onlyOwner {
        safetyChecks = _safetyChecks;
    }

    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) {
        require(tradingEnabled, "Trading is currently disabled");
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);

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

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

    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 Sweep() external onlyOwner {
        uint256 balance = XBEAR.balance;
        payable(msg.sender).transfer(balance);
    }

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

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

    function changeBEAR(
        address _WBEAR,
        bool _approve
    ) external onlyOwner {
        WBEAR = _WBEAR;
        wbear = IERC20(_WBEAR);
        if (_approve) {
            approve(WBEAR, _totalSupply);
        }
    }

    function changeTREASURY(
        address _TREASURY
    ) external onlyOwnerOrTreasury {
        TREASURY = _TREASURY;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, XBEAR);
        _allowances[XBEAR][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(XBEAR);
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    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 enableTrading() external authorized {
        if (!tradingEnabled) {
            tradingEnabled = true;
        }
    }

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

    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(XBEAR, _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(XBEAR, _uniswapV2Router.WETH());
        }
        pair = _pair;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"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":[],"name":"XBEAR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"addDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoDepositRewards","outputs":[],"stateMutability":"payable","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":[],"name":"canEmergencySweep","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_BASE","type":"address"}],"name":"changeBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WBEAR","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"changeBEAR","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":"_TREASURY","type":"address"}],"name":"changeTREASURY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"changeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"checkDepositor","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"depositRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disableEmergencySweeping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_disable","type":"bool"}],"name":"emergencySweepCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"emergencySweepFull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"forceDepositRewards","outputs":[],"stateMutability":"payable","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":[],"name":"hasEmergencySweeped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"isDepositor","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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"removeDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safetyChecks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"toggleDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"togglePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_safetyChecks","type":"bool"}],"name":"toggleSafetyChecks","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290811790925560048054821690921790915560058054821661dead9081179091556006805483169055600780548316909117905560088054821673d11a3edac587faa6bd870683114f5aa08499f187179081905560098054831673dbc85df60c8e6cf056ff418edca44be368da85d5178155600a80549093166001600160a01b0392909216919091178255620000bf91620005fd565b620000cf90633b9aca00620006e8565b600d556011805460ff191690556016805462ffffff60b01b1961ffff60a01b19909116600160a81b171690553480156200010857600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191683179055600291909155600b8054309084161790819055600c80546001600160a01b0392831690851617905560138054737a250d5630b4cf539739df2c5dacb4c659f2488d9416841790819055845163c45a015560e01b81529451939491169263c45a015592600480840193919291829003018186803b158015620001b757600080fd5b505afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f291906200055d565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c65396946200022b9482169390911691016200058d565b602060405180830381600087803b1580156200024657600080fd5b505af11580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028191906200055d565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060138054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c4648926004808201939291829003018186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200055d565b600460006101000a8154816001600160a01b0302191690836001600160a01b03160217905550803360405162000370906200054f565b6200037d9291906200058d565b604051809103906000f0801580156200039a573d6000803e3d6000fd5b50601580546001600160a01b039283166001600160a01b03199182161791829055601680549091169183169190911790556014548116600090815260106020526040808220805460ff199081166001908117909255600b8054861685528385208054831684179055600554861685529290932080549093161790915554600d546200042a929190911690620004e3565b50600854600d5462000446916001600160a01b031690620004e3565b506200045b81600d54620004e360201b60201c565b50601454600d5462000477916001600160a01b031690620004e3565b50600d54600b80546001600160a01b039081166000908152600e602052604080822085905592549251929091169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004d491620005a7565b60405180910390a35062000720565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200053e908690620005a7565b60405180910390a350600192915050565b6121d18062005b5283390190565b6000602082840312156200056f578081fd5b81516001600160a01b038116811462000586578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b80825b6001808611620005c45750620005f4565b818704821115620005d957620005d96200070a565b80861615620005e757918102915b9490941c938002620005b3565b94509492505050565b60006200058660001960ff8516846000826200061c5750600162000586565b816200062b5750600062000586565b81600181146200064457600281146200064f5762000683565b600191505062000586565b60ff8411156200066357620006636200070a565b6001841b9150848211156200067c576200067c6200070a565b5062000586565b5060208310610133831016604e8410600b8410161715620006bb575081810a83811115620006b557620006b56200070a565b62000586565b620006ca8484846001620005b0565b808604821115620006df57620006df6200070a565b02949350505050565b60008160001904831182151516156200070557620007056200070a565b500290565b634e487b7160e01b600052601160045260246000fd5b61542280620007306000396000f3fe608060405260043610620003f75760003560e01c80638b73e606116200020b578063cdaf6ca3116200011b578063e91f214e11620000af578063f887ea401162000079578063f887ea401462000b12578063f94843d61462000b2a578063fc8acba21462000b42578063fe9fbb801462000b6757620003ff565b8063e91f214e1462000a8b578063f0b37c041462000aa3578063f2fde38b1462000ac8578063f708a64f1462000aed57620003ff565b8063db006a7511620000f1578063db006a7514620009f7578063dd62ed3e1462000a1c578063e0f8e2431462000a41578063e8aaaeaf1462000a6657620003ff565b8063cdaf6ca3146200058e578063d56a965714620009ad578063da541e0914620009d257620003ff565b8063a9059cbb116200019f578063c25597df1162000169578063c25597df1462000941578063c51807051462000966578063cae599cc1462000970578063cd806f43146200098857620003ff565b8063a9059cbb14620008ba578063ad5c464814620008df578063b62496f514620008f7578063b6a5d7de146200091c57620003ff565b80639a7a23d611620001e15780639a7a23d61462000840578063a0712d681462000865578063a51af4c5146200088a578063a8aa1b3114620008a257620003ff565b80638b73e60614620007eb57806391950f30146200081057806395d89b41146200082857620003ff565b80634ada218b11620003075780636c3f6c3d116200029b5780638366e79a11620002655780638366e79a1462000771578063845610ee1462000796578063893d20e814620007bb5780638a8c523c14620007d357620003ff565b80636c3f6c3d14620006ea5780636d92e1a5146200070f5780637088fb7f146200073457806370a08231146200074c57620003ff565b8063571ac8b011620002dd578063571ac8b014620006545780635881f3ef14620006795780635c975abb14620006ad578063649fa85114620006c557620003ff565b80634ada218b14620005ff578063516f0a1b146200061757806352d3f6da146200063c57620003ff565b806326560be7116200038b5780632f54bf6e11620003555780632f54bf6e14620005695780632f70d1ba146200058e578063313ce56714620005b35780634355855a14620005da57620003ff565b806326560be714620004fd57806329df881a14620005225780632b112e4914620005395780632b70b8a6146200055157620003ff565b8063095ea7b311620003cd578063095ea7b31462000482578063152111f714620004a757806318160ddd14620004b157806323b872dd14620004d857620003ff565b806303ba9c6b14620004045780630448f2f7146200042b57806306fdde03146200045b57620003ff565b36620003ff57005b600080fd5b3480156200041157600080fd5b50620004296200042336600462002b11565b62000b8c565b005b3480156200043857600080fd5b506200044362000bf3565b60405162000452919062002d52565b60405180910390f35b3480156200046857600080fd5b506200047362000c03565b60405162000452919062002d5d565b3480156200048f57600080fd5b5062000443620004a136600462002c03565b62000c3a565b6200042962000ca6565b348015620004be57600080fd5b50620004c962000d3f565b60405162000452919062003194565b348015620004e557600080fd5b5062000443620004f736600462002b8c565b62000d45565b3480156200050a57600080fd5b50620004296200051c36600462002c77565b62000e0c565b620004296200053336600462002cb5565b62000e54565b3480156200054657600080fd5b50620004c962000f47565b3480156200055e57600080fd5b506200044362000f98565b3480156200057657600080fd5b50620004436200058836600462002b11565b62000fa8565b3480156200059b57600080fd5b5062000443620005ad36600462002b11565b62000fbc565b348015620005c057600080fd5b50620005cb62000fda565b6040516200045291906200319d565b348015620005e757600080fd5b5062000443620005f936600462002b11565b62000fdf565b3480156200060c57600080fd5b506200044362000ff4565b3480156200062457600080fd5b50620004436200063636600462002b11565b62001004565b3480156200064957600080fd5b506200044362001018565b3480156200066157600080fd5b50620004436200067336600462002b11565b62001028565b3480156200068657600080fd5b506200069e6200069836600462002b11565b6200103e565b60405162000452919062002ce7565b348015620006ba57600080fd5b5062000443620013e4565b348015620006d257600080fd5b5062000429620006e436600462002bd1565b620013f4565b348015620006f757600080fd5b50620004296200070936600462002c77565b62001470565b3480156200071c57600080fd5b50620004436200072e36600462002b11565b620014b8565b3480156200074157600080fd5b5062000429620014d6565b3480156200075957600080fd5b50620004c96200076b36600462002b11565b6200153e565b3480156200077e57600080fd5b50620004436200079036600462002b4f565b62001559565b348015620007a357600080fd5b5062000429620007b536600462002b11565b62001697565b348015620007c857600080fd5b506200069e620016e3565b348015620007e057600080fd5b5062000429620016f2565b348015620007f857600080fd5b50620004296200080a36600462002b11565b62001743565b3480156200081d57600080fd5b50620004436200178e565b3480156200083557600080fd5b506200047362001797565b3480156200084d57600080fd5b50620004296200085f36600462002bd1565b620017b6565b3480156200087257600080fd5b50620004296200088436600462002cb5565b620017ec565b3480156200089757600080fd5b506200069e62001ad3565b348015620008af57600080fd5b506200069e62001ae2565b348015620008c757600080fd5b5062000443620008d936600462002c03565b62001af1565b348015620008ec57600080fd5b506200069e62001b07565b3480156200090457600080fd5b50620004436200091636600462002b11565b62001b16565b3480156200092957600080fd5b50620004296200093b36600462002b11565b62001b2b565b3480156200094e57600080fd5b50620004296200096036600462002b11565b62001b7c565b6200042962001bd0565b3480156200097d57600080fd5b506200042962001bfa565b3480156200099557600080fd5b5062000429620009a736600462002bd1565b62001c60565b348015620009ba57600080fd5b5062000429620009cc36600462002c31565b62001f14565b348015620009df57600080fd5b5062000429620009f136600462002c77565b62002041565b34801562000a0457600080fd5b506200042962000a1636600462002cb5565b62002089565b34801562000a2957600080fd5b50620004c962000a3b36600462002b4f565b62002310565b34801562000a4e57600080fd5b506200042962000a6036600462002b11565b6200233b565b34801562000a7357600080fd5b506200042962000a8536600462002b11565b62002387565b34801562000a9857600080fd5b50620004c96200252a565b34801562000ab057600080fd5b506200042962000ac236600462002b11565b6200253e565b34801562000ad557600080fd5b506200042962000ae736600462002b11565b62002589565b34801562000afa57600080fd5b506200042962000b0c36600462002bd1565b62002625565b34801562000b1f57600080fd5b506200069e6200276a565b34801562000b3757600080fd5b506200069e62002779565b34801562000b4f57600080fd5b506200042962000b6136600462002b11565b62002788565b34801562000b7457600080fd5b506200044362000b8636600462002b11565b620027d6565b62000b973362000fa8565b8062000ba9575062000ba93362001004565b62000bd15760405162461bcd60e51b815260040162000bc89062002fd2565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b601654600160a81b900460ff1681565b60408051808201909152601981527f5374616b656420577261707065642042656172204275636b7300000000000000602082015290565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000c9590869062003194565b60405180910390a350600192915050565b62000cb13362001004565b62000cd05760405162461bcd60e51b815260040162000bc89062002e87565b341562000d3d57601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000d2857600080fd5b505af19350505050801562000d3b575060015b505b565b600d5490565b600d546001600160a01b0384166000908152600f6020908152604080832033845290915281205490911462000df7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f8252838120338252909152919091205462000dd2918490620027f4565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b62000e0484848462002823565b949350505050565b62000e1733620027d6565b62000e365760405162461bcd60e51b815260040162000bc8906200316f565b60168054911515600160a01b0260ff60a01b19909216919091179055565b62000e5f3362000fa8565b8062000e71575062000e713362001004565b62000e905760405162461bcd60e51b815260040162000bc89062002fd2565b6000811162000eb35760405162461bcd60e51b815260040162000bc89062002e1b565b600b546001600160a01b03163162000edf5760405162461bcd60e51b815260040162000bc89062002f90565b601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000f3057600080fd5b505af19350505050801562000f43575060015b5050565b60065460009062000f939062000f66906001600160a01b03166200153e565b60055462000f8c9062000f82906001600160a01b03166200153e565b600d549062002a6d565b9062002a6d565b905090565b601654600160b01b900460ff1681565b6000546001600160a01b0390811691161490565b6001600160a01b031660009081526017602052604090205460ff1690565b600990565b60106020526000908152604090205460ff1681565b601654600160a01b900460ff1681565b6009546001600160a01b0390811691161490565b601654600160c01b900460ff1681565b60006200103882600d5462000c3a565b92915050565b60006200104b3362000fa8565b6200106a5760405162461bcd60e51b815260040162000bc8906200302e565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620010a957600080fd5b505afa158015620010be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e4919062002b30565b6001600160a01b031663e6a43905600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200114257600080fd5b505afa15801562001157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117d919062002b30565b6040518363ffffffff1660e01b81526004016200119c92919062002cfb565b60206040518083038186803b158015620011b557600080fd5b505afa158015620011ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f0919062002b30565b91506001600160a01b0382166200138757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123b57600080fd5b505afa15801562001250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001276919062002b30565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620012d457600080fd5b505afa158015620012e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200130f919062002b30565b6040518363ffffffff1660e01b81526004016200132e92919062002cfb565b602060405180830381600087803b1580156200134957600080fd5b505af11580156200135e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001384919062002b30565b91505b601480546001600160a01b038085166001600160a01b03199283161790925560138054938316939091169290921791829055600d54600b5482166000908152600f6020908152604080832095909416825293909352912055919050565b601654600160b81b900460ff1681565b620013ff3362000fa8565b6200141e5760405162461bcd60e51b815260040162000bc8906200302e565b600880546001600160a01b0384166001600160a01b03199182168117909255600a80549091169091179055801562000f4357600854600d546200146b916001600160a01b03169062000c3a565b505050565b6200147b3362000fa8565b6200149a5760405162461bcd60e51b815260040162000bc8906200302e565b60168054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b031660009081526010602052604090205460ff1690565b620014e13362000fa8565b620015005760405162461bcd60e51b815260040162000bc8906200302e565b600b546040516001600160a01b039091163190339082156108fc029083906000818181858888f1935050505015801562000f43573d6000803e3d6000fd5b6001600160a01b03166000908152600e602052604090205490565b6000620015663362000fa8565b620015855760405162461bcd60e51b815260040162000bc8906200302e565b600b546040516370a0823160e01b81526000916001600160a01b03808716926370a0823192620015ba92169060040162002ce7565b60206040518083038186803b158015620015d357600080fd5b505afa158015620015e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200160e919062002cce565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb9062001641908690859060040162002d39565b602060405180830381600087803b1580156200165c57600080fd5b505af115801562001671573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e04919062002c96565b620016a23362000fa8565b620016c15760405162461bcd60e51b815260040162000bc8906200302e565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b620016fd33620027d6565b6200171c5760405162461bcd60e51b815260040162000bc8906200316f565b601654600160a01b900460ff1662000d3d576016805460ff60a01b1916600160a01b179055565b6200174e3362000fa8565b6200176d5760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff19169055565b60115460ff1681565b6040805180820190915260058152643c2122a0a960d91b602082015290565b620017c13362000fa8565b620017e05760405162461bcd60e51b815260040162000bc8906200302e565b62000f43828262002a7b565b600280541415620018115760405162461bcd60e51b815260040162000bc890620030ca565b60028055601654600160b01b900460ff1615620018425760405162461bcd60e51b815260040162000bc89062002f18565b601654600160b81b900460ff16156200186f5760405162461bcd60e51b815260040162000bc89062003101565b601654600160c01b900460ff1615620019fc57600a546040516370a0823160e01b815282916001600160a01b0316906370a0823190620018b490339060040162002ce7565b60206040518083038186803b158015620018cd57600080fd5b505afa158015620018e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001908919062002cce565b1015620019295760405162461bcd60e51b815260040162000bc8906200304e565b600a54600b54604051636eb1769f60e11b815283926001600160a01b039081169263dd62ed3e9262001962923392169060040162002cfb565b60206040518083038186803b1580156200197b57600080fd5b505afa15801562001990573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b6919062002cce565b1015620019d75760405162461bcd60e51b815260040162000bc89062002f59565b80600d541015620019fc5760405162461bcd60e51b815260040162000bc89062002eaa565b600a54600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd9262001a389233921690879060040162002d15565b602060405180830381600087803b15801562001a5357600080fd5b505af115801562001a68573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a8e919062002c96565b90508062001ab05760405162461bcd60e51b815260040162000bc89062002ee1565b600b5462001ac9906001600160a01b0316338462002823565b5050600160025550565b6016546001600160a01b031681565b6014546001600160a01b031681565b600062001b0033848462002823565b9392505050565b6004546001600160a01b031681565b60126020526000908152604090205460ff1681565b62001b363362000fa8565b62001b555760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b62001b873362000fa8565b62001ba65760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff8116151560ff19909116179055565b62001bdb3362000fbc565b62000cd05760405162461bcd60e51b815260040162000bc89062002df7565b62001c053362000fa8565b62001c245760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff161562001c515760405162461bcd60e51b815260040162000bc89062002f18565b6016805460ff60a81b19169055565b62001c6b3362000fa8565b62001c8a5760405162461bcd60e51b815260040162000bc8906200302e565b601380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b15801562001ce757600080fd5b505afa15801562001cfc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d22919062002b30565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c653969462001d5b94821693909116910162002cfb565b602060405180830381600087803b15801562001d7657600080fd5b505af115801562001d8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001db1919062002b30565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060135490951683529390529190912055801562001ea857601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001e4c57600080fd5b505afa15801562001e61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e87919062002b30565b600480546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001eb89062002b03565b62001ec592919062002cfb565b604051809103906000f08015801562001ee2573d6000803e3d6000fd5b50601580546001600160a01b03199081166001600160a01b039384161791829055601680549290931691161790555050565b62001f1f3362000fa8565b62001f3e5760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff161562001f6b5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160a81b900460ff1662001f975760405162461bcd60e51b815260040162000bc89062002db3565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001fcb908690869060040162002d39565b602060405180830381600087803b15801562001fe657600080fd5b505af115801562001ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002021919062002c96565b5080156200146b576016805460ff60b01b1916600160b01b179055505050565b6200204c3362000fa8565b6200206b5760405162461bcd60e51b815260040162000bc8906200302e565b60168054911515600160b81b0260ff60b81b19909216919091179055565b600280541415620020ae5760405162461bcd60e51b815260040162000bc890620030ca565b60028055601654600160b01b900460ff1615620020df5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160b81b900460ff16156200210c5760405162461bcd60e51b815260040162000bc89062003101565b601654600160c01b900460ff16156200219957336000908152600e6020526040902054811115620021515760405162461bcd60e51b815260040162000bc89062002e50565b336000908152600f60209081526040808320600b546001600160a01b03168452909152902054811115620021995760405162461bcd60e51b815260040162000bc89062002f59565b600a54600b546040516370a0823160e01b815283926001600160a01b03908116926370a0823192620021d2929091169060040162002ce7565b60206040518083038186803b158015620021eb57600080fd5b505afa15801562002200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002226919062002cce565b1015620022475760405162461bcd60e51b815260040162000bc89062003085565b600b54600090620022649033906001600160a01b03168462002823565b905080620022865760405162461bcd60e51b815260040162000bc89062002fff565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90620022ba903390869060040162002d39565b602060405180830381600087803b158015620022d557600080fd5b505af1158015620022ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac9919062002c96565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b620023463362000fa8565b620023655760405162461bcd60e51b815260040162000bc8906200302e565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b620023923362000fa8565b620023b15760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff1615620023de5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160a81b900460ff166200240a5760405162461bcd60e51b815260040162000bc89062002db3565b600a54600b546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92859285926370a08231926200244a9291169060040162002ce7565b60206040518083038186803b1580156200246357600080fd5b505afa15801562002478573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200249e919062002cce565b6040518363ffffffff1660e01b8152600401620024bd92919062002d39565b602060405180830381600087803b158015620024d857600080fd5b505af1158015620024ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002513919062002c96565b50506016805460ff60b01b1916600160b01b179055565b6fffffffffffffffffffffffffffffffff81565b620025493362000fa8565b620025685760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b620025943362000fa8565b620025b35760405162461bcd60e51b815260040162000bc8906200302e565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906200261a90839062002ce7565b60405180910390a150565b6200263033620027d6565b6200264f5760405162461bcd60e51b815260040162000bc8906200316f565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155620026ec57601554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca9690620026b290859060009060040162002d39565b600060405180830381600087803b158015620026cd57600080fd5b505af1158015620026e2573d6000803e3d6000fd5b5050505062000f43565b6015546001600160a01b038381166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200273291869160040162002d39565b600060405180830381600087803b1580156200274d57600080fd5b505af115801562002762573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600b546001600160a01b031681565b620027933362000fa8565b620027b25760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156200281b5760405162461bcd60e51b815260040162000bc8919062002d5d565b505050900390565b601654600090600160a01b900460ff16620028525760405162461bcd60e51b815260040162000bc89062003138565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600e9091529190912054620028a6918490620027f4565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054620028d7908362002af5565b6001600160a01b038085166000908152600e602090815260408083209490945591871681526010909152205460ff1662002980576015546001600160a01b038581166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200295191889160040162002d39565b600060405180830381600087803b1580156200296c57600080fd5b505af19250505080156200297e575060015b505b6001600160a01b03831660009081526010602052604090205460ff1662002a16576015546001600160a01b038481166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca9691620029e791879160040162002d39565b600060405180830381600087803b15801562002a0257600080fd5b505af192505050801562002a14575060015b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162002a5b919062003194565b60405180910390a35060019392505050565b600062001b008284620031c6565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915562002acd576001600160a01b0382166000908152601060205260409020805460ff191660011790555b8062000f4357506001600160a01b03166000908152601060205260409020805460ff19169055565b600062001b008284620031ab565b6121d1806200321c83390190565b60006020828403121562002b23578081fd5b813562001b0081620031f6565b60006020828403121562002b42578081fd5b815162001b0081620031f6565b6000806040838503121562002b62578081fd5b823562002b6f81620031f6565b9150602083013562002b8181620031f6565b809150509250929050565b60008060006060848603121562002ba1578081fd5b833562002bae81620031f6565b9250602084013562002bc081620031f6565b929592945050506040919091013590565b6000806040838503121562002be4578182fd5b823562002bf181620031f6565b9150602083013562002b81816200320c565b6000806040838503121562002c16578182fd5b823562002c2381620031f6565b946020939093013593505050565b60008060006060848603121562002c46578283fd5b833562002c5381620031f6565b925060208401359150604084013562002c6c816200320c565b809150509250925092565b60006020828403121562002c89578081fd5b813562001b00816200320c565b60006020828403121562002ca8578081fd5b815162001b00816200320c565b60006020828403121562002cc7578081fd5b5035919050565b60006020828403121562002ce0578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101562002d8b5785810183015185820160400152820162002d6d565b8181111562002d9d5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526024908201527f456d657267656e6379207377656570696e6720686173206265656e2064697361604082015263189b195960e21b606082015260800190565b6020808252600a908201526910a222a827a9a4aa27a960b11b604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b6020808252601d908201527f596f75722078424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526009908201526821545245415355525960b81b604082015260600190565b6020808252601d908201527f54686520616d6f756e7420657863656564732074686520737570706c79000000604082015260600190565b60208082526018908201527f4661696c656420746f207265636569766520746f6b656e730000000000000000604082015260600190565b60208082526021908201527f5468697320636f6e7472616374206973206e6f206c6f6e67657220696e2075736040820152606560f81b606082015260800190565b6020808252601a908201527f784245415220616c6c6f77616e636520697320746f6f206c6f77000000000000604082015260600190565b60208082526022908201527f42616c616e6365206d75737420657863656564206465706f73697420616d6f756040820152611b9d60f21b606082015260800190565b602080825260139082015272214f574e45522026262021545245415355525960681b604082015260600190565b6020808252601590820152744661696c656420746f2073656e6420746f6b656e7360581b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f596f75722077424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526025908201527f54686520636f6e74726163742077424541522062616c616e636520697320746f6040820152646f206c6f7760d81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5468697320636f6e747261637420697320706175736564000000000000000000604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115620031c157620031c1620031e0565b500190565b600082821015620031db57620031db620031e0565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000d3b57600080fd5b801515811462000d3b57600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea26469706673582212201fc4ba1f1b55595b88e315aba167e3b98af16d0ca414edd7a3bd738f2c4c328c64736f6c63430008000033a26469706673582212205064345694c52e6fc49023cd1d86262c3b2d344a68c44a25f02139a8a647d2ba64736f6c634300080000336080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea26469706673582212201fc4ba1f1b55595b88e315aba167e3b98af16d0ca414edd7a3bd738f2c4c328c64736f6c63430008000033

Deployed Bytecode

0x608060405260043610620003f75760003560e01c80638b73e606116200020b578063cdaf6ca3116200011b578063e91f214e11620000af578063f887ea401162000079578063f887ea401462000b12578063f94843d61462000b2a578063fc8acba21462000b42578063fe9fbb801462000b6757620003ff565b8063e91f214e1462000a8b578063f0b37c041462000aa3578063f2fde38b1462000ac8578063f708a64f1462000aed57620003ff565b8063db006a7511620000f1578063db006a7514620009f7578063dd62ed3e1462000a1c578063e0f8e2431462000a41578063e8aaaeaf1462000a6657620003ff565b8063cdaf6ca3146200058e578063d56a965714620009ad578063da541e0914620009d257620003ff565b8063a9059cbb116200019f578063c25597df1162000169578063c25597df1462000941578063c51807051462000966578063cae599cc1462000970578063cd806f43146200098857620003ff565b8063a9059cbb14620008ba578063ad5c464814620008df578063b62496f514620008f7578063b6a5d7de146200091c57620003ff565b80639a7a23d611620001e15780639a7a23d61462000840578063a0712d681462000865578063a51af4c5146200088a578063a8aa1b3114620008a257620003ff565b80638b73e60614620007eb57806391950f30146200081057806395d89b41146200082857620003ff565b80634ada218b11620003075780636c3f6c3d116200029b5780638366e79a11620002655780638366e79a1462000771578063845610ee1462000796578063893d20e814620007bb5780638a8c523c14620007d357620003ff565b80636c3f6c3d14620006ea5780636d92e1a5146200070f5780637088fb7f146200073457806370a08231146200074c57620003ff565b8063571ac8b011620002dd578063571ac8b014620006545780635881f3ef14620006795780635c975abb14620006ad578063649fa85114620006c557620003ff565b80634ada218b14620005ff578063516f0a1b146200061757806352d3f6da146200063c57620003ff565b806326560be7116200038b5780632f54bf6e11620003555780632f54bf6e14620005695780632f70d1ba146200058e578063313ce56714620005b35780634355855a14620005da57620003ff565b806326560be714620004fd57806329df881a14620005225780632b112e4914620005395780632b70b8a6146200055157620003ff565b8063095ea7b311620003cd578063095ea7b31462000482578063152111f714620004a757806318160ddd14620004b157806323b872dd14620004d857620003ff565b806303ba9c6b14620004045780630448f2f7146200042b57806306fdde03146200045b57620003ff565b36620003ff57005b600080fd5b3480156200041157600080fd5b50620004296200042336600462002b11565b62000b8c565b005b3480156200043857600080fd5b506200044362000bf3565b60405162000452919062002d52565b60405180910390f35b3480156200046857600080fd5b506200047362000c03565b60405162000452919062002d5d565b3480156200048f57600080fd5b5062000443620004a136600462002c03565b62000c3a565b6200042962000ca6565b348015620004be57600080fd5b50620004c962000d3f565b60405162000452919062003194565b348015620004e557600080fd5b5062000443620004f736600462002b8c565b62000d45565b3480156200050a57600080fd5b50620004296200051c36600462002c77565b62000e0c565b620004296200053336600462002cb5565b62000e54565b3480156200054657600080fd5b50620004c962000f47565b3480156200055e57600080fd5b506200044362000f98565b3480156200057657600080fd5b50620004436200058836600462002b11565b62000fa8565b3480156200059b57600080fd5b5062000443620005ad36600462002b11565b62000fbc565b348015620005c057600080fd5b50620005cb62000fda565b6040516200045291906200319d565b348015620005e757600080fd5b5062000443620005f936600462002b11565b62000fdf565b3480156200060c57600080fd5b506200044362000ff4565b3480156200062457600080fd5b50620004436200063636600462002b11565b62001004565b3480156200064957600080fd5b506200044362001018565b3480156200066157600080fd5b50620004436200067336600462002b11565b62001028565b3480156200068657600080fd5b506200069e6200069836600462002b11565b6200103e565b60405162000452919062002ce7565b348015620006ba57600080fd5b5062000443620013e4565b348015620006d257600080fd5b5062000429620006e436600462002bd1565b620013f4565b348015620006f757600080fd5b50620004296200070936600462002c77565b62001470565b3480156200071c57600080fd5b50620004436200072e36600462002b11565b620014b8565b3480156200074157600080fd5b5062000429620014d6565b3480156200075957600080fd5b50620004c96200076b36600462002b11565b6200153e565b3480156200077e57600080fd5b50620004436200079036600462002b4f565b62001559565b348015620007a357600080fd5b5062000429620007b536600462002b11565b62001697565b348015620007c857600080fd5b506200069e620016e3565b348015620007e057600080fd5b5062000429620016f2565b348015620007f857600080fd5b50620004296200080a36600462002b11565b62001743565b3480156200081d57600080fd5b50620004436200178e565b3480156200083557600080fd5b506200047362001797565b3480156200084d57600080fd5b50620004296200085f36600462002bd1565b620017b6565b3480156200087257600080fd5b50620004296200088436600462002cb5565b620017ec565b3480156200089757600080fd5b506200069e62001ad3565b348015620008af57600080fd5b506200069e62001ae2565b348015620008c757600080fd5b5062000443620008d936600462002c03565b62001af1565b348015620008ec57600080fd5b506200069e62001b07565b3480156200090457600080fd5b50620004436200091636600462002b11565b62001b16565b3480156200092957600080fd5b50620004296200093b36600462002b11565b62001b2b565b3480156200094e57600080fd5b50620004296200096036600462002b11565b62001b7c565b6200042962001bd0565b3480156200097d57600080fd5b506200042962001bfa565b3480156200099557600080fd5b5062000429620009a736600462002bd1565b62001c60565b348015620009ba57600080fd5b5062000429620009cc36600462002c31565b62001f14565b348015620009df57600080fd5b5062000429620009f136600462002c77565b62002041565b34801562000a0457600080fd5b506200042962000a1636600462002cb5565b62002089565b34801562000a2957600080fd5b50620004c962000a3b36600462002b4f565b62002310565b34801562000a4e57600080fd5b506200042962000a6036600462002b11565b6200233b565b34801562000a7357600080fd5b506200042962000a8536600462002b11565b62002387565b34801562000a9857600080fd5b50620004c96200252a565b34801562000ab057600080fd5b506200042962000ac236600462002b11565b6200253e565b34801562000ad557600080fd5b506200042962000ae736600462002b11565b62002589565b34801562000afa57600080fd5b506200042962000b0c36600462002bd1565b62002625565b34801562000b1f57600080fd5b506200069e6200276a565b34801562000b3757600080fd5b506200069e62002779565b34801562000b4f57600080fd5b506200042962000b6136600462002b11565b62002788565b34801562000b7457600080fd5b506200044362000b8636600462002b11565b620027d6565b62000b973362000fa8565b8062000ba9575062000ba93362001004565b62000bd15760405162461bcd60e51b815260040162000bc89062002fd2565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b601654600160a81b900460ff1681565b60408051808201909152601981527f5374616b656420577261707065642042656172204275636b7300000000000000602082015290565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000c9590869062003194565b60405180910390a350600192915050565b62000cb13362001004565b62000cd05760405162461bcd60e51b815260040162000bc89062002e87565b341562000d3d57601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000d2857600080fd5b505af19350505050801562000d3b575060015b505b565b600d5490565b600d546001600160a01b0384166000908152600f6020908152604080832033845290915281205490911462000df7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f8252838120338252909152919091205462000dd2918490620027f4565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b62000e0484848462002823565b949350505050565b62000e1733620027d6565b62000e365760405162461bcd60e51b815260040162000bc8906200316f565b60168054911515600160a01b0260ff60a01b19909216919091179055565b62000e5f3362000fa8565b8062000e71575062000e713362001004565b62000e905760405162461bcd60e51b815260040162000bc89062002fd2565b6000811162000eb35760405162461bcd60e51b815260040162000bc89062002e1b565b600b546001600160a01b03163162000edf5760405162461bcd60e51b815260040162000bc89062002f90565b601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000f3057600080fd5b505af19350505050801562000f43575060015b5050565b60065460009062000f939062000f66906001600160a01b03166200153e565b60055462000f8c9062000f82906001600160a01b03166200153e565b600d549062002a6d565b9062002a6d565b905090565b601654600160b01b900460ff1681565b6000546001600160a01b0390811691161490565b6001600160a01b031660009081526017602052604090205460ff1690565b600990565b60106020526000908152604090205460ff1681565b601654600160a01b900460ff1681565b6009546001600160a01b0390811691161490565b601654600160c01b900460ff1681565b60006200103882600d5462000c3a565b92915050565b60006200104b3362000fa8565b6200106a5760405162461bcd60e51b815260040162000bc8906200302e565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620010a957600080fd5b505afa158015620010be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010e4919062002b30565b6001600160a01b031663e6a43905600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200114257600080fd5b505afa15801562001157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117d919062002b30565b6040518363ffffffff1660e01b81526004016200119c92919062002cfb565b60206040518083038186803b158015620011b557600080fd5b505afa158015620011ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f0919062002b30565b91506001600160a01b0382166200138757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123b57600080fd5b505afa15801562001250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001276919062002b30565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620012d457600080fd5b505afa158015620012e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200130f919062002b30565b6040518363ffffffff1660e01b81526004016200132e92919062002cfb565b602060405180830381600087803b1580156200134957600080fd5b505af11580156200135e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001384919062002b30565b91505b601480546001600160a01b038085166001600160a01b03199283161790925560138054938316939091169290921791829055600d54600b5482166000908152600f6020908152604080832095909416825293909352912055919050565b601654600160b81b900460ff1681565b620013ff3362000fa8565b6200141e5760405162461bcd60e51b815260040162000bc8906200302e565b600880546001600160a01b0384166001600160a01b03199182168117909255600a80549091169091179055801562000f4357600854600d546200146b916001600160a01b03169062000c3a565b505050565b6200147b3362000fa8565b6200149a5760405162461bcd60e51b815260040162000bc8906200302e565b60168054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b031660009081526010602052604090205460ff1690565b620014e13362000fa8565b620015005760405162461bcd60e51b815260040162000bc8906200302e565b600b546040516001600160a01b039091163190339082156108fc029083906000818181858888f1935050505015801562000f43573d6000803e3d6000fd5b6001600160a01b03166000908152600e602052604090205490565b6000620015663362000fa8565b620015855760405162461bcd60e51b815260040162000bc8906200302e565b600b546040516370a0823160e01b81526000916001600160a01b03808716926370a0823192620015ba92169060040162002ce7565b60206040518083038186803b158015620015d357600080fd5b505afa158015620015e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200160e919062002cce565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb9062001641908690859060040162002d39565b602060405180830381600087803b1580156200165c57600080fd5b505af115801562001671573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e04919062002c96565b620016a23362000fa8565b620016c15760405162461bcd60e51b815260040162000bc8906200302e565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b620016fd33620027d6565b6200171c5760405162461bcd60e51b815260040162000bc8906200316f565b601654600160a01b900460ff1662000d3d576016805460ff60a01b1916600160a01b179055565b6200174e3362000fa8565b6200176d5760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff19169055565b60115460ff1681565b6040805180820190915260058152643c2122a0a960d91b602082015290565b620017c13362000fa8565b620017e05760405162461bcd60e51b815260040162000bc8906200302e565b62000f43828262002a7b565b600280541415620018115760405162461bcd60e51b815260040162000bc890620030ca565b60028055601654600160b01b900460ff1615620018425760405162461bcd60e51b815260040162000bc89062002f18565b601654600160b81b900460ff16156200186f5760405162461bcd60e51b815260040162000bc89062003101565b601654600160c01b900460ff1615620019fc57600a546040516370a0823160e01b815282916001600160a01b0316906370a0823190620018b490339060040162002ce7565b60206040518083038186803b158015620018cd57600080fd5b505afa158015620018e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001908919062002cce565b1015620019295760405162461bcd60e51b815260040162000bc8906200304e565b600a54600b54604051636eb1769f60e11b815283926001600160a01b039081169263dd62ed3e9262001962923392169060040162002cfb565b60206040518083038186803b1580156200197b57600080fd5b505afa15801562001990573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019b6919062002cce565b1015620019d75760405162461bcd60e51b815260040162000bc89062002f59565b80600d541015620019fc5760405162461bcd60e51b815260040162000bc89062002eaa565b600a54600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd9262001a389233921690879060040162002d15565b602060405180830381600087803b15801562001a5357600080fd5b505af115801562001a68573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a8e919062002c96565b90508062001ab05760405162461bcd60e51b815260040162000bc89062002ee1565b600b5462001ac9906001600160a01b0316338462002823565b5050600160025550565b6016546001600160a01b031681565b6014546001600160a01b031681565b600062001b0033848462002823565b9392505050565b6004546001600160a01b031681565b60126020526000908152604090205460ff1681565b62001b363362000fa8565b62001b555760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b62001b873362000fa8565b62001ba65760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff8116151560ff19909116179055565b62001bdb3362000fbc565b62000cd05760405162461bcd60e51b815260040162000bc89062002df7565b62001c053362000fa8565b62001c245760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff161562001c515760405162461bcd60e51b815260040162000bc89062002f18565b6016805460ff60a81b19169055565b62001c6b3362000fa8565b62001c8a5760405162461bcd60e51b815260040162000bc8906200302e565b601380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b15801562001ce757600080fd5b505afa15801562001cfc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d22919062002b30565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c653969462001d5b94821693909116910162002cfb565b602060405180830381600087803b15801562001d7657600080fd5b505af115801562001d8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001db1919062002b30565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060135490951683529390529190912055801562001ea857601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001e4c57600080fd5b505afa15801562001e61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e87919062002b30565b600480546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001eb89062002b03565b62001ec592919062002cfb565b604051809103906000f08015801562001ee2573d6000803e3d6000fd5b50601580546001600160a01b03199081166001600160a01b039384161791829055601680549290931691161790555050565b62001f1f3362000fa8565b62001f3e5760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff161562001f6b5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160a81b900460ff1662001f975760405162461bcd60e51b815260040162000bc89062002db3565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001fcb908690869060040162002d39565b602060405180830381600087803b15801562001fe657600080fd5b505af115801562001ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002021919062002c96565b5080156200146b576016805460ff60b01b1916600160b01b179055505050565b6200204c3362000fa8565b6200206b5760405162461bcd60e51b815260040162000bc8906200302e565b60168054911515600160b81b0260ff60b81b19909216919091179055565b600280541415620020ae5760405162461bcd60e51b815260040162000bc890620030ca565b60028055601654600160b01b900460ff1615620020df5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160b81b900460ff16156200210c5760405162461bcd60e51b815260040162000bc89062003101565b601654600160c01b900460ff16156200219957336000908152600e6020526040902054811115620021515760405162461bcd60e51b815260040162000bc89062002e50565b336000908152600f60209081526040808320600b546001600160a01b03168452909152902054811115620021995760405162461bcd60e51b815260040162000bc89062002f59565b600a54600b546040516370a0823160e01b815283926001600160a01b03908116926370a0823192620021d2929091169060040162002ce7565b60206040518083038186803b158015620021eb57600080fd5b505afa15801562002200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002226919062002cce565b1015620022475760405162461bcd60e51b815260040162000bc89062003085565b600b54600090620022649033906001600160a01b03168462002823565b905080620022865760405162461bcd60e51b815260040162000bc89062002fff565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90620022ba903390869060040162002d39565b602060405180830381600087803b158015620022d557600080fd5b505af1158015620022ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac9919062002c96565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b620023463362000fa8565b620023655760405162461bcd60e51b815260040162000bc8906200302e565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b620023923362000fa8565b620023b15760405162461bcd60e51b815260040162000bc8906200302e565b601654600160b01b900460ff1615620023de5760405162461bcd60e51b815260040162000bc89062002f18565b601654600160a81b900460ff166200240a5760405162461bcd60e51b815260040162000bc89062002db3565b600a54600b546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92859285926370a08231926200244a9291169060040162002ce7565b60206040518083038186803b1580156200246357600080fd5b505afa15801562002478573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200249e919062002cce565b6040518363ffffffff1660e01b8152600401620024bd92919062002d39565b602060405180830381600087803b158015620024d857600080fd5b505af1158015620024ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002513919062002c96565b50506016805460ff60b01b1916600160b01b179055565b6fffffffffffffffffffffffffffffffff81565b620025493362000fa8565b620025685760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b620025943362000fa8565b620025b35760405162461bcd60e51b815260040162000bc8906200302e565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906200261a90839062002ce7565b60405180910390a150565b6200263033620027d6565b6200264f5760405162461bcd60e51b815260040162000bc8906200316f565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155620026ec57601554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca9690620026b290859060009060040162002d39565b600060405180830381600087803b158015620026cd57600080fd5b505af1158015620026e2573d6000803e3d6000fd5b5050505062000f43565b6015546001600160a01b038381166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200273291869160040162002d39565b600060405180830381600087803b1580156200274d57600080fd5b505af115801562002762573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600b546001600160a01b031681565b620027933362000fa8565b620027b25760405162461bcd60e51b815260040162000bc8906200302e565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156200281b5760405162461bcd60e51b815260040162000bc8919062002d5d565b505050900390565b601654600090600160a01b900460ff16620028525760405162461bcd60e51b815260040162000bc89062003138565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600e9091529190912054620028a6918490620027f4565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054620028d7908362002af5565b6001600160a01b038085166000908152600e602090815260408083209490945591871681526010909152205460ff1662002980576015546001600160a01b038581166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200295191889160040162002d39565b600060405180830381600087803b1580156200296c57600080fd5b505af19250505080156200297e575060015b505b6001600160a01b03831660009081526010602052604090205460ff1662002a16576015546001600160a01b038481166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca9691620029e791879160040162002d39565b600060405180830381600087803b15801562002a0257600080fd5b505af192505050801562002a14575060015b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162002a5b919062003194565b60405180910390a35060019392505050565b600062001b008284620031c6565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915562002acd576001600160a01b0382166000908152601060205260409020805460ff191660011790555b8062000f4357506001600160a01b03166000908152601060205260409020805460ff19169055565b600062001b008284620031ab565b6121d1806200321c83390190565b60006020828403121562002b23578081fd5b813562001b0081620031f6565b60006020828403121562002b42578081fd5b815162001b0081620031f6565b6000806040838503121562002b62578081fd5b823562002b6f81620031f6565b9150602083013562002b8181620031f6565b809150509250929050565b60008060006060848603121562002ba1578081fd5b833562002bae81620031f6565b9250602084013562002bc081620031f6565b929592945050506040919091013590565b6000806040838503121562002be4578182fd5b823562002bf181620031f6565b9150602083013562002b81816200320c565b6000806040838503121562002c16578182fd5b823562002c2381620031f6565b946020939093013593505050565b60008060006060848603121562002c46578283fd5b833562002c5381620031f6565b925060208401359150604084013562002c6c816200320c565b809150509250925092565b60006020828403121562002c89578081fd5b813562001b00816200320c565b60006020828403121562002ca8578081fd5b815162001b00816200320c565b60006020828403121562002cc7578081fd5b5035919050565b60006020828403121562002ce0578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101562002d8b5785810183015185820160400152820162002d6d565b8181111562002d9d5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526024908201527f456d657267656e6379207377656570696e6720686173206265656e2064697361604082015263189b195960e21b606082015260800190565b6020808252600a908201526910a222a827a9a4aa27a960b11b604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b6020808252601d908201527f596f75722078424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526009908201526821545245415355525960b81b604082015260600190565b6020808252601d908201527f54686520616d6f756e7420657863656564732074686520737570706c79000000604082015260600190565b60208082526018908201527f4661696c656420746f207265636569766520746f6b656e730000000000000000604082015260600190565b60208082526021908201527f5468697320636f6e7472616374206973206e6f206c6f6e67657220696e2075736040820152606560f81b606082015260800190565b6020808252601a908201527f784245415220616c6c6f77616e636520697320746f6f206c6f77000000000000604082015260600190565b60208082526022908201527f42616c616e6365206d75737420657863656564206465706f73697420616d6f756040820152611b9d60f21b606082015260800190565b602080825260139082015272214f574e45522026262021545245415355525960681b604082015260600190565b6020808252601590820152744661696c656420746f2073656e6420746f6b656e7360581b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f596f75722077424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526025908201527f54686520636f6e74726163742077424541522062616c616e636520697320746f6040820152646f206c6f7760d81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5468697320636f6e747261637420697320706175736564000000000000000000604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b60ff91909116815260200190565b60008219821115620031c157620031c1620031e0565b500190565b600082821015620031db57620031db620031e0565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000d3b57600080fd5b801515811462000d3b57600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea26469706673582212201fc4ba1f1b55595b88e315aba167e3b98af16d0ca414edd7a3bd738f2c4c328c64736f6c63430008000033a26469706673582212205064345694c52e6fc49023cd1d86262c3b2d344a68c44a25f02139a8a647d2ba64736f6c63430008000033

Deployed Bytecode Sourcemap

17712:12803:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28177:127;;;;;;;;;;-1:-1:-1;28177:127:0;;;;;:::i;:::-;;:::i;:::-;;19085:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24946:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25368:241::-;;;;;;;;;;-1:-1:-1;25368:241:0;;;;;:::i;:::-;;:::i;22191:174::-;;;:::i;24676:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25947:401::-;;;;;;;;;;-1:-1:-1;25947:401:0;;;;;:::i;:::-;;:::i;29689:118::-;;;;;;;;;;-1:-1:-1;29689:118:0;;;;;:::i;:::-;;:::i;22373:312::-;;;;;;:::i;:::-;;:::i;29815:142::-;;;;;;;;;;;;;:::i;19128:39::-;;;;;;;;;;;;;:::i;4580:103::-;;;;;;;;;;-1:-1:-1;4580:103:0;;;;;:::i;:::-;;:::i;20317:111::-;;;;;;;;;;-1:-1:-1;20317:111:0;;;;;:::i;:::-;;:::i;24770:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18727:49::-;;;;;;;;;;-1:-1:-1;18727:49:0;;;;;:::i;:::-;;:::i;19042:34::-;;;;;;;;;;;;;:::i;20200:109::-;;;;;;;;;;-1:-1:-1;20200:109:0;;;;;:::i;:::-;;:::i;19207:32::-;;;;;;;;;;;;;:::i;25617:133::-;;;;;;;;;;-1:-1:-1;25617:133:0;;;;;:::i;:::-;;:::i;29965:547::-;;;;;;;;;;-1:-1:-1;29965:547:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19174:26::-;;;;;;;;;;;;;:::i;27929:240::-;;;;;;;;;;-1:-1:-1;27929:240:0;;;;;:::i;:::-;;:::i;24501:130::-;;;;;;;;;;-1:-1:-1;24501:130:0;;;;;:::i;:::-;;:::i;29401:140::-;;;;;;;;;;-1:-1:-1;29401:140:0;;;;;:::i;:::-;;:::i;27569:134::-;;;;;;;;;;;;;:::i;25116:105::-;;;;;;;;;;-1:-1:-1;25116:105:0;;;;;:::i;:::-;;:::i;28804:266::-;;;;;;;;;;-1:-1:-1;28804:266:0;;;;;:::i;:::-;;:::i;27711:101::-;;;;;;;;;;-1:-1:-1;27711:101:0;;;;;:::i;:::-;;:::i;25032:78::-;;;;;;;;;;;;;:::i;29549:132::-;;;;;;;;;;;;;:::i;23170:130::-;;;;;;;;;;-1:-1:-1;23170:130:0;;;;;:::i;:::-;;:::i;18785:42::-;;;;;;;;;;;;;:::i;24856:84::-;;;;;;;;;;;;;:::i;27067:167::-;;;;;;;;;;-1:-1:-1;27067:167:0;;;;;:::i;:::-;;:::i;20773:705::-;;;;;;;;;;-1:-1:-1;20773:705:0;;;;;:::i;:::-;;:::i;19000:33::-;;;;;;;;;;;;;:::i;18934:19::-;;;;;;;;;;;;;:::i;25758:181::-;;;;;;;;;;-1:-1:-1;25758:181:0;;;;;:::i;:::-;;:::i;17921:64::-;;;;;;;;;;;;;:::i;18836:58::-;;;;;;;;;;-1:-1:-1;18836:58:0;;;;;:::i;:::-;;:::i;4253:94::-;;;;;;;;;;-1:-1:-1;4253:94:0;;;;;:::i;:::-;;:::i;22880:148::-;;;;;;;;;;-1:-1:-1;22880:148:0;;;;;:::i;:::-;;:::i;22693:179::-;;;:::i;23452:176::-;;;;;;;;;;;;;:::i;28312:484::-;;;;;;;;;;-1:-1:-1;28312:484:0;;;;;:::i;:::-;;:::i;23636:406::-;;;;;;;;;;-1:-1:-1;23636:406:0;;;;;:::i;:::-;;:::i;24387:106::-;;;;;;;;;;-1:-1:-1;24387:106:0;;;;;:::i;:::-;;:::i;21486:697::-;;;;;;;;;;-1:-1:-1;21486:697:0;;;;;:::i;:::-;;:::i;25227:133::-;;;;;;;;;;-1:-1:-1;25227:133:0;;;;;:::i;:::-;;:::i;27820:101::-;;;;;;;;;;-1:-1:-1;27820:101:0;;;;;:::i;:::-;;:::i;24050:329::-;;;;;;;;;;-1:-1:-1;24050:329:0;;;;;:::i;:::-;;:::i;17802:48::-;;;;;;;;;;;;;:::i;4423:97::-;;;;;;;;;;-1:-1:-1;4423:97:0;;;;;:::i;:::-;;:::i;4980:173::-;;;;;;;;;;-1:-1:-1;4980:173:0;;;;;:::i;:::-;;:::i;29078:315::-;;;;;;;;;;-1:-1:-1;29078:315:0;;;;;:::i;:::-;;:::i;18903:24::-;;;;;;;;;;;;;:::i;18367:20::-;;;;;;;;;;;;;:::i;23036:126::-;;;;;;;;;;-1:-1:-1;23036:126:0;;;;;:::i;:::-;;:::i;4754:107::-;;;;;;;;;;-1:-1:-1;4754:107:0;;;;;:::i;:::-;;:::i;28177:127::-;20584:19;20592:10;20584:7;:19::i;:::-;:45;;;;20607:22;20618:10;20607;:22::i;:::-;20576:77;;;;-1:-1:-1;;;20576:77:0;;;;;;;:::i;:::-;;;;;;;;;28276:8:::1;:20:::0;;-1:-1:-1;;;;;;28276:20:0::1;-1:-1:-1::0;;;;;28276:20:0;;;::::1;::::0;;;::::1;::::0;;28177:127::o;19085:36::-;;;-1:-1:-1;;;19085:36:0;;;;;:::o;24946:80::-;25018:5;;;;;;;;;;;;;;;;;24946:80;:::o;25368:241::-;25497:10;25468:4;25485:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25485:32:0;;;;;;;;;;:41;;;25542:37;25468:4;;25485:32;;25542:37;;;;25520:6;;25542:37;:::i;:::-;;;;;;;;-1:-1:-1;25597:4:0;25368:241;;;;:::o;22191:174::-;20479:22;20490:10;20479;:22::i;:::-;20471:44;;;;-1:-1:-1;;;20471:44:0;;;;;;;:::i;:::-;22262:9:::1;:13:::0;22258:100:::1;;22296:11;;;;;;;;;-1:-1:-1::0;;;;;22296:11:0::1;-1:-1:-1::0;;;;;22296:19:0::1;;22323:9;22296:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22292:55:::0;::::1;22191:174::o:0;24676:88::-;24749:12;;24676:88;:::o;25947:401::-;26137:12;;-1:-1:-1;;;;;26102:19:0;;26081:4;26102:19;;;:11;:19;;;;;;;;26122:10;26102:31;;;;;;;;26081:4;;26102:47;26098:183;;26200:69;;;;;;;;;;;-1:-1:-1;;;26200:69:0;;;;;;;;-1:-1:-1;;;;;26200:19:0;;-1:-1:-1;26200:19:0;;;:11;:19;;;;;26220:10;26200:31;;;;;;;;;;:69;;26236:6;;26200:35;:69::i;:::-;-1:-1:-1;;;;;26166:19:0;;;;;;:11;:19;;;;;;;;26186:10;26166:31;;;;;;;:103;26098:183;26300:40;26314:6;26322:9;26333:6;26300:13;:40::i;:::-;26293:47;25947:401;-1:-1:-1;;;;25947:401:0:o;29689:118::-;4138:24;4151:10;4138:12;:24::i;:::-;4130:48;;;;-1:-1:-1;;;4130:48:0;;;;;;;:::i;:::-;29774:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;29774:25:0::1;-1:-1:-1::0;;;;29774:25:0;;::::1;::::0;;;::::1;::::0;;29689:118::o;22373:312::-;20584:19;20592:10;20584:7;:19::i;:::-;:45;;;;20607:22;20618:10;20607;:22::i;:::-;20576:77;;;;-1:-1:-1;;;20576:77:0;;;;;;;:::i;:::-;22501:1:::1;22491:7;:11;22483:56;;;;-1:-1:-1::0;;;22483:56:0::1;;;;;;;:::i;:::-;22558:5;::::0;-1:-1:-1;;;;;22558:5:0::1;:13;22550:64;;;;-1:-1:-1::0;;;22550:64:0::1;;;;;;;:::i;:::-;22629:11;;;;;;;;;-1:-1:-1::0;;;;;22629:11:0::1;-1:-1:-1::0;;;;;22629:19:0::1;;22656:7;22629:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22625:53:::0;22373:312;:::o;29815:142::-;29943:4;;29868:7;;29895:54;;29933:15;;-1:-1:-1;;;;;29943:4:0;29933:9;:15::i;:::-;29922:4;;29895:33;;29912:15;;-1:-1:-1;;;;;29922:4:0;29912:9;:15::i;:::-;29895:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;29888:61;;29815:142;:::o;19128:39::-;;;-1:-1:-1;;;19128:39:0;;;;;:::o;4580:103::-;4635:4;4670:5;-1:-1:-1;;;;;4670:5:0;;;4659:16;;;;4580:103::o;20317:111::-;-1:-1:-1;;;;;20400:20:0;20376:4;20400:20;;;:11;:20;;;;;;;;;20317:111::o;24770:80::-;18540:1;24770:80;:::o;18727:49::-;;;;;;;;;;;;;;;:::o;19042:34::-;;;-1:-1:-1;;;19042:34:0;;;;;:::o;20200:109::-;20293:8;;-1:-1:-1;;;;;20293:8:0;;;20282:19;;;;20200:109::o;19207:32::-;;;-1:-1:-1;;;19207:32:0;;;;;:::o;25617:133::-;25688:4;25712:30;25720:7;25729:12;;25712:7;:30::i;:::-;25705:37;25617:133;-1:-1:-1;;25617:133:0:o;29965:547::-;30055:13;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;30081:27:::1;30122:7;30081:49;;30163:16;-1:-1:-1::0;;;;;30163:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30151:47:0::1;;30199:5;;;;;;;;;-1:-1:-1::0;;;;;30199:5:0::1;30206:16;-1:-1:-1::0;;;;;30206:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30151:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30143:87:::0;-1:-1:-1;;;;;;30245:19:0;::::1;30241:142;;30301:16;-1:-1:-1::0;;;;;30301:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30289:50:0::1;;30340:5;;;;;;;;;-1:-1:-1::0;;;;;30340:5:0::1;30347:16;-1:-1:-1::0;;;;;30347:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30289:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30281:90;;30241:142;30393:4;:12:::0;;-1:-1:-1;;;;;30393:12:0;;::::1;-1:-1:-1::0;;;;;;30393:12:0;;::::1;;::::0;;;30418:6:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;30492:12:::1;::::0;30466:5:::1;::::0;;::::1;30393:4;30454:18:::0;;;:11:::1;:18;::::0;;;;;;;30481:6;;;::::1;30454:35:::0;;;;;;;;:50;30400:5;29965:547;-1:-1:-1;29965:547:0:o;19174:26::-;;;-1:-1:-1;;;19174:26:0;;;;;:::o;27929:240::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;28035:5:::1;:14:::0;;-1:-1:-1;;;;;28035:14:0;::::1;-1:-1:-1::0;;;;;;28035:14:0;;::::1;::::0;::::1;::::0;;;28060:5:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;28093:69;::::1;;;28130:5;::::0;28137:12:::1;::::0;28122:28:::1;::::0;-1:-1:-1;;;;;28130:5:0::1;::::0;28122:7:::1;:28::i;:::-;;27929:240:::0;;:::o;24501:130::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;24595:12:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;24595:28:0::1;-1:-1:-1::0;;;;24595:28:0;;::::1;::::0;;;::::1;::::0;;24501:130::o;29401:140::-;-1:-1:-1;;;;;29509:24:0;29485:4;29509:24;;;:16;:24;;;;;;;;;29401:140::o;27569:134::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;27634:5:::1;::::0;27658:37:::1;::::0;-1:-1:-1;;;;;27634:5:0;;::::1;:13;::::0;27666:10:::1;::::0;27658:37;::::1;;;::::0;27634:13;;27616:15:::1;27658:37:::0;27616:15;27658:37;27634:13;27666:10;27658:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;25116:105:::0;-1:-1:-1;;;;;25200:18:0;25182:7;25200:18;;;:9;:18;;;;;;;25116:105::o;28804:266::-;28916:10;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;28991:5:::1;::::0;28966:31:::1;::::0;-1:-1:-1;;;28966:31:0;;28939:24:::1;::::0;-1:-1:-1;;;;;28966:24:0;;::::1;::::0;::::1;::::0;:31:::1;::::0;28991:5:::1;::::0;28966:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29016:46;::::0;-1:-1:-1;;;29016:46:0;;28939:58;;-1:-1:-1;;;;;;29016:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;29040:3;;28939:58;;29016:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27711:101::-:0;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;27792:4:::1;:12:::0;;-1:-1:-1;;;;;;27792:12:0::1;-1:-1:-1::0;;;;;27792:12:0;;;::::1;::::0;;;::::1;::::0;;27711:101::o;25032:78::-;25084:7;25102:5;-1:-1:-1;;;;;25102:5:0;25032:78;:::o;29549:132::-;4138:24;4151:10;4138:12;:24::i;:::-;4130:48;;;;-1:-1:-1;;;4130:48:0;;;;;;;:::i;:::-;29610:14:::1;::::0;-1:-1:-1;;;29610:14:0;::::1;;;29605:69;;29641:14;:21:::0;;-1:-1:-1;;;;29641:21:0::1;-1:-1:-1::0;;;29641:21:0::1;::::0;;29549:132::o;23170:130::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23261:23:0::1;23287:5;23261:23:::0;;;:11:::1;:23;::::0;;;;:31;;-1:-1:-1;;23261:31:0::1;::::0;;23170:130::o;18785:42::-;;;;;;:::o;24856:84::-;24930:7;;;;;;;;;;;;-1:-1:-1;;;24930:7:0;;;;24856:84;:::o;27067:167::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;27184:42:::1;27213:5;27220;27184:28;:42::i;20773:705::-:0;17426:1;17568:7;;:19;;17560:63;;;;-1:-1:-1;;;17560:63:0;;;;;;;:::i;:::-;17426:1;17634:18;;20862:19:::1;::::0;-1:-1:-1;;;20862:19:0;::::1;;;20861:20;20853:66;;;;-1:-1:-1::0;;;20853:66:0::1;;;;;;;:::i;:::-;20939:6;::::0;-1:-1:-1;;;20939:6:0;::::1;;;20938:7;20930:43;;;;-1:-1:-1::0;;;20930:43:0::1;;;;;;;:::i;:::-;20988:12;::::0;-1:-1:-1;;;20988:12:0;::::1;;;20984:304;;;21025:5;::::0;:27:::1;::::0;-1:-1:-1;;;21025:27:0;;21056:7;;-1:-1:-1;;;;;21025:5:0::1;::::0;:15:::1;::::0;:27:::1;::::0;21041:10:::1;::::0;21025:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;21017:80;;;;-1:-1:-1::0;;;21017:80:0::1;;;;;;;:::i;:::-;21120:5;::::0;21148::::1;::::0;21120:34:::1;::::0;-1:-1:-1;;;21120:34:0;;21158:7;;-1:-1:-1;;;;;21120:5:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;21136:10:::1;::::0;21148:5:::1;::::0;21120:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;21112:84;;;;-1:-1:-1::0;;;21112:84:0::1;;;;;;;:::i;:::-;21235:7;21219:12;;:23;;21211:65;;;;-1:-1:-1::0;;;21211:65:0::1;;;;;;;:::i;:::-;21315:5;::::0;21346::::1;::::0;21315:46:::1;::::0;-1:-1:-1;;;21315:46:0;;21298:14:::1;::::0;-1:-1:-1;;;;;21315:5:0;;::::1;::::0;:18:::1;::::0;:46:::1;::::0;21334:10:::1;::::0;21346:5:::1;::::0;21353:7;;21315:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21298:63;;21380:9;21372:46;;;;-1:-1:-1::0;;;21372:46:0::1;;;;;;;:::i;:::-;21443:5;::::0;21429:41:::1;::::0;-1:-1:-1;;;;;21443:5:0::1;21450:10;21462:7:::0;21429:13:::1;:41::i;:::-;-1:-1:-1::0;;17382:1:0;17675:7;:22;-1:-1:-1;20773:705:0:o;19000:33::-;;;-1:-1:-1;;;;;19000:33:0;;:::o;18934:19::-;;;-1:-1:-1;;;;;18934:19:0;;:::o;25758:181::-;25863:4;25887:44;25901:10;25913:9;25924:6;25887:13;:44::i;:::-;25880:51;25758:181;-1:-1:-1;;;25758:181:0:o;17921:64::-;;;-1:-1:-1;;;;;17921:64:0;;:::o;18836:58::-;;;;;;;;;;;;;;;:::o;4253:94::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4313:19:0::1;;::::0;;;4335:4:::1;4313:19;::::0;;;;;;;:26;;-1:-1:-1;;4313:26:0::1;::::0;;::::1;::::0;;4253:94::o;22880:148::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22997:23:0::1;;::::0;;;:11:::1;:23;::::0;;;;;;::::1;::::0;::::1;22971:49;;-1:-1:-1::0;;22971:49:0;;::::1;;::::0;;22880:148::o;22693:179::-;20716:23;20728:10;20716:11;:23::i;:::-;20708:46;;;;-1:-1:-1;;;20708:46:0;;;;;;;:::i;23452:176::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;23527:19:::1;::::0;-1:-1:-1;;;23527:19:0;::::1;;;23526:20;23518:66;;;;-1:-1:-1::0;;;23518:66:0::1;;;;;;;:::i;:::-;23595:17;:25:::0;;-1:-1:-1;;;;23595:25:0::1;::::0;;23452:176::o;28312:484::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;28436:6:::1;:28:::0;;-1:-1:-1;;;;;;28436:28:0::1;-1:-1:-1::0;;;;;28436:28:0;;::::1;::::0;;;::::1;::::0;;;;28494:16:::1;::::0;;-1:-1:-1;;;28494:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28523:4;::::0;;28529:5:::1;::::0;28482:53:::1;::::0;-1:-1:-1;;;28482:53:0;;-1:-1:-1;;;;;28482:40:0;;::::1;::::0;::::1;::::0;:53:::1;::::0;28523:4;::::1;::::0;28529:5;;::::1;::::0;28482:53:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28475:4;:60:::0;;-1:-1:-1;;;;;;28475:60:0::1;-1:-1:-1::0;;;;;28475:60:0;;::::1;;::::0;;28584:12:::1;::::0;28558:5:::1;::::0;;::::1;-1:-1:-1::0;28546:18:0;;;:11:::1;:18;::::0;;;;;;;28573:6:::1;::::0;;;::::1;28546:35:::0;;;;;;;;;:50;28607:61;::::1;;;28643:6;;;;;;;;;-1:-1:-1::0;;;;;28643:6:0::1;-1:-1:-1::0;;;;;28643:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28636:4;:20:::0;;-1:-1:-1;;;;;;28636:20:0::1;-1:-1:-1::0;;;;;28636:20:0;;;::::1;::::0;;;::::1;::::0;;28607:61:::1;28716:7;28725:10;28692:44;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28678:11:0::1;:58:::0;;-1:-1:-1;;;;;;28678:58:0;;::::1;-1:-1:-1::0;;;;;28678:58:0;;::::1;;::::0;;;;28747:18:::1;:41:::0;;28776:11;;;::::1;28747:41:::0;::::1;;::::0;;-1:-1:-1;;28312:484:0:o;23636:406::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;23784:19:::1;::::0;-1:-1:-1;;;23784:19:0;::::1;;;23783:20;23775:66;;;;-1:-1:-1::0;;;23775:66:0::1;;;;;;;:::i;:::-;23860:17;::::0;-1:-1:-1;;;23860:17:0;::::1;;;23852:66;;;;-1:-1:-1::0;;;23852:66:0::1;;;;;;;:::i;:::-;23929:5;::::0;:28:::1;::::0;-1:-1:-1;;;23929:28:0;;-1:-1:-1;;;;;23929:5:0;;::::1;::::0;:14:::1;::::0;:28:::1;::::0;23944:3;;23949:7;;23929:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23972:8;23968:67;;;23997:19;:26:::0;;-1:-1:-1;;;;23997:26:0::1;-1:-1:-1::0;;;23997:26:0::1;::::0;;23636:406;;;:::o;24387:106::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;24469:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;24469:16:0::1;-1:-1:-1::0;;;;24469:16:0;;::::1;::::0;;;::::1;::::0;;24387:106::o;21486:697::-;17426:1;17568:7;;:19;;17560:63;;;;-1:-1:-1;;;17560:63:0;;;;;;;:::i;:::-;17426:1;17634:18;;21577:19:::1;::::0;-1:-1:-1;;;21577:19:0;::::1;;;21576:20;21568:66;;;;-1:-1:-1::0;;;21568:66:0::1;;;;;;;:::i;:::-;21654:6;::::0;-1:-1:-1;;;21654:6:0;::::1;;;21653:7;21645:43;;;;-1:-1:-1::0;;;21645:43:0::1;;;;;;;:::i;:::-;21703:12;::::0;-1:-1:-1;;;21703:12:0;::::1;;;21699:214;;;21750:10;21740:21;::::0;;;:9:::1;:21;::::0;;;;;:32;-1:-1:-1;21740:32:0::1;21732:74;;;;-1:-1:-1::0;;;21732:74:0::1;;;;;;;:::i;:::-;21841:10;21829:23;::::0;;;:11:::1;:23;::::0;;;;;;;21853:5:::1;::::0;-1:-1:-1;;;;;21853:5:0::1;21829:30:::0;;;;;;;;:41;-1:-1:-1;21829:41:0::1;21821:80;;;;-1:-1:-1::0;;;21821:80:0::1;;;;;;;:::i;:::-;21931:5;::::0;21947::::1;::::0;21931:22:::1;::::0;-1:-1:-1;;;21931:22:0;;21957:7;;-1:-1:-1;;;;;21931:5:0;;::::1;::::0;:15:::1;::::0;:22:::1;::::0;21947:5;;::::1;::::0;21931:22:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;21923:83;;;;-1:-1:-1::0;;;21923:83:0::1;;;;;;;:::i;:::-;22060:5;::::0;22017:14:::1;::::0;22034:41:::1;::::0;22048:10:::1;::::0;-1:-1:-1;;;;;22060:5:0::1;22067:7:::0;22034:13:::1;:41::i;:::-;22017:58;;22094:9;22086:43;;;;-1:-1:-1::0;;;22086:43:0::1;;;;;;;:::i;:::-;22140:5;::::0;:35:::1;::::0;-1:-1:-1;;;22140:35:0;;-1:-1:-1;;;;;22140:5:0;;::::1;::::0;:14:::1;::::0;:35:::1;::::0;22155:10:::1;::::0;22167:7;;22140:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25227:133::-:0;-1:-1:-1;;;;;25329:19:0;;;25311:7;25329:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;25227:133::o;27820:101::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;27901:4:::1;:12:::0;;-1:-1:-1;;;;;;27901:12:0::1;-1:-1:-1::0;;;;;27901:12:0;;;::::1;::::0;;;::::1;::::0;;27820:101::o;24050:329::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;24146:19:::1;::::0;-1:-1:-1;;;24146:19:0;::::1;;;24145:20;24137:66;;;;-1:-1:-1::0;;;24137:66:0::1;;;;;;;:::i;:::-;24222:17;::::0;-1:-1:-1;;;24222:17:0;::::1;;;24214:66;;;;-1:-1:-1::0;;;24214:66:0::1;;;;;;;:::i;:::-;24291:5;::::0;24327::::1;::::0;24311:22:::1;::::0;-1:-1:-1;;;24311:22:0;;-1:-1:-1;;;;;24291:5:0;;::::1;::::0;:14:::1;::::0;24306:3;;24291:5;;24311:15:::1;::::0;:22:::1;::::0;24327:5;::::1;::::0;24311:22:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24291:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24345:19:0::1;:26:::0;;-1:-1:-1;;;;24345:26:0::1;-1:-1:-1::0;;;24345:26:0::1;::::0;;24050:329::o;17802:48::-;17833:17;17802:48;:::o;4423:97::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4485:19:0::1;4507:5;4485:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4485:27:0::1;::::0;;4423:97::o;4980:173::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;5056:5:::1;:11:::0;;-1:-1:-1;;;;;;5056:11:0::1;-1:-1:-1::0;;;;;5056:11:0;::::1;::::0;;::::1;::::0;;5078:19;;-1:-1:-1;5078:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5078:26:0::1;::::0;;::::1;::::0;;5120:25;::::1;::::0;::::1;::::0;5056:11;;5120:25:::1;:::i;:::-;;;;;;;;4980:173:::0;:::o;29078:315::-;4138:24;4151:10;4138:12;:24::i;:::-;4130:48;;;;-1:-1:-1;;;4130:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29192:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29192:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29236:150:::1;;29263:11;::::0;:31:::1;::::0;-1:-1:-1;;;29263:31:0;;-1:-1:-1;;;;;29263:11:0;;::::1;::::0;:20:::1;::::0;:31:::1;::::0;29284:6;;29263:11:::1;::::0;:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29236:150;;;29327:11;::::0;-1:-1:-1;;;;;29356:17:0;;::::1;29327:11;29356:17:::0;;;:9:::1;:17;::::0;;;;;;;29327:47;;-1:-1:-1;;;29327:47:0;;:11;;;::::1;::::0;:20:::1;::::0;:47:::1;::::0;29348:6;;29327:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29078:315:::0;;:::o;18903:24::-;;;-1:-1:-1;;;;;18903:24:0;;:::o;18367:20::-;;;-1:-1:-1;;;;;18367:20:0;;:::o;23036:126::-;3969:19;3977:10;3969:7;:19::i;:::-;3961:38;;;;-1:-1:-1;;;3961:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23124:23:0::1;;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;23124:30:0::1;23150:4;23124:30;::::0;;23036:126::o;4754:107::-;-1:-1:-1;;;;;4834:19:0;4810:4;4834:19;;;:14;:19;;;;;;;;;4754:107::o;2067:206::-;2153:7;2214:12;2206:6;;;;2198:29;;;;-1:-1:-1;;;2198:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2249:5:0;;;2067:206::o;26356:703::-;26507:14;;26482:4;;-1:-1:-1;;;26507:14:0;;;;26499:56;;;;-1:-1:-1;;;26499:56:0;;;;;;;:::i;:::-;26586:53;;;;;;;;;;;-1:-1:-1;;;26586:53:0;;;;;;;;-1:-1:-1;;;;;26586:17:0;;-1:-1:-1;26586:17:0;;;:9;:17;;;;;;;;:53;;26608:6;;26586:21;:53::i;:::-;-1:-1:-1;;;;;26566:17:0;;;;;;;:9;:17;;;;;;:73;;;;26673:20;;;;;;;:32;;26698:6;26673:24;:32::i;:::-;-1:-1:-1;;;;;26650:20:0;;;;;;;:9;:20;;;;;;;;:55;;;;26723:24;;;;;:16;:24;;;;;;;26718:120;;26768:11;;-1:-1:-1;;;;;26797:17:0;;;26768:11;26797:17;;;:9;:17;;;;;;;;26768:47;;-1:-1:-1;;;26768:47:0;;:11;;;;;:20;;:47;;26789:6;;26768:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26764:63;;-1:-1:-1;;;;;26853:27:0;;;;;;:16;:27;;;;;;;;26848:129;;26901:11;;-1:-1:-1;;;;;26933:20:0;;;26901:11;26933:20;;;:9;:20;;;;;;;;26901:53;;-1:-1:-1;;;26901:53:0;;:11;;;;;:20;;:53;;26922:9;;26901:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26897:69;;27011:9;-1:-1:-1;;;;;26994:35:0;27003:6;-1:-1:-1;;;;;26994:35:0;;27022:6;26994:35;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;27047:4:0;26356:703;;;;;:::o;1643:98::-;1701:7;1728:5;1732:1;1728;:5;:::i;27242:315::-;-1:-1:-1;;;;;27351:32:0;;;;;;:25;:32;;;;;:40;;-1:-1:-1;;27351:40:0;;;;;;;;;;;;27402:68;;-1:-1:-1;;;;;27428:23:0;;;;;;:16;:23;;;;;:30;;-1:-1:-1;;27428:30:0;27454:4;27428:30;;;27402:68;27485:5;27480:70;;-1:-1:-1;;;;;;27507:23:0;27533:5;27507:23;;;:16;:23;;;;;:31;;-1:-1:-1;;27507:31:0;;;27242:315::o;1537:98::-;1595:7;1622:5;1626:1;1622;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:470::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1329:366;;1631:7;;-1:-1:-1;;;1685:2:1;1670:18;;;;1657:32;;1329:366::o;1700:396::-;;;1826:2;1814:9;1805:7;1801:23;1797:32;1794:2;;;1847:6;1839;1832:22;1794:2;1891:9;1878:23;1910:33;1937:5;1910:33;:::i;:::-;1962:5;-1:-1:-1;2019:2:1;2004:18;;1991:32;2032;1991;2032;:::i;2101:327::-;;;2230:2;2218:9;2209:7;2205:23;2201:32;2198:2;;;2251:6;2243;2236:22;2198:2;2295:9;2282:23;2314:33;2341:5;2314:33;:::i;:::-;2366:5;2418:2;2403:18;;;;2390:32;;-1:-1:-1;;;2188:240:1:o;2433:464::-;;;;2576:2;2564:9;2555:7;2551:23;2547:32;2544:2;;;2597:6;2589;2582:22;2544:2;2641:9;2628:23;2660:33;2687:5;2660:33;:::i;:::-;2712:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;;-1:-1:-1;2820:2:1;2805:18;;2792:32;2833;2792;2833;:::i;:::-;2884:7;2874:17;;;2534:363;;;;;:::o;2902:253::-;;3011:2;2999:9;2990:7;2986:23;2982:32;2979:2;;;3032:6;3024;3017:22;2979:2;3076:9;3063:23;3095:30;3119:5;3095:30;:::i;3160:257::-;;3280:2;3268:9;3259:7;3255:23;3251:32;3248:2;;;3301:6;3293;3286:22;3248:2;3338:9;3332:16;3357:30;3381:5;3357:30;:::i;3422:190::-;;3534:2;3522:9;3513:7;3509:23;3505:32;3502:2;;;3555:6;3547;3540:22;3502:2;-1:-1:-1;3583:23:1;;3492:120;-1:-1:-1;3492:120:1:o;3617:194::-;;3740:2;3728:9;3719:7;3715:23;3711:32;3708:2;;;3761:6;3753;3746:22;3708:2;-1:-1:-1;3789:16:1;;3698:113;-1:-1:-1;3698:113:1:o;3816:203::-;-1:-1:-1;;;;;3980:32:1;;;;3962:51;;3950:2;3935:18;;3917:102::o;4240:304::-;-1:-1:-1;;;;;4470:15:1;;;4452:34;;4522:15;;4517:2;4502:18;;4495:43;4402:2;4387:18;;4369:175::o;4549:375::-;-1:-1:-1;;;;;4807:15:1;;;4789:34;;4859:15;;;;4854:2;4839:18;;4832:43;4906:2;4891:18;;4884:34;;;;4739:2;4724:18;;4706:218::o;4929:282::-;-1:-1:-1;;;;;5129:32:1;;;;5111:51;;5193:2;5178:18;;5171:34;5099:2;5084:18;;5066:145::o;5495:187::-;5660:14;;5653:22;5635:41;;5623:2;5608:18;;5590:92::o;5913:603::-;;6054:2;6083;6072:9;6065:21;6115:6;6109:13;6158:6;6153:2;6142:9;6138:18;6131:34;6183:4;6196:140;6210:6;6207:1;6204:13;6196:140;;;6305:14;;;6301:23;;6295:30;6271:17;;;6290:2;6267:26;6260:66;6225:10;;6196:140;;;6354:6;6351:1;6348:13;6345:2;;;6424:4;6419:2;6410:6;6399:9;6395:22;6391:31;6384:45;6345:2;-1:-1:-1;6500:2:1;6479:15;-1:-1:-1;;6475:29:1;6460:45;;;;6507:2;6456:54;;6034:482;-1:-1:-1;;;6034:482:1:o;6521:400::-;6723:2;6705:21;;;6762:2;6742:18;;;6735:30;6801:34;6796:2;6781:18;;6774:62;-1:-1:-1;;;6867:2:1;6852:18;;6845:34;6911:3;6896:19;;6695:226::o;6926:334::-;7128:2;7110:21;;;7167:2;7147:18;;;7140:30;-1:-1:-1;;;7201:2:1;7186:18;;7179:40;7251:2;7236:18;;7100:160::o;7265:356::-;7467:2;7449:21;;;7486:18;;;7479:30;7545:34;7540:2;7525:18;;7518:62;7612:2;7597:18;;7439:182::o;7626:353::-;7828:2;7810:21;;;7867:2;7847:18;;;7840:30;7906:31;7901:2;7886:18;;7879:59;7970:2;7955:18;;7800:179::o;7984:332::-;8186:2;8168:21;;;8225:1;8205:18;;;8198:29;-1:-1:-1;;;8258:2:1;8243:18;;8236:39;8307:2;8292:18;;8158:158::o;8321:353::-;8523:2;8505:21;;;8562:2;8542:18;;;8535:30;8601:31;8596:2;8581:18;;8574:59;8665:2;8650:18;;8495:179::o;8679:348::-;8881:2;8863:21;;;8920:2;8900:18;;;8893:30;8959:26;8954:2;8939:18;;8932:54;9018:2;9003:18;;8853:174::o;9032:397::-;9234:2;9216:21;;;9273:2;9253:18;;;9246:30;9312:34;9307:2;9292:18;;9285:62;-1:-1:-1;;;9378:2:1;9363:18;;9356:31;9419:3;9404:19;;9206:223::o;9434:350::-;9636:2;9618:21;;;9675:2;9655:18;;;9648:30;9714:28;9709:2;9694:18;;9687:56;9775:2;9760:18;;9608:176::o;9789:398::-;9991:2;9973:21;;;10030:2;10010:18;;;10003:30;10069:34;10064:2;10049:18;;10042:62;-1:-1:-1;;;10135:2:1;10120:18;;10113:32;10177:3;10162:19;;9963:224::o;10192:343::-;10394:2;10376:21;;;10433:2;10413:18;;;10406:30;-1:-1:-1;;;10467:2:1;10452:18;;10445:49;10526:2;10511:18;;10366:169::o;10540:345::-;10742:2;10724:21;;;10781:2;10761:18;;;10754:30;-1:-1:-1;;;10815:2:1;10800:18;;10793:51;10876:2;10861:18;;10714:171::o;10890:329::-;11092:2;11074:21;;;11131:1;11111:18;;;11104:29;-1:-1:-1;;;11164:2:1;11149:18;;11142:36;11210:2;11195:18;;11064:155::o;11224:353::-;11426:2;11408:21;;;11465:2;11445:18;;;11438:30;11504:31;11499:2;11484:18;;11477:59;11568:2;11553:18;;11398:179::o;11582:401::-;11784:2;11766:21;;;11823:2;11803:18;;;11796:30;11862:34;11857:2;11842:18;;11835:62;-1:-1:-1;;;11928:2:1;11913:18;;11906:35;11973:3;11958:19;;11756:227::o;11988:355::-;12190:2;12172:21;;;12229:2;12209:18;;;12202:30;12268:33;12263:2;12248:18;;12241:61;12334:2;12319:18;;12162:181::o;12348:347::-;12550:2;12532:21;;;12589:2;12569:18;;;12562:30;12628:25;12623:2;12608:18;;12601:53;12686:2;12671:18;;12522:173::o;12700:353::-;12902:2;12884:21;;;12941:2;12921:18;;;12914:30;12980:31;12975:2;12960:18;;12953:59;13044:2;13029:18;;12874:179::o;13058:335::-;13260:2;13242:21;;;13299:2;13279:18;;;13272:30;-1:-1:-1;;;13333:2:1;13318:18;;13311:41;13384:2;13369:18;;13232:161::o;13398:177::-;13544:25;;;13532:2;13517:18;;13499:76::o;13580:184::-;13752:4;13740:17;;;;13722:36;;13710:2;13695:18;;13677:87::o;13769:128::-;;13840:1;13836:6;13833:1;13830:13;13827:2;;;13846:18;;:::i;:::-;-1:-1:-1;13882:9:1;;13817:80::o;13902:125::-;;13970:1;13967;13964:8;13961:2;;;13975:18;;:::i;:::-;-1:-1:-1;14012:9:1;;13951:76::o;14032:127::-;14093:10;14088:3;14084:20;14081:1;14074:31;14124:4;14121:1;14114:15;14148:4;14145:1;14138:15;14164:133;-1:-1:-1;;;;;14241:31:1;;14231:42;;14221:2;;14287:1;14284;14277:12;14302:120;14390:5;14383:13;14376:21;14369:5;14366:32;14356:2;;14412:1;14409;14402:12

Swarm Source

ipfs://1fc4ba1f1b55595b88e315aba167e3b98af16d0ca414edd7a3bd738f2c4c328c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.