ETH Price: $3,446.59 (-1.24%)
Gas: 12 Gwei

Token

𝕏 Γ† A-12 (𝕏 Γ† A-12)
 

Overview

Max Total Supply

10,000,000,000,000 𝕏 Γ† A-12

Holders

131

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: 𝕏 Æ A-12
Balance
119,069,980,934.685798278 𝕏 Γ† A-12

Value
$0.00
0x8169c1d4c11b91443364047797bc0b34c1866023
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:
XAEA12

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
𝕏 Æ A-12 Auto Burn and Reflection Now Faster!

https://t.me/EksAshPortal
https://medium.com/@eksash
https://www.eksash.com/
https://twitter.com/EksAshCoin
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

library SafeMath {
    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 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 {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 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 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);
}

library Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract XAEA12 is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = unicode"𝕏 Æ A-12";
    string private constant _symbol = unicode"𝕏 Æ A-12";
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 2 ) / 100;
    uint256 public _maxWalletToken = ( _tTotal * 2 ) / 100;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0
    });
    uint256 internal totalFee = 2000;
    uint256 internal sellFee = 2000;
    uint256 internal transferFee = 2000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 internal swapThreshold = ( _tTotal * 30 ) / 1000;
    uint256 internal _minTokenAmount = ( _tTotal * 1 ) / 10000;
    bool internal tradingAllowed = true;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0xbb4a131310baB4218ADe9635D7D2F585b5705b9f;
    address internal marketing_receiver = 0xbb4a131310baB4218ADe9635D7D2F585b5705b9f;
    address internal default_receiver = 0xbb4a131310baB4218ADe9635D7D2F585b5705b9f;
    address internal reflectionsWallet = 0xA996DBAb51927a70Ab6aF383670188a3Fafc4966;
    address internal burnWallet = 0xA99ea0Eb9D53C11B643BCc0BfEbeFa52281de4D4;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;

    bool currentEvent;
    bool public reflections = true;
    bool public burn = true;
    uint256 public reflectionsAmount = ( _tTotal * 10 ) / 100;
    uint256 public burnAmount = ( _tTotal * 10 ) / 100;
    uint256 public reflectionsPercent = 100;
    uint256 public burnPercent = 100;
    uint256 public reflectionsTime;
    uint256 public lastReflectionsTime;
    uint256 public burnTime;
    uint256 public lastBurnTime;
    uint256 public reflectionsInterval = 10 minutes;
    uint256 public burnInterval = 10 minutes;
    uint256 public totalBurn;
    uint256 public totalReflection;
    uint256 public totalBurnEvents;
    uint256 public totalReflectionEvents;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 taxes;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTaxes;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTaxes;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //ETH
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router; pair = _pair;
        _rOwned[owner] = _rTotal;
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
        _isExcluded[address(pair)] = true;
        _isExcluded[address(this)] = true;
        _isExcluded[address(DEAD)] = true;
        _isExcluded[address(0x0)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[reflectionsWallet] = true;
        isFeeExempt[burnWallet] = true;
        isFeeExempt[address(DEAD)] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public view override returns (uint256) {return _tTotal;}
    function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount); return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount); return true;}
    function totalFeeReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender]+addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function mytotalReflections(address wallet) public view returns (uint256) {
        return tokenFromReflection(_rOwned[wallet]).sub(_tOwned[wallet]);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        checkIntervals(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || swapping || currentEvent), recipient == pair, sender == pair, false);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !currentEvent){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi, bool isReflections) private {
        _rTotal -=rRfi;
        if(!isReflections){totFeesPaid.rfi +=tRfi;}
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi, isReflections);
        _takeTaxes(s.rTaxes, s.tTaxes);
        if(s.tTransferAmount > uint256(0)){emit Transfer(sender, recipient, s.tTransferAmount);}
        if(s.tTaxes > uint256(0)){emit Transfer(sender, address(this), s.tTaxes);}
    }

    function checkIntervals(address sender, address recipient) internal {
        if(reflectionsTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && reflections && balanceOf(reflectionsWallet) > uint256(0) && !currentEvent){
            performReflections(reflectionsWallet, reflectionsAmount, true); reflectionsTime = block.timestamp.add(reflectionsInterval);}
        if(burnTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && burn && balanceOf(burnWallet) > uint256(0) && !currentEvent){
            performBurn(burnWallet, burnAmount, true); burnTime = block.timestamp.add(burnInterval);}
    }

    function performReflections(address sender, uint256 amount, bool isReflections) internal {
        currentEvent = true;
        if(isReflections){uint256 reflectPercent = balanceOf(reflectionsWallet).mul(reflectionsPercent).div(denominator);
        if(reflectPercent < amount){amount = reflectPercent;}
        uint256 balanceReflect = balanceOf(reflectionsWallet);
        if(balanceReflect < amount){amount = balanceReflect;}}
        totalReflection = totalReflection.add(amount);
        lastReflectionsTime = block.timestamp;
        totalReflectionEvents = totalReflectionEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(0x0), amount, false, false, false, true);
        currentEvent = false;
    }

    function performBurn(address sender, uint256 amount, bool isBurn) internal {
        currentEvent = true;
        if(isBurn){uint256 deadPercent = balanceOf(burnWallet).mul(burnPercent).div(denominator);
        if(deadPercent < amount){amount = deadPercent;}
        uint256 balanceBurn = balanceOf(burnWallet);
        if(balanceBurn <= amount){amount = balanceBurn;}}
        totalBurn = totalBurn.add(amount);
        lastBurnTime = block.timestamp;
        totalBurnEvents = totalBurnEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(DEAD), amount, false, false, false, false);
        currentEvent = false;
    }

    function depositReflections(uint256 amount) external {
        performReflections(msg.sender, amount, false);
    }

    function depositBurn(uint256 amount) external {
        performBurn(msg.sender, amount, false);
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !currentEvent;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 eAmount = address(this).balance;
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setBaseTimes() external onlyOwner {
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
    }

    function setPairAddress(address pairAddress) external onlyOwner {
        pair = pairAddress; _isExcluded[address(pairAddress)] = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _default) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; default_receiver = _default;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_default] = true;
    }

    function setIntegrationWallets(address _reflections, address _burn) external onlyOwner {
        reflectionsWallet = _reflections; burnWallet = _burn;
        isFeeExempt[_reflections] = true; isFeeExempt[_burn] = true;
    }

    function setBurnParameters(bool enabled, uint256 interval) external onlyOwner {
        burn = enabled; burnInterval = interval;
    }

    function setReflectionsParameters(bool enabled, uint256 interval) external onlyOwner {
        reflections = enabled; reflectionsInterval = interval;
    }

    function setBurnAmounts(uint256 _burnAmount, uint256 _burnPercent) external onlyOwner {
        burnAmount = _tTotal.mul(_burnAmount).div(100000); burnPercent = _burnPercent;
    }

    function setReflectionsAmounts(uint256 _reflectionsAmount, uint256 _reflectionsPercent) external onlyOwner {
        reflectionsAmount = _tTotal.mul(_reflectionsAmount).div(100000); reflectionsPercent = _reflectionsPercent;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

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

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rTransferAmount; }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReflection(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break; }
        }
    }

    function _takeTaxes(uint256 rTaxes, uint256 tTaxes) private {
        totFeesPaid.taxes +=tTaxes;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTaxes;
        }
        _rOwned[address(this)] +=rTaxes;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTaxes) = _getRValues(to_return, tAmount, takeFee, _getRate(), isReflections);
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory s) {
        if(!takeFee && !isReflections || isFeeless(isSale, isPurchase) && !isReflections) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale && !isReflections){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isReflections){
            s.tRfi = tAmount;
            s.tTransferAmount = tAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate, bool isReflections) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rTaxes) {
        rAmount = tAmount*currentRate;
        if(!takeFee && !isReflections){
            return(rAmount, rAmount, 0,0);}
        if(isReflections){
            rRfi = s.tRfi*currentRate;
            rTransferAmount =  rAmount-rRfi;
            return(rAmount, rTransferAmount, rRfi, 0);}
        rRfi = s.tRfi*currentRate;
        rTaxes = s.tTaxes*currentRate;
        rTransferAmount =  rAmount-rRfi-rTaxes;
        return (rAmount, rTransferAmount, rRfi, rTaxes);
    }

    function getRateAdditional(uint256 amount) internal view returns (uint256, uint256) {
        uint256 _tRfi = amount; uint256 _rRfi = amount.mul(_getRate());
        return(_rRfi, _tRfi);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastReflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setBaseTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_burnPercent","type":"uint256"}],"name":"setBurnAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBurnParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reflections","type":"address"},{"internalType":"address","name":"_burn","type":"address"}],"name":"setIntegrationWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_default","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionsAmount","type":"uint256"},{"internalType":"uint256","name":"_reflectionsPercent","type":"uint256"}],"name":"setReflectionsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setReflectionsParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620006a8565b62000024906509184e72a000620006b9565b60018190556200003790600019620006e9565b620000459060001962000700565b600255606460015460026200005b9190620006b9565b62000067919062000716565b600355606460015460026200007d9190620006b9565b62000089919062000716565b6004556040805160608101825260008082526064602083018190529190920182905260058290556006556007556107d060088190556009819055600a55612710600b55600c805461ff0019166101001790556001546103e890620000ef90601e620006b9565b620000fb919062000716565b600d556127106001546001620001129190620006b9565b6200011e919062000716565b600e55600f805460ff191660019081179091556011819055601280546001600160a01b031990811661dead1790915560138054821673bb4a131310bab4218ade9635d7d2f585b5705b9f90811790915560148054831682179055601580548316909117905560168054821673a996dbab51927a70ab6af383670188a3fafc49661790556017805490911673a99ea0eb9d53c11b643bcc0bfebefa52281de4d4179055601f805461010160a81b61ffff60a81b1990911617905554606490620001e890600a620006b9565b620001f4919062000716565b6020556064600154600a6200020a9190620006b9565b62000216919062000716565b602155606460225560646023556102586028556102586029553480156200023c57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca91906200072d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e91906200072d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b291906200072d565b601e80546001600160a01b038086166001600160a01b031992831617909255601f8054838516921691909117905560025460008054909216825260186020908152604090922055602854919250620004159142916200191c6200057e821b17901c565b60248190555062000437602954426200057e60201b6200191c1790919060201c565b602655601f546001600160a01b039081166000908152601b602090815260408083208054600160ff199182168117909255308086528386208054831684179055601280548816875284872080548416851790557f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea8054841685179055338752601c8652848720805484168517905590865283862080548316841790556013548716865283862080548316841790556014548716865283862080548316841790556015548716865283862080548316841790556016548716865283862080548316841790556017548716865283862080548316841790555486168552828520805490911682179055835490549151918252909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000775565b60006200058c82846200075f565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005ec578160001904821115620005d057620005d062000595565b80851615620005de57918102915b93841c9390800290620005b0565b509250929050565b60008262000605575060016200058f565b8162000614575060006200058f565b81600181146200062d5760028114620006385762000658565b60019150506200058f565b60ff8411156200064c576200064c62000595565b50506001821b6200058f565b5060208310610133831016604e8410600b84101617156200067d575081810a6200058f565b620006898383620005ab565b8060001904821115620006a057620006a062000595565b029392505050565b60006200058c60ff841683620005f4565b80820281158282048414176200058f576200058f62000595565b634e487b7160e01b600052601260045260246000fd5b600082620006fb57620006fb620006d3565b500690565b818103818111156200058f576200058f62000595565b600082620007285762000728620006d3565b500490565b6000602082840312156200074057600080fd5b81516001600160a01b03811681146200075857600080fd5b9392505050565b808201808211156200058f576200058f62000595565b61343980620007856000396000f3fe60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a6e578063f09f694e14610a84578063f2fde38b14610aa4578063f887ea4014610ac457600080fd5b8063e480034514610a03578063e55a68b314610a23578063e94dd17c14610a39578063e960e68e14610a5957600080fd5b8063d1571e47116100dc578063d1571e4714610966578063dd62ed3e14610987578063dfa5f4ea146109cd578063e3067449146109ed57600080fd5b8063a9059cbb14610910578063b2118a8d14610930578063ca221c081461095057600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f0914610882578063a22d483214610898578063a457c2d7146108b8578063a8aa1b31146108d857600080fd5b80638ebfc796146108225780639213c3581461084257806395b186411461086257806395d89b41146103f257600080fd5b806384836778116101b657806384836778146107ac57806384b81093146107cc578063884870c7146107e25780638cf2e94a1461080257600080fd5b80637934f4f2146107475780637d1db4a51461075d5780637d459db31461077357600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106dc57806370a08231146106f157806378109e5414610711578063783b5a0a1461072757600080fd5b806344df8e70146106655780634549b03914610686578063486a7e6b146106a657806354b822cf146106bc57600080fd5b8063395093511161029b57806339509351146105e95780633c9f861d146106095780633f4218e01461061f578063404ca34a1461064f57600080fd5b80633052ea0814610597578063313ce567146105b757806337f0d4c8146105d357600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105135780632cbf5360146105285780632d838119146105485780632f54bf6e1461056857600080fd5b806322849720146104a857806323b872dd146104be57806327334a08146104de578063293230b8146104fe57600080fd5b8063095ea7b311610375578063095ea7b31461042d5780630e7daf6d1461045d57806311403aec1461047357806318160ddd1461049357600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f47565b610ae4565b005b3480156103fe57600080fd5b50604080518082018252600c81526b784ecac79061c3102096989960a11b602082015290516103c79190612f64565b34801561043957600080fd5b5061044d610448366004612fb2565b610ca3565b60405190151581526020016103c7565b34801561046957600080fd5b506103bd60225481565b34801561047f57600080fd5b506103f061048e366004612fde565b610cba565b34801561049f57600080fd5b506001546103bd565b3480156104b457600080fd5b506103bd602b5481565b3480156104ca57600080fd5b5061044d6104d9366004612ff7565b610cc9565b3480156104ea57600080fd5b506103f06104f9366004612f47565b610d32565b34801561050a57600080fd5b506103f0610e85565b34801561051f57600080fd5b506103bd610ebe565b34801561053457600080fd5b506103f0610543366004613038565b610efa565b34801561055457600080fd5b506103bd610563366004612fde565b610f4f565b34801561057457600080fd5b5061044d610583366004612f47565b6000546001600160a01b0391821691161490565b3480156105a357600080fd5b506103f06105b2366004612fde565b610fd3565b3480156105c357600080fd5b50604051600981526020016103c7565b3480156105df57600080fd5b506103bd602d5481565b3480156105f557600080fd5b5061044d610604366004612fb2565b61104a565b34801561061557600080fd5b506103bd602a5481565b34801561062b57600080fd5b5061044d61063a366004612f47565b601c6020526000908152604090205460ff1681565b34801561065b57600080fd5b506103bd60205481565b34801561067157600080fd5b50601f5461044d90600160b01b900460ff1681565b34801561069257600080fd5b506103bd6106a1366004613068565b611081565b3480156106b257600080fd5b506103bd60215481565b3480156106c857600080fd5b506103f06106d7366004612fde565b611115565b3480156106e857600080fd5b506103f0611121565b3480156106fd57600080fd5b506103bd61070c366004612f47565b61116f565b34801561071d57600080fd5b506103bd60045481565b34801561073357600080fd5b506103f0610742366004613098565b6111ce565b34801561075357600080fd5b506103bd60255481565b34801561076957600080fd5b506103bd60035481565b34801561077f57600080fd5b5061044d61078e366004612f47565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b857600080fd5b506103f06107c73660046130c6565b611220565b3480156107d857600080fd5b506103bd60285481565b3480156107ee57600080fd5b506103f06107fd366004613038565b61129f565b34801561080e57600080fd5b506103bd61081d366004612f47565b6113af565b34801561082e57600080fd5b506103f061083d366004613109565b6113e1565b34801561084e57600080fd5b506103f061085d366004613137565b611436565b34801561086e57600080fd5b506103f061087d366004613038565b6114dc565b34801561088e57600080fd5b506103bd602c5481565b3480156108a457600080fd5b506103f06108b3366004612f47565b61152b565b3480156108c457600080fd5b5061044d6108d3366004612fb2565b61158f565b3480156108e457600080fd5b50601f546108f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561091c57600080fd5b5061044d61092b366004612fb2565b6115de565b34801561093c57600080fd5b506103f061094b366004612ff7565b6115eb565b34801561095c57600080fd5b506103bd60245481565b34801561097257600080fd5b50601f5461044d90600160a81b900460ff1681565b34801561099357600080fd5b506103bd6109a2366004613182565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b3480156109d957600080fd5b506103f06109e83660046131a0565b611717565b3480156109f957600080fd5b506103bd60275481565b348015610a0f57600080fd5b506103f0610a1e3660046131a0565b611763565b348015610a2f57600080fd5b506103bd60295481565b348015610a4557600080fd5b506103f0610a543660046131be565b6117af565b348015610a6557600080fd5b50602e546103bd565b348015610a7a57600080fd5b506103bd60265481565b348015610a9057600080fd5b506103f0610a9f366004613182565b611815565b348015610ab057600080fd5b506103f0610abf366004612f47565b61189e565b348015610ad057600080fd5b50601e546108f8906001600160a01b031681565b6000546001600160a01b03163314610b175760405162461bcd60e51b8152600401610b0e906131ea565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610b7f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b0e565b60005b601d54811015610c9f57816001600160a01b0316601d8281548110610ba957610ba961320a565b6000918252602090912001546001600160a01b031603610c8d57601d8054610bd390600190613236565b81548110610be357610be361320a565b600091825260209091200154601d80546001600160a01b039092169183908110610c0f57610c0f61320a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c6757610c67613249565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c978161325f565b915050610b82565b5050565b6000610cb0338484611928565b5060015b92915050565b610cc633826000611a4c565b50565b6000610cd6848484611b23565b610d288433610d23856040518060600160405280602881526020016133b7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611bf8565b611928565b5060019392505050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b0381166000908152601b602052604090205460ff1615610dc55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b0e565b6001600160a01b03811660009081526018602052604090205415610e1f576001600160a01b038116600090815260186020526040902054610e0590610f4f565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610b0e906131ea565b600f805460ff19166001179055565b6000610ef5610ecd600061116f565b601254610eef90610ee6906001600160a01b031661116f565b60015490611c24565b90611c24565b905090565b6000546001600160a01b03163314610f245760405162461bcd60e51b8152600401610b0e906131ea565b610f46620186a0610f4084600154611c3090919063ffffffff16565b90611c3c565b60215560235550565b6000600254821115610fb65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b0e565b6000610fc0611c48565b9050610fcc8184613278565b9392505050565b6000546001600160a01b03163314610ffd5760405162461bcd60e51b8152600401610b0e906131ea565b60155447906001600160a01b03166108fc61101d6064610f408587611c30565b6040518115909202916000818181858888f19350505050158015611045573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cb0918590610d2390869061329a565b60006001548311156110d55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b0e565b816110f65760006110ec8460016000806000611c6b565b519150610cb49050565b60006111088460016000806000611c6b565b602001519150610cb49050565b610cc633826000611ce9565b6000546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b0e906131ea565b60285461115990429061191c565b60245560295461116a90429061191c565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111ac57506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cb490610f4f565b6000546001600160a01b031633146111f85760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b0e906131ea565b60088690556009859055600a849055600583905560068290556007819055600b54861180159061127e5750600b5460095411155b801561128e5750600b54600a5411155b61129757600080fd5b505050505050565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610b0e906131ea565b60006112e6600b54610f4085600154611c3090919063ffffffff16565b90506000611305600b54610f4085600154611c3090919063ffffffff16565b90506000611325620186a0610f4060018054611c3090919063ffffffff16565b90508083101580156113375750808210155b6113a15760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b0e565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cb49190610eef90610f4f565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114605760405162461bcd60e51b8152600401610b0e906131ea565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115065760405162461bcd60e51b8152600401610b0e906131ea565b611522620186a0610f4084600154611c3090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115555760405162461bcd60e51b8152600401610b0e906131ea565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cb03384610d23856040518060600160405280602581526020016133df60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611bf8565b6000610cb0338484611b23565b6000546001600160a01b031633146116155760405162461bcd60e51b8152600401610b0e906131ea565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168091906132ad565b90506001600160a01b03841663a9059cbb846116a16064610f408688611c30565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171091906132c6565b5050505050565b6000546001600160a01b031633146117415760405162461bcd60e51b8152600401610b0e906131ea565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b0316331461178d5760405162461bcd60e51b8152600401610b0e906131ea565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146117d95760405162461bcd60e51b8152600401610b0e906131ea565b60118390556001546117f490620186a090610f409085611c30565b600d5560015461180d90620186a090610f409084611c30565b600e55505050565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401610b0e906131ea565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118c85760405162461bcd60e51b8152600401610b0e906131ea565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000610fcc828461329a565b6001600160a01b03831661198a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0e565b6001600160a01b0382166119eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0e565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611ace576000611a97600b54610f40602254611a91601660009054906101000a90046001600160a01b031661116f565b90611c30565b905082811015611aa5578092505b601654600090611abd906001600160a01b031661116f565b905083811015611acb578093505b50505b602b54611adb908361191c565b602b5542602555602d54611af090600161191c565b602d55611afe833084611928565b611b118360008460008060006001611dad565b5050601f805460ff60a01b1916905550565b611b2e838383611fe2565b611b38838361211a565b611b438383836121b3565b611b4e8284836122c2565b611b58838361234e565b611b638383836123c3565b611b6d83836123e8565b6001600160a01b0383166000908152601c60205260409020546110459084908490849060ff1680611bb657506001600160a01b0386166000908152601c602052604090205460ff165b80611bc35750600c5460ff165b80611bd75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611dad565b60008184841115611c1c5760405162461bcd60e51b8152600401610b0e9190612f64565b505050900390565b6000610fcc8284613236565b6000610fcc82846132e3565b6000610fcc8284613278565b6000806000611c5561258d565b9092509050611c648183613278565b9250505090565b611cab6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cb88686868686612710565b9050611cce818787611cc8611c48565b86612938565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d64576000611d2e600b54610f40602354611a91601760009054906101000a90046001600160a01b031661116f565b905082811015611d3c578092505b601754600090611d54906001600160a01b031661116f565b9050838111611d61578093505b50505b602a54611d71908361191c565b602a5542602755602c54611d8690600161191c565b602c55611d94833084611928565b601254611b119084906001600160a01b03168460008080805b6000611dbc8686868686611c6b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e1e576001600160a01b038816600090815260196020526040902054611e04908790613236565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611e815760808101516001600160a01b038816600090815260196020526040902054611e67919061329a565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ea69190613236565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611edd919061329a565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f0e9190846129dd565b611f2081606001518260c00151612a19565b608081015115611f7c57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611f7391815260200190565b60405180910390a35b60c081015115611fd857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fcf91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120465760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0e565b6001600160a01b0382166120a85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0e565b6120b18361116f565b8111156110455760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b0e565b6001600160a01b0382166000908152601c602052604090205460ff1615801561215c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610c9f57600f5460ff16610c9f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b0e565b6001600160a01b0382166000908152601c602052604090205460ff161580156121f557506001600160a01b0383166000908152601c602052604090205460ff16155b801561220a57506001600160a01b0382163014155b801561222457506012546001600160a01b03838116911614155b801561223e5750601f546001600160a01b03838116911614155b801561225857506013546001600160a01b03838116911614155b15611045576004548161226a8461116f565b612274919061329a565b11156110455760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b0e565b600354811115806122eb57506001600160a01b0382166000908152601c602052604090205460ff165b8061230e57506001600160a01b0383166000908152601c602052604090205460ff165b6110455760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0e565b601f546001600160a01b03828116911614801561238457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123935750600c5460ff16155b80156123a95750601f54600160a01b900460ff16155b15610c9f576010546123bc90600161191c565b6010555050565b6123ce838383612a98565b15611045576123de600d54612b5e565b6000601055505050565b42602454111580156123fd5750600c5460ff16155b80156124165750601f546001600160a01b038281169116145b801561243b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124505750601f54600160a81b900460ff165b8015612471575060165460009061246f906001600160a01b031661116f565b115b80156124875750601f54600160a01b900460ff16155b156124b9576016546020546124a7916001600160a01b0316906001611a4c565b6028546124b590429061191c565b6024555b42602654111580156124ce5750600c5460ff16155b80156124e75750601f546001600160a01b038281169116145b801561250c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125215750601f54600160b01b900460ff165b80156125425750601754600090612540906001600160a01b031661116f565b115b80156125585750601f54600160a01b900460ff16155b15610c9f57601754602154612578916001600160a01b0316906001611ce9565b60295461258690429061191c565b6026555050565b6002546001546000918291825b601d548110156126df578260186000601d84815481106125bc576125bc61320a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061262757508160196000601d84815481106126005761260061320a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561263d57600254600154945094505050509091565b60186000601d83815481106126545761265461320a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126839084613236565b925060196000601d838154811061269c5761269c61320a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126cb9083613236565b9150806126d78161325f565b91505061259a565b506001546002546126f09190613278565b821015612707576002546001549350935050509091565b90939092509050565b6127506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561275c575081155b80612776575061276c8484612ced565b8015612776575081155b156127875760808101869052611ce0565b83158015612793575082155b801561279d575081155b156128155760006127bf600b54610f40600a548a611c3090919063ffffffff16565b9050600a54600560000154116127ef57600b546005546127df90896132e3565b6127e99190613278565b60a08301525b60a08201516127ff908290611c24565b60c083015261280e8188613236565b6080830152505b838015612820575081155b15612898576000612842600b54610f406009548a611c3090919063ffffffff16565b90506009546005600001541161287257600b5460055461286290896132e3565b61286c9190613278565b60a08301525b60a0820151612882908290611c24565b60c08301526128918188613236565b6080830152505b8280156128a3575081155b1561291b5760006128c5600b54610f406008548a611c3090919063ffffffff16565b9050600854600560000154116128f557600b546005546128e590896132e3565b6128ef9190613278565b60a08301525b60a0820151612905908290611c24565b60c08301526129148188613236565b6080830152505b8115611ce05760a081018690526080810186905295945050505050565b600080808061294786896132e3565b935086158015612955575084155b15612968575082915060009050806129d1565b841561299557858960a0015161297e91906132e3565b915061298a8285613236565b9250600090506129d1565b858960a001516129a591906132e3565b9150858960c001516129b791906132e3565b9050806129c48386613236565b6129ce9190613236565b92505b95509550955095915050565b82600260008282546129ef9190613236565b909155508190506110455781602e6000016000828254612a0f919061329a565b9091555050505050565b80602e6001016000828254612a2e919061329a565b9091555050306000908152601b602052604090205460ff1615612a70573060009081526019602052604081208054839290612a6a90849061329a565b90915550505b3060009081526018602052604081208054849290612a8f90849061329a565b90915550505050565b600080600e5483101590506000600d54612ab13061116f565b600c54911115915060ff16158015612ad05750600c54610100900460ff165b8015612ad95750815b8015612afe57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b0c5750600f5460ff165b8015612b255750601f546001600160a01b038681169116145b8015612b35575060115460105410155b8015612b3e5750805b8015612b545750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612b8591600291611a91919061191c565b9050600854600003612bb757600654600754612bb491600291611a9191600191612bae9161191c565b9061191c565b90505b6007546000908290612bc990856132e3565b612bd39190613278565b90506000612be18285613236565b905047612bed82612d33565b6000612bf98247613236565b600754909150600090612c0c9087613236565b612c169083613278565b600754909150600090612c2990836132e3565b90508015612c3b57612c3b8682612e85565b600654600090612c5090611a91856002611c30565b90508015612c94576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c92573d6000803e3d6000fd5b505b478015612cd7576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cd5573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612cfc5750600954155b80612d0f5750818015612d0f5750600854155b80610fcc575082158015612d21575081155b8015610fcc575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6857612d6861320a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de591906132fa565b81600181518110612df857612df861320a565b6001600160a01b039283166020918202929092010152601e54612e1e9130911684611928565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e57908590600090869030904290600401613317565b600060405180830381600087803b158015612e7157600080fd5b505af1158015611297573d6000803e3d6000fd5b601e54612e9d9030906001600160a01b031684611928565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f0d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117109190613388565b6001600160a01b0381168114610cc657600080fd5b600060208284031215612f5957600080fd5b8135610fcc81612f32565b600060208083528351808285015260005b81811015612f9157858101830151858201604001528201612f75565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612fc557600080fd5b8235612fd081612f32565b946020939093013593505050565b600060208284031215612ff057600080fd5b5035919050565b60008060006060848603121561300c57600080fd5b833561301781612f32565b9250602084013561302781612f32565b929592945050506040919091013590565b6000806040838503121561304b57600080fd5b50508035926020909101359150565b8015158114610cc657600080fd5b6000806040838503121561307b57600080fd5b82359150602083013561308d8161305a565b809150509250929050565b600080604083850312156130ab57600080fd5b82356130b68161305a565b9150602083013561308d81612f32565b60008060008060008060c087890312156130df57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561311c57600080fd5b823561312781612f32565b9150602083013561308d8161305a565b60008060006060848603121561314c57600080fd5b833561315781612f32565b9250602084013561316781612f32565b9150604084013561317781612f32565b809150509250925092565b6000806040838503121561319557600080fd5b82356130b681612f32565b600080604083850312156131b357600080fd5b8235612fd08161305a565b6000806000606084860312156131d357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cb457610cb4613220565b634e487b7160e01b600052603160045260246000fd5b60006001820161327157613271613220565b5060010190565b60008261329557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cb457610cb4613220565b6000602082840312156132bf57600080fd5b5051919050565b6000602082840312156132d857600080fd5b8151610fcc8161305a565b8082028115828204841417610cb457610cb4613220565b60006020828403121561330c57600080fd5b8151610fcc81612f32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133675784516001600160a01b031683529383019391830191600101613342565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561339d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e93d712a7ab2c1616b82191dec4b19c86570ee0285f131067269220dfdb80c164736f6c63430008120033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a6e578063f09f694e14610a84578063f2fde38b14610aa4578063f887ea4014610ac457600080fd5b8063e480034514610a03578063e55a68b314610a23578063e94dd17c14610a39578063e960e68e14610a5957600080fd5b8063d1571e47116100dc578063d1571e4714610966578063dd62ed3e14610987578063dfa5f4ea146109cd578063e3067449146109ed57600080fd5b8063a9059cbb14610910578063b2118a8d14610930578063ca221c081461095057600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f0914610882578063a22d483214610898578063a457c2d7146108b8578063a8aa1b31146108d857600080fd5b80638ebfc796146108225780639213c3581461084257806395b186411461086257806395d89b41146103f257600080fd5b806384836778116101b657806384836778146107ac57806384b81093146107cc578063884870c7146107e25780638cf2e94a1461080257600080fd5b80637934f4f2146107475780637d1db4a51461075d5780637d459db31461077357600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106dc57806370a08231146106f157806378109e5414610711578063783b5a0a1461072757600080fd5b806344df8e70146106655780634549b03914610686578063486a7e6b146106a657806354b822cf146106bc57600080fd5b8063395093511161029b57806339509351146105e95780633c9f861d146106095780633f4218e01461061f578063404ca34a1461064f57600080fd5b80633052ea0814610597578063313ce567146105b757806337f0d4c8146105d357600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105135780632cbf5360146105285780632d838119146105485780632f54bf6e1461056857600080fd5b806322849720146104a857806323b872dd146104be57806327334a08146104de578063293230b8146104fe57600080fd5b8063095ea7b311610375578063095ea7b31461042d5780630e7daf6d1461045d57806311403aec1461047357806318160ddd1461049357600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f47565b610ae4565b005b3480156103fe57600080fd5b50604080518082018252600c81526b784ecac79061c3102096989960a11b602082015290516103c79190612f64565b34801561043957600080fd5b5061044d610448366004612fb2565b610ca3565b60405190151581526020016103c7565b34801561046957600080fd5b506103bd60225481565b34801561047f57600080fd5b506103f061048e366004612fde565b610cba565b34801561049f57600080fd5b506001546103bd565b3480156104b457600080fd5b506103bd602b5481565b3480156104ca57600080fd5b5061044d6104d9366004612ff7565b610cc9565b3480156104ea57600080fd5b506103f06104f9366004612f47565b610d32565b34801561050a57600080fd5b506103f0610e85565b34801561051f57600080fd5b506103bd610ebe565b34801561053457600080fd5b506103f0610543366004613038565b610efa565b34801561055457600080fd5b506103bd610563366004612fde565b610f4f565b34801561057457600080fd5b5061044d610583366004612f47565b6000546001600160a01b0391821691161490565b3480156105a357600080fd5b506103f06105b2366004612fde565b610fd3565b3480156105c357600080fd5b50604051600981526020016103c7565b3480156105df57600080fd5b506103bd602d5481565b3480156105f557600080fd5b5061044d610604366004612fb2565b61104a565b34801561061557600080fd5b506103bd602a5481565b34801561062b57600080fd5b5061044d61063a366004612f47565b601c6020526000908152604090205460ff1681565b34801561065b57600080fd5b506103bd60205481565b34801561067157600080fd5b50601f5461044d90600160b01b900460ff1681565b34801561069257600080fd5b506103bd6106a1366004613068565b611081565b3480156106b257600080fd5b506103bd60215481565b3480156106c857600080fd5b506103f06106d7366004612fde565b611115565b3480156106e857600080fd5b506103f0611121565b3480156106fd57600080fd5b506103bd61070c366004612f47565b61116f565b34801561071d57600080fd5b506103bd60045481565b34801561073357600080fd5b506103f0610742366004613098565b6111ce565b34801561075357600080fd5b506103bd60255481565b34801561076957600080fd5b506103bd60035481565b34801561077f57600080fd5b5061044d61078e366004612f47565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b857600080fd5b506103f06107c73660046130c6565b611220565b3480156107d857600080fd5b506103bd60285481565b3480156107ee57600080fd5b506103f06107fd366004613038565b61129f565b34801561080e57600080fd5b506103bd61081d366004612f47565b6113af565b34801561082e57600080fd5b506103f061083d366004613109565b6113e1565b34801561084e57600080fd5b506103f061085d366004613137565b611436565b34801561086e57600080fd5b506103f061087d366004613038565b6114dc565b34801561088e57600080fd5b506103bd602c5481565b3480156108a457600080fd5b506103f06108b3366004612f47565b61152b565b3480156108c457600080fd5b5061044d6108d3366004612fb2565b61158f565b3480156108e457600080fd5b50601f546108f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561091c57600080fd5b5061044d61092b366004612fb2565b6115de565b34801561093c57600080fd5b506103f061094b366004612ff7565b6115eb565b34801561095c57600080fd5b506103bd60245481565b34801561097257600080fd5b50601f5461044d90600160a81b900460ff1681565b34801561099357600080fd5b506103bd6109a2366004613182565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b3480156109d957600080fd5b506103f06109e83660046131a0565b611717565b3480156109f957600080fd5b506103bd60275481565b348015610a0f57600080fd5b506103f0610a1e3660046131a0565b611763565b348015610a2f57600080fd5b506103bd60295481565b348015610a4557600080fd5b506103f0610a543660046131be565b6117af565b348015610a6557600080fd5b50602e546103bd565b348015610a7a57600080fd5b506103bd60265481565b348015610a9057600080fd5b506103f0610a9f366004613182565b611815565b348015610ab057600080fd5b506103f0610abf366004612f47565b61189e565b348015610ad057600080fd5b50601e546108f8906001600160a01b031681565b6000546001600160a01b03163314610b175760405162461bcd60e51b8152600401610b0e906131ea565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610b7f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b0e565b60005b601d54811015610c9f57816001600160a01b0316601d8281548110610ba957610ba961320a565b6000918252602090912001546001600160a01b031603610c8d57601d8054610bd390600190613236565b81548110610be357610be361320a565b600091825260209091200154601d80546001600160a01b039092169183908110610c0f57610c0f61320a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c6757610c67613249565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c978161325f565b915050610b82565b5050565b6000610cb0338484611928565b5060015b92915050565b610cc633826000611a4c565b50565b6000610cd6848484611b23565b610d288433610d23856040518060600160405280602881526020016133b7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611bf8565b611928565b5060019392505050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b0381166000908152601b602052604090205460ff1615610dc55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b0e565b6001600160a01b03811660009081526018602052604090205415610e1f576001600160a01b038116600090815260186020526040902054610e0590610f4f565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610b0e906131ea565b600f805460ff19166001179055565b6000610ef5610ecd600061116f565b601254610eef90610ee6906001600160a01b031661116f565b60015490611c24565b90611c24565b905090565b6000546001600160a01b03163314610f245760405162461bcd60e51b8152600401610b0e906131ea565b610f46620186a0610f4084600154611c3090919063ffffffff16565b90611c3c565b60215560235550565b6000600254821115610fb65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b0e565b6000610fc0611c48565b9050610fcc8184613278565b9392505050565b6000546001600160a01b03163314610ffd5760405162461bcd60e51b8152600401610b0e906131ea565b60155447906001600160a01b03166108fc61101d6064610f408587611c30565b6040518115909202916000818181858888f19350505050158015611045573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cb0918590610d2390869061329a565b60006001548311156110d55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b0e565b816110f65760006110ec8460016000806000611c6b565b519150610cb49050565b60006111088460016000806000611c6b565b602001519150610cb49050565b610cc633826000611ce9565b6000546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b0e906131ea565b60285461115990429061191c565b60245560295461116a90429061191c565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111ac57506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cb490610f4f565b6000546001600160a01b031633146111f85760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b0e906131ea565b60088690556009859055600a849055600583905560068290556007819055600b54861180159061127e5750600b5460095411155b801561128e5750600b54600a5411155b61129757600080fd5b505050505050565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610b0e906131ea565b60006112e6600b54610f4085600154611c3090919063ffffffff16565b90506000611305600b54610f4085600154611c3090919063ffffffff16565b90506000611325620186a0610f4060018054611c3090919063ffffffff16565b90508083101580156113375750808210155b6113a15760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b0e565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cb49190610eef90610f4f565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610b0e906131ea565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114605760405162461bcd60e51b8152600401610b0e906131ea565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115065760405162461bcd60e51b8152600401610b0e906131ea565b611522620186a0610f4084600154611c3090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115555760405162461bcd60e51b8152600401610b0e906131ea565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cb03384610d23856040518060600160405280602581526020016133df60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611bf8565b6000610cb0338484611b23565b6000546001600160a01b031633146116155760405162461bcd60e51b8152600401610b0e906131ea565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168091906132ad565b90506001600160a01b03841663a9059cbb846116a16064610f408688611c30565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171091906132c6565b5050505050565b6000546001600160a01b031633146117415760405162461bcd60e51b8152600401610b0e906131ea565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b0316331461178d5760405162461bcd60e51b8152600401610b0e906131ea565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146117d95760405162461bcd60e51b8152600401610b0e906131ea565b60118390556001546117f490620186a090610f409085611c30565b600d5560015461180d90620186a090610f409084611c30565b600e55505050565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401610b0e906131ea565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118c85760405162461bcd60e51b8152600401610b0e906131ea565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000610fcc828461329a565b6001600160a01b03831661198a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0e565b6001600160a01b0382166119eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0e565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611ace576000611a97600b54610f40602254611a91601660009054906101000a90046001600160a01b031661116f565b90611c30565b905082811015611aa5578092505b601654600090611abd906001600160a01b031661116f565b905083811015611acb578093505b50505b602b54611adb908361191c565b602b5542602555602d54611af090600161191c565b602d55611afe833084611928565b611b118360008460008060006001611dad565b5050601f805460ff60a01b1916905550565b611b2e838383611fe2565b611b38838361211a565b611b438383836121b3565b611b4e8284836122c2565b611b58838361234e565b611b638383836123c3565b611b6d83836123e8565b6001600160a01b0383166000908152601c60205260409020546110459084908490849060ff1680611bb657506001600160a01b0386166000908152601c602052604090205460ff165b80611bc35750600c5460ff165b80611bd75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611dad565b60008184841115611c1c5760405162461bcd60e51b8152600401610b0e9190612f64565b505050900390565b6000610fcc8284613236565b6000610fcc82846132e3565b6000610fcc8284613278565b6000806000611c5561258d565b9092509050611c648183613278565b9250505090565b611cab6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cb88686868686612710565b9050611cce818787611cc8611c48565b86612938565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d64576000611d2e600b54610f40602354611a91601760009054906101000a90046001600160a01b031661116f565b905082811015611d3c578092505b601754600090611d54906001600160a01b031661116f565b9050838111611d61578093505b50505b602a54611d71908361191c565b602a5542602755602c54611d8690600161191c565b602c55611d94833084611928565b601254611b119084906001600160a01b03168460008080805b6000611dbc8686868686611c6b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e1e576001600160a01b038816600090815260196020526040902054611e04908790613236565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611e815760808101516001600160a01b038816600090815260196020526040902054611e67919061329a565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ea69190613236565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611edd919061329a565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f0e9190846129dd565b611f2081606001518260c00151612a19565b608081015115611f7c57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611f7391815260200190565b60405180910390a35b60c081015115611fd857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fcf91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120465760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0e565b6001600160a01b0382166120a85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0e565b6120b18361116f565b8111156110455760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b0e565b6001600160a01b0382166000908152601c602052604090205460ff1615801561215c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610c9f57600f5460ff16610c9f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b0e565b6001600160a01b0382166000908152601c602052604090205460ff161580156121f557506001600160a01b0383166000908152601c602052604090205460ff16155b801561220a57506001600160a01b0382163014155b801561222457506012546001600160a01b03838116911614155b801561223e5750601f546001600160a01b03838116911614155b801561225857506013546001600160a01b03838116911614155b15611045576004548161226a8461116f565b612274919061329a565b11156110455760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b0e565b600354811115806122eb57506001600160a01b0382166000908152601c602052604090205460ff165b8061230e57506001600160a01b0383166000908152601c602052604090205460ff165b6110455760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0e565b601f546001600160a01b03828116911614801561238457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123935750600c5460ff16155b80156123a95750601f54600160a01b900460ff16155b15610c9f576010546123bc90600161191c565b6010555050565b6123ce838383612a98565b15611045576123de600d54612b5e565b6000601055505050565b42602454111580156123fd5750600c5460ff16155b80156124165750601f546001600160a01b038281169116145b801561243b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124505750601f54600160a81b900460ff165b8015612471575060165460009061246f906001600160a01b031661116f565b115b80156124875750601f54600160a01b900460ff16155b156124b9576016546020546124a7916001600160a01b0316906001611a4c565b6028546124b590429061191c565b6024555b42602654111580156124ce5750600c5460ff16155b80156124e75750601f546001600160a01b038281169116145b801561250c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125215750601f54600160b01b900460ff165b80156125425750601754600090612540906001600160a01b031661116f565b115b80156125585750601f54600160a01b900460ff16155b15610c9f57601754602154612578916001600160a01b0316906001611ce9565b60295461258690429061191c565b6026555050565b6002546001546000918291825b601d548110156126df578260186000601d84815481106125bc576125bc61320a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061262757508160196000601d84815481106126005761260061320a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561263d57600254600154945094505050509091565b60186000601d83815481106126545761265461320a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126839084613236565b925060196000601d838154811061269c5761269c61320a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126cb9083613236565b9150806126d78161325f565b91505061259a565b506001546002546126f09190613278565b821015612707576002546001549350935050509091565b90939092509050565b6127506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561275c575081155b80612776575061276c8484612ced565b8015612776575081155b156127875760808101869052611ce0565b83158015612793575082155b801561279d575081155b156128155760006127bf600b54610f40600a548a611c3090919063ffffffff16565b9050600a54600560000154116127ef57600b546005546127df90896132e3565b6127e99190613278565b60a08301525b60a08201516127ff908290611c24565b60c083015261280e8188613236565b6080830152505b838015612820575081155b15612898576000612842600b54610f406009548a611c3090919063ffffffff16565b90506009546005600001541161287257600b5460055461286290896132e3565b61286c9190613278565b60a08301525b60a0820151612882908290611c24565b60c08301526128918188613236565b6080830152505b8280156128a3575081155b1561291b5760006128c5600b54610f406008548a611c3090919063ffffffff16565b9050600854600560000154116128f557600b546005546128e590896132e3565b6128ef9190613278565b60a08301525b60a0820151612905908290611c24565b60c08301526129148188613236565b6080830152505b8115611ce05760a081018690526080810186905295945050505050565b600080808061294786896132e3565b935086158015612955575084155b15612968575082915060009050806129d1565b841561299557858960a0015161297e91906132e3565b915061298a8285613236565b9250600090506129d1565b858960a001516129a591906132e3565b9150858960c001516129b791906132e3565b9050806129c48386613236565b6129ce9190613236565b92505b95509550955095915050565b82600260008282546129ef9190613236565b909155508190506110455781602e6000016000828254612a0f919061329a565b9091555050505050565b80602e6001016000828254612a2e919061329a565b9091555050306000908152601b602052604090205460ff1615612a70573060009081526019602052604081208054839290612a6a90849061329a565b90915550505b3060009081526018602052604081208054849290612a8f90849061329a565b90915550505050565b600080600e5483101590506000600d54612ab13061116f565b600c54911115915060ff16158015612ad05750600c54610100900460ff165b8015612ad95750815b8015612afe57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b0c5750600f5460ff165b8015612b255750601f546001600160a01b038681169116145b8015612b35575060115460105410155b8015612b3e5750805b8015612b545750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612b8591600291611a91919061191c565b9050600854600003612bb757600654600754612bb491600291611a9191600191612bae9161191c565b9061191c565b90505b6007546000908290612bc990856132e3565b612bd39190613278565b90506000612be18285613236565b905047612bed82612d33565b6000612bf98247613236565b600754909150600090612c0c9087613236565b612c169083613278565b600754909150600090612c2990836132e3565b90508015612c3b57612c3b8682612e85565b600654600090612c5090611a91856002611c30565b90508015612c94576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c92573d6000803e3d6000fd5b505b478015612cd7576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cd5573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612cfc5750600954155b80612d0f5750818015612d0f5750600854155b80610fcc575082158015612d21575081155b8015610fcc575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6857612d6861320a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de591906132fa565b81600181518110612df857612df861320a565b6001600160a01b039283166020918202929092010152601e54612e1e9130911684611928565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e57908590600090869030904290600401613317565b600060405180830381600087803b158015612e7157600080fd5b505af1158015611297573d6000803e3d6000fd5b601e54612e9d9030906001600160a01b031684611928565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f0d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117109190613388565b6001600160a01b0381168114610cc657600080fd5b600060208284031215612f5957600080fd5b8135610fcc81612f32565b600060208083528351808285015260005b81811015612f9157858101830151858201604001528201612f75565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612fc557600080fd5b8235612fd081612f32565b946020939093013593505050565b600060208284031215612ff057600080fd5b5035919050565b60008060006060848603121561300c57600080fd5b833561301781612f32565b9250602084013561302781612f32565b929592945050506040919091013590565b6000806040838503121561304b57600080fd5b50508035926020909101359150565b8015158114610cc657600080fd5b6000806040838503121561307b57600080fd5b82359150602083013561308d8161305a565b809150509250929050565b600080604083850312156130ab57600080fd5b82356130b68161305a565b9150602083013561308d81612f32565b60008060008060008060c087890312156130df57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561311c57600080fd5b823561312781612f32565b9150602083013561308d8161305a565b60008060006060848603121561314c57600080fd5b833561315781612f32565b9250602084013561316781612f32565b9150604084013561317781612f32565b809150509250925092565b6000806040838503121561319557600080fd5b82356130b681612f32565b600080604083850312156131b357600080fd5b8235612fd08161305a565b6000806000606084860312156131d357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cb457610cb4613220565b634e487b7160e01b600052603160045260246000fd5b60006001820161327157613271613220565b5060010190565b60008261329557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cb457610cb4613220565b6000602082840312156132bf57600080fd5b5051919050565b6000602082840312156132d857600080fd5b8151610fcc8161305a565b8082028115828204841417610cb457610cb4613220565b60006020828403121561330c57600080fd5b8151610fcc81612f32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133675784516001600160a01b031683529383019391830191600101613342565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561339d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e93d712a7ab2c1616b82191dec4b19c86570ee0285f131067269220dfdb80c164736f6c63430008120033

Deployed Bytecode Sourcemap

7514:23969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9802:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9802:32:0;;;;;;;;27091:464;;;;;;;;;;-1:-1:-1;27091:464:0;;;;;:::i;:::-;;:::i;:::-;;11749:67;;;;;;;;;;-1:-1:-1;11809:5:0;;;;;;;;;;;-1:-1:-1;;;11809:5:0;;;;11749:67;;;;11809:5;11749:67;:::i;12515:134::-;;;;;;;;;;-1:-1:-1;12515:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12515:134:0;1457:187:1;9756:39:0;;;;;;;;;;;;;;;;19424:117;;;;;;;;;;-1:-1:-1;19424:117:0;;;;;:::i;:::-;;:::i;11972:79::-;;;;;;;;;;-1:-1:-1;12042:7:0;;11972:79;;10115:30;;;;;;;;;;;;;;;;12929:309;;;;;;;;;;-1:-1:-1;12929:309:0;;;;;:::i;:::-;;:::i;26748:335::-;;;;;;;;;;-1:-1:-1;26748:335:0;;;;;:::i;:::-;;:::i;22209:83::-;;;;;;;;;;;;;:::i;25844:143::-;;;;;;;;;;;;;:::i;24091:182::-;;;;;;;;;;-1:-1:-1;24091:182:0;;;;;:::i;:::-;;:::i;26492:248::-;;;;;;;;;;-1:-1:-1;26492:248:0;;;;;:::i;:::-;;:::i;6219:87::-;;;;;;;;;;-1:-1:-1;6219:87:0;;;;;:::i;:::-;6274:4;6299:5;-1:-1:-1;;;;;6288:16:0;;;6299:5;;6288:16;;6219:87;24520:182;;;;;;;;;;-1:-1:-1;24520:182:0;;;;;:::i;:::-;;:::i;11899:67::-;;;;;;;;;;-1:-1:-1;11899:67:0;;7778:1;2690:36:1;;2678:2;2663:18;11899:67:0;2548:184:1;10189:36:0;;;;;;;;;;;;;;;;13246:209;;;;;;;;;;-1:-1:-1;13246:209:0;;;;;:::i;:::-;;:::i;10084:24::-;;;;;;;;;;;;;;;;9403:44;;;;;;;;;;-1:-1:-1;9403:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9635:57;;;;;;;;;;;;;;;;9605:23;;;;;;;;;;-1:-1:-1;9605:23:0;;;;-1:-1:-1;;;9605:23:0;;;;;;25995:489;;;;;;;;;;-1:-1:-1;25995:489:0;;;;;:::i;:::-;;:::i;9699:50::-;;;;;;;;;;;;;;;;19549:103;;;;;;;;;;-1:-1:-1;19549:103:0;;;;;:::i;:::-;;:::i;22300:175::-;;;;;;;;;;;;;:::i;12057:173::-;;;;;;;;;;-1:-1:-1;12057:173:0;;;;;:::i;:::-;;:::i;8016:54::-;;;;;;;;;;;;;;;;22634:124;;;;;;;;;;-1:-1:-1;22634:124:0;;;;;:::i;:::-;;:::i;9878:34::-;;;;;;;;;;;;;;;;7958:51;;;;;;;;;;;;;;;;12747:108;;;;;;;;;;-1:-1:-1;12747:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12833:20:0;12819:4;12833:20;;;:11;:20;;;;;;;;;12747:108;22766:442;;;;;;;;;;-1:-1:-1;22766:442:0;;;;;:::i;:::-;;:::i;9983:47::-;;;;;;;;;;;;;;;;25137:445;;;;;;;;;;-1:-1:-1;25137:445:0;;;;;:::i;:::-;;:::i;13736:157::-;;;;;;;;;;-1:-1:-1;13736:157:0;;;;;:::i;:::-;;:::i;24710:117::-;;;;;;;;;;-1:-1:-1;24710:117:0;;;;;:::i;:::-;;:::i;23216:322::-;;;;;;;;;;-1:-1:-1;23216:322:0;;;;;:::i;:::-;;:::i;24281:231::-;;;;;;;;;;-1:-1:-1;24281:231:0;;;;;:::i;:::-;;:::i;10152:30::-;;;;;;;;;;;;;;;;22483:143;;;;;;;;;;-1:-1:-1;22483:143:0;;;;;:::i;:::-;;:::i;13463:265::-;;;;;;;;;;-1:-1:-1;13463:265:0;;;;;:::i;:::-;;:::i;9516:19::-;;;;;;;;;;-1:-1:-1;9516:19:0;;;;-1:-1:-1;;;;;9516:19:0;;;;;;-1:-1:-1;;;;;5174:32:1;;;5156:51;;5144:2;5129:18;9516:19:0;5010:203:1;12236:140:0;;;;;;;;;;-1:-1:-1;12236:140:0;;;;;:::i;:::-;;:::i;25590:246::-;;;;;;;;;;-1:-1:-1;25590:246:0;;;;;:::i;:::-;;:::i;9841:30::-;;;;;;;;;;;;;;;;9568;;;;;;;;;;-1:-1:-1;9568:30:0;;;;-1:-1:-1;;;9568:30:0;;;;;;12382:127;;;;;;;;;;-1:-1:-1;12382:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12480:18:0;;;12463:7;12480:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12382:127;23926:157;;;;;;;;;;-1:-1:-1;23926:157:0;;;;;:::i;:::-;;:::i;9949:27::-;;;;;;;;;;;;;;;;23782:136;;;;;;;;;;-1:-1:-1;23782:136:0;;;;;:::i;:::-;;:::i;10037:40::-;;;;;;;;;;;;;;;;24835:294;;;;;;;;;;-1:-1:-1;24835:294:0;;;;;:::i;:::-;;:::i;12655:86::-;;;;;;;;;;-1:-1:-1;12724:11:0;:15;12655:86;;9919:23;;;;;;;;;;;;;;;;23546:228;;;;;;;;;;-1:-1:-1;23546:228:0;;;;;:::i;:::-;;:::i;6312:111::-;;;;;;;;;;-1:-1:-1;6312:111:0;;;;;:::i;:::-;;:::i;9488:21::-;;;;;;;;;;-1:-1:-1;9488:21:0;;;;-1:-1:-1;;;;;9488:21:0;;;27091:464;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27175:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27167:56;;;::::0;-1:-1:-1;;;27167:56:0;;7265:2:1;27167:56:0::1;::::0;::::1;7247:21:1::0;7304:2;7284:18;;;7277:30;7343:25;7323:18;;;7316:53;7386:18;;27167:56:0::1;7063:347:1::0;27167:56:0::1;27239:9;27234:314;27258:9;:16:::0;27254:20;::::1;27234:314;;;27316:7;-1:-1:-1::0;;;;;27300:23:0::1;:9;27310:1;27300:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27300:12:0::1;:23:::0;27296:241:::1;;27359:9;27369:16:::0;;:20:::1;::::0;27388:1:::1;::::0;27369:20:::1;:::i;:::-;27359:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27344:9:::1;:12:::0;;-1:-1:-1;;;;;27359:31:0;;::::1;::::0;27354:1;;27344:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27344:46:0::1;-1:-1:-1::0;;;;;27344:46:0;;::::1;;::::0;;27409:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27448:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27448:28:0::1;::::0;;27495:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27495:15:0;;;;;-1:-1:-1;;;;;;27495:15:0::1;::::0;;;;;27234:314:::1;27091:464:::0;:::o;27296:241::-:1;27276:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27234:314;;;;27091:464:::0;:::o;12515:134::-;12590:4;12597:37;12606:10;12618:7;12627:6;12597:8;:37::i;:::-;-1:-1:-1;12643:4:0;12515:134;;;;;:::o;19424:117::-;19488:45;19507:10;19519:6;19527:5;19488:18;:45::i;:::-;19424:117;:::o;12929:309::-;13027:4;13044:36;13054:6;13062:9;13073:6;13044:9;:36::i;:::-;13091:117;13100:6;13108:10;13120:87;13156:6;13120:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13120:19:0;;;;;;:11;:19;;;;;;;;13140:10;13120:31;;;;;;;;;:87;:35;:87::i;:::-;13091:8;:117::i;:::-;-1:-1:-1;13226:4:0;12929:309;;;;;:::o;26748:335::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26833:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26832:21;26824:61;;;::::0;-1:-1:-1;;;26824:61:0;;8286:2:1;26824:61:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;8364:29;8344:18;;;8337:57;8411:18;;26824:61:0::1;8084:351:1::0;26824:61:0::1;-1:-1:-1::0;;;;;26899:16:0;::::1;26918:1;26899:16:::0;;;:7:::1;:16;::::0;;;;;:20;26896:108:::1;;-1:-1:-1::0;;;;;26975:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26955:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26936:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26896:108:::1;-1:-1:-1::0;;;;;27014:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27014:27:0::1;27037:4;27014:27:::0;;::::1;::::0;;;27052:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27052:23:0::1;::::0;;::::1;::::0;;26748:335::o;22209:83::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;22263:14:::1;:21:::0;;-1:-1:-1;;22263:21:0::1;22280:4;22263:21;::::0;;22209:83::o;25844:143::-;25897:7;25924:55;25957:21;25975:1;25957:9;:21::i;:::-;25946:4;;25924:28;;25936:15;;-1:-1:-1;;;;;25946:4:0;25936:9;:15::i;:::-;25924:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;25917:62;;25844:143;:::o;24091:182::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;24201:36:::1;24230:6;24201:24;24213:11;24201:7;;:11;;:24;;;;:::i;:::-;:28:::0;::::1;:36::i;:::-;24188:10;:49:::0;24239:11:::1;:26:::0;-1:-1:-1;24091:182:0:o;26492:248::-;26558:7;26597;;26586;:18;;26578:73;;;;-1:-1:-1;;;26578:73:0;;8642:2:1;26578:73:0;;;8624:21:1;8681:2;8661:18;;;8654:30;8720:34;8700:18;;;8693:62;-1:-1:-1;;;8771:18:1;;;8764:40;8821:19;;26578:73:0;8440:406:1;26578:73:0;26662:19;26685:10;:8;:10::i;:::-;26662:33;-1:-1:-1;26713:19:0;26662:33;26713:7;:19;:::i;:::-;26706:26;26492:248;-1:-1:-1;;;26492:248:0:o;24520:182::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;24640:16:::1;::::0;24600:21:::1;::::0;-1:-1:-1;;;;;24640:16:0::1;24632:62;24667:26;24689:3;24667:17;24600:21:::0;24681:2;24667:13:::1;:17::i;:26::-;24632:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24569:133;24520:182:::0;:::o;13246:209::-;13360:10;13334:4;13381:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13381:32:0;;;;;;;;;;13334:4;;13351:74;;13372:7;;13381:43;;13414:10;;13381:43;:::i;25995:489::-;26085:7;26124;;26113;:18;;26105:62;;;;-1:-1:-1;;;26105:62:0;;9405:2:1;26105:62:0;;;9387:21:1;9444:2;9424:18;;;9417:30;9483:33;9463:18;;;9456:61;9534:18;;26105:62:0;9203:355:1;26105:62:0;26183:17;26178:299;;26217:28;26248:46;26259:7;26268:4;26274:5;26281;26288;26248:10;:46::i;:::-;26316:9;;-1:-1:-1;26309:16:0;;-1:-1:-1;26309:16:0;26178:299;26358:28;26389:46;26400:7;26409:4;26415:5;26422;26429;26389:10;:46::i;:::-;26457:17;;;;-1:-1:-1;26450:24:0;;-1:-1:-1;26450:24:0;19549:103;19606:38;19618:10;19630:6;19638:5;19606:11;:38::i;22300:175::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;22392:19:::1;::::0;22372:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;:::-;22354:15;:58:::0;22454:12:::1;::::0;22434:33:::1;::::0;:15:::1;::::0;:19:::1;:33::i;:::-;22423:8;:44:::0;22300:175::o;12057:173::-;-1:-1:-1;;;;;12137:20:0;;12123:7;12137:20;;;:11;:20;;;;;;;;12133:49;;;-1:-1:-1;;;;;;12166:16:0;;;;;:7;:16;;;;;;;12057:173::o;12133:49::-;-1:-1:-1;;;;;12211:16:0;;;;;;:7;:16;;;;;;12191:37;;:19;:37::i;22634:124::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22718:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22718:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22634:124::o;22766:442::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;22925:8:::1;:15:::0;;;22942:7:::1;:15:::0;;;22959:11:::1;:20:::0;;;22990:8:::1;:27:::0;;;23028:18;:31;;;23070:18;:31;;;23132:11:::1;::::0;23120:23;::::1;::::0;::::1;::::0;:49:::1;;;23158:11;;23147:7;;:22;;23120:49;:79;;;;;23188:11;;23173;;:26;;23120:79;23112:88;;;::::0;::::1;;22766:442:::0;;;;;;:::o;25137:445::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;25221:13:::1;25237:43;25267:11;;25237:17;25249:4;25237:7;;:11;;:17;;;;:::i;:43::-;25221:59;;25291:17;25311:46;25344:11;;25311:20;25323:7;25311;;:11;;:20;;;;:::i;:46::-;25291:66;;25359:13;25375:26;25394:6;25375:14;25387:1;25375:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25359:42;;25429:5;25420;:14;;:36;;;;;25451:5;25438:9;:18;;25420:36;25412:102;;;::::0;-1:-1:-1;;;25412:102:0;;9765:2:1;25412:102:0::1;::::0;::::1;9747:21:1::0;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:51;9955:19;;25412:102:0::1;9563:417:1::0;25412:102:0::1;-1:-1:-1::0;25525:12:0::1;:20:::0;;;;25547:15:::1;:27:::0;-1:-1:-1;;25137:445:0:o;13736:157::-;-1:-1:-1;;;;;13869:15:0;;13801:7;13869:15;;;:7;:15;;;;;;;;;13848:7;:15;;;;;;13828:57;;13869:15;13828:36;;:19;:36::i;24710:117::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24791:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24791:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24710:117::o;23216:322::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;23334:18:::1;:31:::0;;-1:-1:-1;;;;;23334:31:0;;::::1;-1:-1:-1::0;;;;;;23334:31:0;;::::1;::::0;::::1;::::0;;;23367:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23400:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23334:18:::1;23438:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;23438:30:0;;::::1;23334:31:::0;23438:30;;::::1;::::0;;;23470:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23502:21;;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23216:322::o;24281:231::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;24419:43:::1;24455:6;24419:31;24431:18;24419:7;;:11;;:31;;;;:::i;:43::-;24399:17;:63:::0;24464:18:::1;:40:::0;-1:-1:-1;24281:231:0:o;22483:143::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;22558:4:::1;:18:::0;;-1:-1:-1;;;;;22558:18:0;;::::1;-1:-1:-1::0;;;;;;22558:18:0;;::::1;::::0;::::1;::::0;;:4:::1;22578:33:::0;;;:11:::1;:33;::::0;;;;:40;;-1:-1:-1;;22578:40:0::1;22558:18:::0;22578:40:::1;::::0;;22483:143::o;13463:265::-;13556:4;13573:125;13582:10;13594:7;13603:94;13640:15;13603:94;;;;;;;;;;;;;;;;;13615:10;13603:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13603:32:0;;;;;;;;;;;:94;:36;:94::i;12236:140::-;12314:4;12321:40;12331:10;12343:9;12354:6;12321:9;:40::i;25590:246::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;25712:39:::1;::::0;-1:-1:-1;;;25712:39:0;;25745:4:::1;25712:39;::::0;::::1;5156:51:1::0;25697:12:0::1;::::0;-1:-1:-1;;;;;25712:24:0;::::1;::::0;::::1;::::0;5129:18:1;;25712:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25697:54:::0;-1:-1:-1;;;;;;25762:23:0;::::1;;25786:9:::0;25797:30:::1;25823:3;25797:21;25697:54:::0;25806:11;25797:8:::1;:21::i;:30::-;25762:66;::::0;-1:-1:-1;;;;;;25762:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10366:32:1;;;25762:66:0::1;::::0;::::1;10348:51:1::0;10415:18;;;10408:34;10321:18;;25762:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25686:150;25590:246:::0;;;:::o;23926:157::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;24022:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;24022:21:0::1;-1:-1:-1::0;;;;24022:21:0;;::::1;::::0;;;::::1;::::0;;;24045:19:::1;:30:::0;23926:157::o;23782:136::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;23871:4:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;23871:14:0::1;-1:-1:-1::0;;;;23871:14:0;;::::1;::::0;;;::::1;::::0;;;23887:12:::1;:23:::0;23782:136::o;24835:294::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;24963:10:::1;:24:::0;;;25005:7:::1;::::0;:48:::1;::::0;25045:6:::1;::::0;25005:27:::1;::::0;25017:14;25005:11:::1;:27::i;:48::-;24989:13;:64:::0;25073:7:::1;::::0;:48:::1;::::0;25113:6:::1;::::0;25073:27:::1;::::0;25085:14;25073:11:::1;:27::i;:48::-;25055:15;:66:::0;-1:-1:-1;;;24835:294:0:o;23546:228::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;23644:17:::1;:32:::0;;-1:-1:-1;;;;;23644:32:0;;::::1;-1:-1:-1::0;;;;;;23644:32:0;;::::1;::::0;::::1;::::0;;;23678:10:::1;:18:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23644:17:::1;23707:25:::0;;;:11:::1;:25;::::0;;;;;:32;;-1:-1:-1;;23707:32:0;;::::1;23644::::0;23707;;::::1;::::0;;;23741:18;;;;;:25;;;;::::1;::::0;;::::1;::::0;;23546:228::o;6312:111::-;6274:4;6299:5;-1:-1:-1;;;;;6299:5:0;6186:10;6288:16;6170:38;;;;-1:-1:-1;;;6170:38:0;;;;;;;:::i;:::-;6378:5:::1;:11:::0;;-1:-1:-1;;;;;;6378:11:0::1;-1:-1:-1::0;;;;;6378:11:0;::::1;::::0;;::::1;::::0;;;6396:25:::1;::::0;5156:51:1;;;6396:25:0::1;::::0;5144:2:1;5129:18;6396:25:0::1;;;;;;;6312:111:::0;:::o;262:82::-;320:7;337:5;341:1;337;:5;:::i;13901:335::-;-1:-1:-1;;;;;13994:19:0;;13986:68;;;;-1:-1:-1;;;13986:68:0;;11121:2:1;13986:68:0;;;11103:21:1;11160:2;11140:18;;;11133:30;11199:34;11179:18;;;11172:62;-1:-1:-1;;;11250:18:1;;;11243:34;11294:19;;13986:68:0;10919:400:1;13986:68:0;-1:-1:-1;;;;;14073:21:0;;14065:68;;;;-1:-1:-1;;;14065:68:0;;11526:2:1;14065:68:0;;;11508:21:1;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;-1:-1:-1;;;11655:18:1;;;11648:32;11697:19;;14065:68:0;11324:398:1;14065:68:0;-1:-1:-1;;;;;14144:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14196:32;;160:25:1;;;14196:32:0;;133:18:1;14196:32:0;;;;;;;13901:335;;;:::o;17936:780::-;18036:12;:19;;-1:-1:-1;;;;18036:19:0;-1:-1:-1;;;18036:19:0;;;18066:304;;;;18084:22;18109:69;18166:11;;18109:52;18142:18;;18109:28;18119:17;;;;;;;;;-1:-1:-1;;;;;18119:17:0;18109:9;:28::i;:::-;:32;;:52::i;:69::-;18084:94;;18209:6;18192:14;:23;18189:53;;;18226:14;18217:23;;18189:53;18287:17;;18252:22;;18277:28;;-1:-1:-1;;;;;18287:17:0;18277:9;:28::i;:::-;18252:53;;18336:6;18319:14;:23;18316:53;;;18353:14;18344:23;;18316:53;18083:287;;18066:304;18398:15;;:27;;18418:6;18398:19;:27::i;:::-;18380:15;:45;18458:15;18436:19;:37;18508:21;;:37;;18542:1;18508:25;:37::i;:::-;18484:21;:61;18556:39;18565:6;18581:4;18588:6;18556:8;:39::i;:::-;18606:71;18621:6;18637:3;18643:6;18651:5;18658;18665;18672:4;18606:14;:71::i;:::-;-1:-1:-1;;18688:12:0;:20;;-1:-1:-1;;;;18688:20:0;;;-1:-1:-1;17936:780:0:o;14244:594::-;14333:37;14344:6;14352:9;14363:6;14333:10;:37::i;:::-;14381:38;14401:6;14409:9;14381:19;:38::i;:::-;14430:41;14445:6;14453:9;14464:6;14430:14;:41::i;:::-;14483:39;14496:9;14507:6;14515;14483:12;:39::i;:::-;14533:35;14550:6;14558:9;14533:16;:35::i;:::-;14579;14588:6;14596:9;14607:6;14579:8;:35::i;:::-;14625:33;14640:6;14648:9;14625:14;:33::i;:::-;-1:-1:-1;;;;;14713:19:0;;;;;;:11;:19;;;;;;14669:161;;14684:6;;14692:9;;14703:6;;14713:19;;;:45;;-1:-1:-1;;;;;;14736:22:0;;;;;;:11;:22;;;;;;;;14713:45;:57;;;-1:-1:-1;14762:8:0;;;;14713:57;:73;;;-1:-1:-1;14774:12:0;;-1:-1:-1;;;14774:12:0;;;;14713:73;14802:4;;14711:76;;;-1:-1:-1;;;;;14802:4:0;;;14789:17;;;;;;14808:14;;;14802:4;14669:14;:161::i;1563:162::-;1649:7;1695:12;1687:6;;;;1679:29;;;;-1:-1:-1;;;1679:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1717:5:0;;;1563:162::o;350:82::-;408:7;425:5;429:1;425;:5;:::i;438:82::-;496:7;513:5;517:1;513;:5;:::i;526:82::-;584:7;601:5;605:1;601;:5;:::i;30783:158::-;30824:7;30845:15;30862;30881:19;:17;:19::i;:::-;30844:56;;-1:-1:-1;30844:56:0;-1:-1:-1;30918:15:0;30844:56;;30918:15;:::i;:::-;30911:22;;;;30783:158;:::o;27827:444::-;27950:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27950:36:0;28011:64;28023:7;28032;28041:6;28049:10;28061:13;28011:11;:64::i;:::-;27999:76;;28169:67;28181:9;28192:7;28201;28210:10;:8;:10::i;:::-;28222:13;28169:11;:67::i;:::-;28149:16;;;28086:150;28133:14;;;28086:150;28106:25;;;28086:150;;;27827:444;;;;;;;;:::o;18724:692::-;18810:12;:19;;-1:-1:-1;;;;18810:19:0;-1:-1:-1;;;18810:19:0;;;18840:259;;;;18851:19;18873:55;18916:11;;18873:38;18899:11;;18873:21;18883:10;;;;;;;;;-1:-1:-1;;;;;18883:10:0;18873:9;:21::i;:55::-;18851:77;;18956:6;18942:11;:20;18939:47;;;18973:11;18964:20;;18939:47;19028:10;;18996:19;;19018:21;;-1:-1:-1;;;;;19028:10:0;19018:9;:21::i;:::-;18996:43;;19068:6;19053:11;:21;19050:48;;19085:11;19076:20;;19050:48;18850:249;;18840:259;19121:9;;:21;;19135:6;19121:13;:21::i;:::-;19109:9;:33;19168:15;19153:12;:30;19212:15;;:31;;19240:1;19212:19;:31::i;:::-;19194:15;:49;19254:39;19263:6;19279:4;19286:6;19254:8;:39::i;:::-;19335:4;;19304:73;;19319:6;;-1:-1:-1;;;;;19335:4:0;19342:6;19335:4;;;;16393:863;16552:28;16583:63;16594:7;16603;16612:6;16620:10;16632:13;16583:10;:63::i;:::-;-1:-1:-1;;;;;16660:19:0;;;;;;:11;:19;;;;;;16552:94;;-1:-1:-1;16660:19:0;;16657:83;;;-1:-1:-1;;;;;16715:15:0;;;;;;:7;:15;;;;;;:23;;16731:7;;16715:23;:::i;:::-;-1:-1:-1;;;;;16697:15:0;;;;;;:7;:15;;;;;:41;16657:83;-1:-1:-1;;;;;16753:22:0;;;;;;:11;:22;;;;;;;;16750:101;;;16832:17;;;;-1:-1:-1;;;;;16813:18:0;;;;;;:7;:18;;;;;;:36;;16832:17;16813:36;:::i;:::-;-1:-1:-1;;;;;16792:18:0;;;;;;:7;:18;;;;;:57;16750:101;16895:9;;-1:-1:-1;;;;;16879:15:0;;16895:9;16879:15;;;:7;:15;;;;;;:25;;16895:9;16879:25;:::i;:::-;-1:-1:-1;;;;;16861:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16955:17;;;16936:18;;;;;;;;;;:36;;16955:17;16936:36;:::i;:::-;-1:-1:-1;;;;;16915:18:0;;;;;;:7;:18;;;;;;;:57;;;;16995:6;;;17003;;;;16983:42;;16995:6;17011:13;16983:11;:42::i;:::-;17036:30;17047:1;:8;;;17057:1;:8;;;17036:10;:30::i;:::-;17080:17;;;;:30;17077:88;;17134:9;-1:-1:-1;;;;;17117:46:0;17126:6;-1:-1:-1;;;;;17117:46:0;;17145:1;:17;;;17117:46;;;;160:25:1;;148:2;133:18;;14:177;17117:46:0;;;;;;;;17077:88;17178:8;;;;:21;17175:74;;17231:4;-1:-1:-1;;;;;17206:41:0;17215:6;-1:-1:-1;;;;;17206:41:0;;17238:1;:8;;;17206:41;;;;160:25:1;;148:2;133:18;;14:177;17206:41:0;;;;;;;;17175:74;16541:715;16393:863;;;;;;;:::o;14846:355::-;-1:-1:-1;;;;;14950:20:0;;14942:70;;;;-1:-1:-1;;;14942:70:0;;12102:2:1;14942:70:0;;;12084:21:1;12141:2;12121:18;;;12114:30;12180:34;12160:18;;;12153:62;-1:-1:-1;;;12231:18:1;;;12224:35;12276:19;;14942:70:0;11900:401:1;14942:70:0;-1:-1:-1;;;;;15031:23:0;;15023:71;;;;-1:-1:-1;;;15023:71:0;;12508:2:1;15023:71:0;;;12490:21:1;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:33;12680:19;;15023:71:0;12306:399:1;15023:71:0;15123:17;15133:6;15123:9;:17::i;:::-;15113:6;:27;;15105:88;;;;-1:-1:-1;;;15105:88:0;;12912:2:1;15105:88:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:47;13098:19;;15105:88:0;12710:413:1;15209:206:0;-1:-1:-1;;;;;15302:19:0;;;;;;:11;:19;;;;;;;;15301:20;:47;;;;-1:-1:-1;;;;;;15326:22:0;;;;;;:11;:22;;;;;;;;15325:23;15301:47;15298:110;;;15358:14;;;;15350:56;;;;-1:-1:-1;;;15350:56:0;;13330:2:1;15350:56:0;;;13312:21:1;13369:2;13349:18;;;13342:30;13408:31;13388:18;;;13381:59;13457:18;;15350:56:0;13128:353:1;15427:384:0;-1:-1:-1;;;;;15531:22:0;;;;;;:11;:22;;;;;;;;15530:23;:47;;;;-1:-1:-1;;;;;;15558:19:0;;;;;;:11;:19;;;;;;;;15557:20;15530:47;:77;;;;-1:-1:-1;;;;;;15581:26:0;;15602:4;15581:26;;15530:77;:107;;;;-1:-1:-1;15632:4:0;;-1:-1:-1;;;;;15611:26:0;;;15632:4;;15611:26;;15530:107;:128;;;;-1:-1:-1;15654:4:0;;-1:-1:-1;;;;;15641:17:0;;;15654:4;;15641:17;;15530:128;:163;;;;-1:-1:-1;15675:18:0;;-1:-1:-1;;;;;15662:31:0;;;15675:18;;15662:31;;15530:163;15527:277;;;15752:15;;15741:6;15718:20;15728:9;15718;:20::i;:::-;:29;;;;:::i;:::-;15717:50;;15709:93;;;;-1:-1:-1;;;15709:93:0;;13688:2:1;15709:93:0;;;13670:21:1;13727:2;13707:18;;;13700:30;13766:32;13746:18;;;13739:60;13816:18;;15709:93:0;13486:354:1;16021:193:0;16130:12;;16120:6;:22;;:45;;;-1:-1:-1;;;;;;16146:19:0;;;;;;:11;:19;;;;;;;;16120:45;:64;;;-1:-1:-1;;;;;;16169:15:0;;;;;;:11;:15;;;;;;;;16120:64;16112:94;;;;-1:-1:-1;;;16112:94:0;;14047:2:1;16112:94:0;;;14029:21:1;14086:2;14066:18;;;14059:30;-1:-1:-1;;;14105:18:1;;;14098:47;14162:18;;16112:94:0;13845:341:1;15819:194:0;15916:4;;-1:-1:-1;;;;;15903:17:0;;;15916:4;;15903:17;:41;;;;-1:-1:-1;;;;;;15925:19:0;;;;;;:11;:19;;;;;;;;15924:20;15903:41;:54;;;;-1:-1:-1;15949:8:0;;;;15948:9;15903:54;:71;;;;-1:-1:-1;15962:12:0;;-1:-1:-1;;;15962:12:0;;;;15961:13;15903:71;15900:106;;;15988:9;;:16;;16002:1;15988:13;:16::i;:::-;15976:9;:28;15819:194;;:::o;20099:188::-;20191:41;20206:6;20214:9;20225:6;20191:14;:41::i;:::-;20188:92;;;20234:29;20249:13;;20234:14;:29::i;:::-;20277:1;20265:9;:13;20099:188;;;:::o;17264:664::-;17365:15;17346;;:34;;:47;;;;-1:-1:-1;17385:8:0;;;;17384:9;17346:47;:68;;;;-1:-1:-1;17410:4:0;;-1:-1:-1;;;;;17397:17:0;;;17410:4;;17397:17;17346:68;:92;;;;-1:-1:-1;;;;;;17419:19:0;;;;;;:11;:19;;;;;;;;17418:20;17346:92;:107;;;;-1:-1:-1;17442:11:0;;-1:-1:-1;;;17442:11:0;;;;17346:107;:152;;;;-1:-1:-1;17467:17:0;;17496:1;;17457:28;;-1:-1:-1;;;;;17467:17:0;17457:9;:28::i;:::-;:41;17346:152;:169;;;;-1:-1:-1;17503:12:0;;-1:-1:-1;;;17503:12:0;;;;17502:13;17346:169;17343:312;;;17550:17;;17569;;17531:62;;-1:-1:-1;;;;;17550:17:0;;;17531:18;:62::i;:::-;17633:19;;17613:40;;:15;;:19;:40::i;:::-;17595:15;:58;17343:312;17680:15;17668:8;;:27;;:40;;;;-1:-1:-1;17700:8:0;;;;17699:9;17668:40;:61;;;;-1:-1:-1;17725:4:0;;-1:-1:-1;;;;;17712:17:0;;;17725:4;;17712:17;17668:61;:85;;;;-1:-1:-1;;;;;;17734:19:0;;;;;;:11;:19;;;;;;;;17733:20;17668:85;:93;;;;-1:-1:-1;17757:4:0;;-1:-1:-1;;;17757:4:0;;;;17668:93;:131;;;;-1:-1:-1;17775:10:0;;17797:1;;17765:21;;-1:-1:-1;;;;;17775:10:0;17765:9;:21::i;:::-;:34;17668:131;:148;;;;-1:-1:-1;17804:12:0;;-1:-1:-1;;;17804:12:0;;;;17803:13;17668:148;17665:256;;;17844:10;;17856;;17832:41;;-1:-1:-1;;;;;17844:10:0;;;17832:11;:41::i;:::-;17906:12;;17886:33;;:15;;:19;:33::i;:::-;17875:8;:44;17264:664;;:::o;30949:531::-;31046:7;;31082;;30999;;;;;31100:270;31124:9;:16;31120:20;;31100:270;;;31190:7;31166;:21;31174:9;31184:1;31174:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31174:12:0;31166:21;;;;;;;;;;;;;:31;;:66;;;31225:7;31201;:21;31209:9;31219:1;31209:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31209:12:0;31201:21;;;;;;;;;;;;;:31;31166:66;31162:97;;;31242:7;;31251;;31234:25;;;;;;;30949:531;;:::o;31162:97::-;31292:7;:21;31300:9;31310:1;31300:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31300:12:0;31292:21;;;;;;;;;;;;;31284:29;;:7;:29;:::i;:::-;31274:39;;31346:7;:21;31354:9;31364:1;31354:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31354:12:0;31346:21;;;;;;;;;;;;;31338:29;;:7;:29;:::i;:::-;31328:39;-1:-1:-1;31142:3:0;;;;:::i;:::-;;;;31100:270;;;;31402:7;;31394;;:15;;;;:::i;:::-;31384:7;:25;31380:56;;;31419:7;;31428;;31411:25;;;;;;30949:531;;:::o;31380:56::-;31455:7;;31464;;-1:-1:-1;30949:531:0;-1:-1:-1;30949:531:0:o;28497:1361::-;28621:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28621:28:0;28666:7;28665:8;:26;;;;;28678:13;28677:14;28665:26;:77;;;;28695:29;28705:6;28713:10;28695:9;:29::i;:::-;:47;;;;;28729:13;28728:14;28695:47;28662:146;;;28757:17;;;:27;;;28797:8;;28662:146;28822:6;28821:7;:22;;;;;28833:10;28832:11;28821:22;:40;;;;;28848:13;28847:14;28821:40;28818:311;;;28877:17;28897:41;28926:11;;28897:24;28909:11;;28897:7;:11;;:24;;;;:::i;:41::-;28877:61;;28972:11;;28956:8;:12;;;:27;28953:75;;29015:11;;29002:8;:12;28994:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28985:6;;;:41;28953:75;29067:6;;;;29053:21;;:9;;:13;:21::i;:::-;29042:8;;;:32;29109:17;29117:9;29109:7;:17;:::i;:::-;29089;;;:37;-1:-1:-1;28818:311:0;29142:6;:24;;;;;29153:13;29152:14;29142:24;29139:287;;;29182:17;29202:37;29227:11;;29202:20;29214:7;;29202;:11;;:20;;;;:::i;:37::-;29182:57;;29273:7;;29257:8;:12;;;:23;29254:71;;29312:11;;29299:8;:12;29291:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29282:6;;;:41;29254:71;29364:6;;;;29350:21;;:9;;:13;:21::i;:::-;29339:8;;;:32;29406:17;29414:9;29406:7;:17;:::i;:::-;29386;;;:37;-1:-1:-1;29139:287:0;29439:10;:28;;;;;29454:13;29453:14;29439:28;29436:293;;;29483:17;29503:38;29529:11;;29503:21;29515:8;;29503:7;:11;;:21;;;;:::i;:38::-;29483:58;;29575:8;;29559;:12;;;:24;29556:72;;29615:11;;29602:8;:12;29594:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29585:6;;;:41;29556:72;29667:6;;;;29653:21;;:9;;:13;:21::i;:::-;29642:8;;;:32;29709:17;29717:9;29709:7;:17;:::i;:::-;29689;;;:37;-1:-1:-1;29436:293:0;29742:13;29739:93;;;29771:6;;;:16;;;29802:17;;;:27;;;28497:1361;;;;;;;:::o;29866:705::-;30011:15;;;;30104:19;30112:11;30104:7;:19;:::i;:::-;30094:29;;30138:7;30137:8;:26;;;;;30150:13;30149:14;30137:26;30134:76;;;-1:-1:-1;30186:7:0;;-1:-1:-1;30204:1:0;;-1:-1:-1;30204:1:0;30179:29;;30134:76;30223:13;30220:161;;;30266:11;30259:1;:6;;;:18;;;;:::i;:::-;30252:25;-1:-1:-1;30311:12:0;30252:25;30311:7;:12;:::i;:::-;30292:31;-1:-1:-1;30377:1:0;;-1:-1:-1;30338:41:0;;30220:161;30405:11;30398:1;:6;;;:18;;;;:::i;:::-;30391:25;;30445:11;30436:1;:8;;;:20;;;;:::i;:::-;30427:29;-1:-1:-1;30427:29:0;30486:12;30494:4;30486:7;:12;:::i;:::-;:19;;;;:::i;:::-;30467:38;;29866:705;;;;;;;;;;;:::o;16222:163::-;16320:4;16310:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;16339:13:0;;-1:-1:-1;16335:43:0;;16372:4;16354:11;:15;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16222:163:0;;;:::o;27563:256::-;27654:6;27634:11;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;27696:4:0;27676:26;;;;:11;:26;;;;;;;;27673:97;;;27744:4;27728:22;;;;:7;:22;;;;;:30;;27752:6;;27728:22;:30;;27752:6;;27728:30;:::i;:::-;;;;-1:-1:-1;;27673:97:0;27796:4;27780:22;;;;:7;:22;;;;;:31;;27805:6;;27780:22;:31;;27805:6;;27780:31;:::i;:::-;;;;-1:-1:-1;;;;27563:256:0:o;19661:430::-;19759:4;19776:13;19802:15;;19792:6;:25;;19776:41;;19828:19;19878:13;;19850:24;19868:4;19850:9;:24::i;:::-;19910:8;;19850:41;-1:-1:-1;19850:41:0;;-1:-1:-1;19910:8:0;;19909:9;:24;;;;-1:-1:-1;19922:11:0;;;;;;;19909:24;:36;;;;;19937:8;19909:36;:60;;;;-1:-1:-1;;;;;;19950:19:0;;;;;;:11;:19;;;;;;;;19949:20;19909:60;:78;;;;-1:-1:-1;19973:14:0;;;;19909:78;:112;;;;-1:-1:-1;20017:4:0;;-1:-1:-1;;;;;20004:17:0;;;20017:4;;20004:17;19909:112;:139;;;;;20038:10;;20025:9;;:23;;19909:139;:157;;;;;20052:14;19909:157;:174;;;;-1:-1:-1;20071:12:0;;-1:-1:-1;;;20071:12:0;;;;20070:13;19909:174;19902:181;19661:430;-1:-1:-1;;;;;;19661:430:0:o;20295:1113::-;12883:8;:15;;-1:-1:-1;;12883:15:0;12894:4;12883:15;;;;;;20389:8:::1;::::0;12883;;20388:24:::1;::::0;20410:1:::1;::::0;20388:17:::1;::::0;20389:8;20388:14:::1;:17::i;:24::-;20365:47;;20426:8;;20438:1;20426:13:::0;20423:91:::1;;20479:18:::0;;20456;;:56:::1;::::0;20510:1:::1;::::0;20456:49:::1;::::0;20503:1:::1;::::0;20456:42:::1;::::0;:22:::1;:42::i;:::-;:46:::0;::::1;:49::i;:56::-;20441:71;;20423:91;20568:18:::0;;20524:32:::1;::::0;20589:12;;20559:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20524:77:::0;-1:-1:-1;20612:14:0::1;20629:33;20524:77:::0;20629:6;:33:::1;:::i;:::-;20612:50:::0;-1:-1:-1;20698:21:0::1;20730:24;20612:50:::0;20730:16:::1;:24::i;:::-;20765:20;20788:38;20812:14:::0;20788:21:::1;:38;:::i;:::-;20889:18:::0;;20765:61;;-1:-1:-1;20837:19:0::1;::::0;20874:33:::1;::::0;:12;:33:::1;:::i;:::-;20858:50;::::0;:12;:50:::1;:::i;:::-;20965:18:::0;;20837:71;;-1:-1:-1;20919:29:0::1;::::0;20951:32:::1;::::0;20837:71;20951:32:::1;:::i;:::-;20919:64:::0;-1:-1:-1;20997:25:0;;20994:108:::1;;21038:61;21051:24;21077:21;21038:12;:61::i;:::-;21161:18:::0;;21112:23:::1;::::0;21138:42:::1;::::0;:18:::1;:11:::0;21154:1:::1;21138:15;:18::i;:42::-;21112:68:::0;-1:-1:-1;21194:19:0;;21191:80:::1;;21223:18;::::0;21215:53:::1;::::0;-1:-1:-1;;;;;21223:18:0;;::::1;::::0;21215:53;::::1;;;::::0;21252:15;;21223:18:::1;21215:53:::0;21223:18;21215:53;21252:15;21223:18;21215:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21191:80;21299:21;21334:20:::0;;21331:70:::1;;21364:16;::::0;21356:43:::1;::::0;-1:-1:-1;;;;;21364:16:0;;::::1;::::0;21356:43;::::1;;;::::0;21391:7;;21364:16:::1;21356:43:::0;21364:16;21356:43;21391:7;21364:16;21356:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21331:70;-1:-1:-1::0;;12903:8:0;:16;;-1:-1:-1;;12903:16:0;;;-1:-1:-1;;;;;;;;20295:1113:0:o;28279:210::-;28351:4;28376:6;:22;;;;-1:-1:-1;28386:7:0;;:12;28376:22;28375:57;;;;28404:10;:27;;;;-1:-1:-1;28418:8:0;;:13;28404:27;28375:105;;;;28438:6;28437:7;:22;;;;;28449:10;28448:11;28437:22;:42;;;;-1:-1:-1;;28463:11:0;;:16;;28279:210;-1:-1:-1;;28279:210:0:o;21767:434::-;21857:16;;;21871:1;21857:16;;;;;;;;21833:21;;21857:16;;;;;;;;;;-1:-1:-1;21857:16:0;21833:40;;21902:4;21884;21889:1;21884:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21884:23:0;;;:7;;;;;;;;;;:23;;;;21928:6;;:13;;;-1:-1:-1;;;21928:13:0;;;;:6;;;;;:11;;:13;;;;;21884:7;;21928:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21918:4;21923:1;21918:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21918:23:0;;;:7;;;;;;;;;:23;21984:6;;21952:53;;21969:4;;21984:6;21993:11;21952:8;:53::i;:::-;22016:6;;:177;;-1:-1:-1;;;22016:177:0;;-1:-1:-1;;;;;22016:6:0;;;;:57;;:177;;22088:11;;22016:6;;22130:4;;22157;;22177:15;;22016:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21416:343;21529:6;;21497:53;;21514:4;;-1:-1:-1;;;;;21529:6:0;21538:11;21497:8;:53::i;:::-;21561:6;;21702:18;;21561:190;;-1:-1:-1;;;21561:190:0;;21624:4;21561:190;;;15905:34:1;15955:18;;;15948:34;;;21561:6:0;15998:18:1;;;15991:34;;;16041:18;;;16034:34;-1:-1:-1;;;;;21702:18:0;;;16084:19:1;;;16077:44;21735:15:0;16137:19:1;;;16130:35;21561:6:0;;;:22;;21591:9;;15839:19:1;;21561:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2295:248::-;2363:6;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;-1:-1:-1;;2463:23:1;;;2533:2;2518:18;;;2505:32;;-1:-1:-1;2295:248:1:o;2737:118::-;2823:5;2816:13;2809:21;2802:5;2799:32;2789:60;;2845:1;2842;2835:12;2860:309;2925:6;2933;2986:2;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3038:9;3025:23;3015:33;;3098:2;3087:9;3083:18;3070:32;3111:28;3133:5;3111:28;:::i;:::-;3158:5;3148:15;;;2860:309;;;;;:::o;3174:382::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3355:9;3342:23;3374:28;3396:5;3374:28;:::i;:::-;3421:5;-1:-1:-1;3478:2:1;3463:18;;3450:32;3491:33;3450:32;3491:33;:::i;3561:523::-;3665:6;3673;3681;3689;3697;3705;3758:3;3746:9;3737:7;3733:23;3729:33;3726:53;;;3775:1;3772;3765:12;3726:53;-1:-1:-1;;3798:23:1;;;3868:2;3853:18;;3840:32;;-1:-1:-1;3919:2:1;3904:18;;3891:32;;3970:2;3955:18;;3942:32;;-1:-1:-1;4021:3:1;4006:19;;3993:33;;-1:-1:-1;4073:3:1;4058:19;4045:33;;-1:-1:-1;3561:523:1;-1:-1:-1;3561:523:1:o;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;4476:529::-;4553:6;4561;4569;4622:2;4610:9;4601:7;4597:23;4593:32;4590:52;;;4638:1;4635;4628:12;4590:52;4677:9;4664:23;4696:31;4721:5;4696:31;:::i;:::-;4746:5;-1:-1:-1;4803:2:1;4788:18;;4775:32;4816:33;4775:32;4816:33;:::i;:::-;4868:7;-1:-1:-1;4927:2:1;4912:18;;4899:32;4940:33;4899:32;4940:33;:::i;:::-;4992:7;4982:17;;;4476:529;;;;;:::o;5218:388::-;5286:6;5294;5347:2;5335:9;5326:7;5322:23;5318:32;5315:52;;;5363:1;5360;5353:12;5315:52;5402:9;5389:23;5421:31;5446:5;5421:31;:::i;5611:309::-;5676:6;5684;5737:2;5725:9;5716:7;5712:23;5708:32;5705:52;;;5753:1;5750;5743:12;5705:52;5792:9;5779:23;5811:28;5833:5;5811:28;:::i;5925:316::-;6002:6;6010;6018;6071:2;6059:9;6050:7;6046:23;6042:32;6039:52;;;6087:1;6084;6077:12;6039:52;-1:-1:-1;;6110:23:1;;;6180:2;6165:18;;6152:32;;-1:-1:-1;6231:2:1;6216:18;;;6203:32;;5925:316;-1:-1:-1;5925:316:1:o;6729:329::-;6931:2;6913:21;;;6970:1;6950:18;;;6943:29;-1:-1:-1;;;7003:2:1;6988:18;;6981:36;7049:2;7034:18;;6729:329::o;7415:127::-;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:127;7608:10;7603:3;7599:20;7596:1;7589:31;7639:4;7636:1;7629:15;7663:4;7660:1;7653:15;7679:128;7746:9;;;7767:11;;;7764:37;;;7781:18;;:::i;7812:127::-;7873:10;7868:3;7864:20;7861:1;7854:31;7904:4;7901:1;7894:15;7928:4;7925:1;7918:15;7944:135;7983:3;8004:17;;;8001:43;;8024:18;;:::i;:::-;-1:-1:-1;8071:1:1;8060:13;;7944:135::o;8851:217::-;8891:1;8917;8907:132;;8961:10;8956:3;8952:20;8949:1;8942:31;8996:4;8993:1;8986:15;9024:4;9021:1;9014:15;8907:132;-1:-1:-1;9053:9:1;;8851:217::o;9073:125::-;9138:9;;;9159:10;;;9156:36;;;9172:18;;:::i;9985:184::-;10055:6;10108:2;10096:9;10087:7;10083:23;10079:32;10076:52;;;10124:1;10121;10114:12;10076:52;-1:-1:-1;10147:16:1;;9985:184;-1:-1:-1;9985:184:1:o;10453:245::-;10520:6;10573:2;10561:9;10552:7;10548:23;10544:32;10541:52;;;10589:1;10586;10579:12;10541:52;10621:9;10615:16;10640:28;10662:5;10640:28;:::i;11727:168::-;11800:9;;;11831;;11848:15;;;11842:22;;11828:37;11818:71;;11869:18;;:::i;14323:251::-;14393:6;14446:2;14434:9;14425:7;14421:23;14417:32;14414:52;;;14462:1;14459;14452:12;14414:52;14494:9;14488:16;14513:31;14538:5;14513:31;:::i;14579:980::-;14841:4;14889:3;14878:9;14874:19;14920:6;14909:9;14902:25;14946:2;14984:6;14979:2;14968:9;14964:18;14957:34;15027:3;15022:2;15011:9;15007:18;15000:31;15051:6;15086;15080:13;15117:6;15109;15102:22;15155:3;15144:9;15140:19;15133:26;;15194:2;15186:6;15182:15;15168:29;;15215:1;15225:195;15239:6;15236:1;15233:13;15225:195;;;15304:13;;-1:-1:-1;;;;;15300:39:1;15288:52;;15395:15;;;;15360:12;;;;15336:1;15254:9;15225:195;;;-1:-1:-1;;;;;;;15476:32:1;;;;15471:2;15456:18;;15449:60;-1:-1:-1;;;15540:3:1;15525:19;15518:35;15437:3;14579:980;-1:-1:-1;;;14579:980:1:o;16176:306::-;16264:6;16272;16280;16333:2;16321:9;16312:7;16308:23;16304:32;16301:52;;;16349:1;16346;16339:12;16301:52;16378:9;16372:16;16362:26;;16428:2;16417:9;16413:18;16407:25;16397:35;;16472:2;16461:9;16457:18;16451:25;16441:35;;16176:306;;;;;:::o

Swarm Source

ipfs://4e93d712a7ab2c1616b82191dec4b19c86570ee0285f131067269220dfdb80c1
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.