ETH Price: $3,911.04 (+0.53%)

Token

ERC-20: Aries (ARIES)
 

Overview

Max Total Supply

10,000,000,000,000 ARIES

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: ARIES 10
Balance
54,443,512,829.664302586 ARIES

Value
$0.00
0x634af0da0ad6f8d7abd4a13189ff9b6cbf5057b4
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:
Aries

Compiler Version
v0.8.19+commit.7dd6d404

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

//https://t.me/AriesERC
//https://twitter.com/AriesERC
//http://arieserc.vip/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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 Aries is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Aries';
    string private constant _symbol = 'ARIES';
    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 * 200 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 200 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0
    });
    uint256 internal totalFee = 3000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = true;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x66C0EC18c3933BdF7976c1D3Bf38f26543a89b51;
    address internal marketing_receiver = 0x66C0EC18c3933BdF7976c1D3Bf38f26543a89b51;
    address internal default_receiver = 0x66C0EC18c3933BdF7976c1D3Bf38f26543a89b51;
    address internal reflectionsWallet = 0x1226b683b151E2b97E373a54a6e8B37db304709E;
    address internal burnWallet = 0xa60E55a02e1D74Fd1C809f969530a04E71ef03D0;

    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 * 10000 ) / 100000;
    uint256 public burnAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public reflectionsPercent = 100;
    uint256 public burnPercent = 100;
    uint256 public reflectionsTime;
    uint256 public lastReflectionsTime;
    uint256 public burnTime;
    uint256 public lastBurnTime;
    uint256 public reflectionsInterval = 30 minutes;
    uint256 public burnInterval = 25 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);
        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"}]

6080604052620000126009600a6200069a565b62000024906509184e72a000620006ab565b60018190556200003790600019620006db565b6200004590600019620006f2565b60025561271060015460c86200005c9190620006ab565b62000068919062000708565b60035561271060015460c86200007f9190620006ab565b6200008b919062000708565b600455604080516060810182526000808252606460208301819052919092018290526005829055600655600755610bb86008556117706009819055600a55612710600b55600c805461ff001916610100179055600154620186a090620000f4906103e8620006ab565b62000100919062000708565b600d55620186a0600154600a620001189190620006ab565b62000124919062000708565b600e55600f805460ff191660019081179091556011819055601280546001600160a01b031990811661dead179091556013805482167366c0ec18c3933bdf7976c1d3bf38f26543a89b51908117909155601480548316821790556015805483169091179055601680548216731226b683b151e2b97e373a54a6e8b37db304709e1790556017805490911673a60e55a02e1d74fd1c809f969530a04e71ef03d0179055601f805461010160a81b61ffff60a81b1990911617905554620186a090620001f190612710620006ab565b620001fd919062000708565b602055620186a0600154612710620002169190620006ab565b62000222919062000708565b602155606460225560646023556107086028556105dc6029553480156200024857600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d691906200071f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a91906200071f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200071f565b601e80546001600160a01b038086166001600160a01b031992831617909255601f8054838516921691909117905560025460008054909216825260186020526040909120556028549091506200041690429062000570565b6024556029546200042990429062000570565b602655601f546001600160a01b039081166000908152601b602090815260408083208054600160ff199182168117909255308086528386208054831684179055601280548816875284872080548416851790557f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea8054841685179055338752601c8652848720805484168517905590865283862080548316841790556013548716865283862080548316841790556014548716865283862080548316841790556015548716865283862080548316841790556016548716865283862080548316841790556017548716865283862080548316841790555486168552828520805490911682179055835490549151918252909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000767565b60006200057e828462000751565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005de578160001904821115620005c257620005c262000587565b80851615620005d057918102915b93841c9390800290620005a2565b509250929050565b600082620005f75750600162000581565b81620006065750600062000581565b81600181146200061f57600281146200062a576200064a565b600191505062000581565b60ff8411156200063e576200063e62000587565b50506001821b62000581565b5060208310610133831016604e8410600b84101617156200066f575081810a62000581565b6200067b83836200059d565b806000190482111562000692576200069262000587565b029392505050565b60006200057e60ff841683620005e6565b808202811582820484141762000581576200058162000587565b634e487b7160e01b600052601260045260246000fd5b600082620006ed57620006ed620006c5565b500690565b8181038181111562000581576200058162000587565b6000826200071a576200071a620006c5565b500490565b6000602082840312156200073257600080fd5b81516001600160a01b03811681146200074a57600080fd5b9392505050565b8082018082111562000581576200058162000587565b61346780620007776000396000f3fe60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a98578063f09f694e14610aae578063f2fde38b14610ace578063f887ea4014610aee57600080fd5b8063e480034514610a2d578063e55a68b314610a4d578063e94dd17c14610a63578063e960e68e14610a8357600080fd5b8063d1571e47116100dc578063d1571e4714610990578063dd62ed3e146109b1578063dfa5f4ea146109f7578063e306744914610a1757600080fd5b8063a9059cbb1461093a578063b2118a8d1461095a578063ca221c081461097a57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ac578063a22d4832146108c2578063a457c2d7146108e2578063a8aa1b311461090257600080fd5b80638ebfc7961461081e5780639213c3581461083e57806395b186411461085e57806395d89b411461087e57600080fd5b806384836778116101b657806384836778146107a857806384b81093146107c8578063884870c7146107de5780638cf2e94a146107fe57600080fd5b80637934f4f2146107435780637d1db4a5146107595780637d459db31461076f57600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d857806370a08231146106ed57806378109e541461070d578063783b5a0a1461072357600080fd5b806344df8e70146106615780634549b03914610682578063486a7e6b146106a257806354b822cf146106b857600080fd5b8063395093511161029b57806339509351146105e55780633c9f861d146106055780633f4218e01461061b578063404ca34a1461064b57600080fd5b80633052ea0814610593578063313ce567146105b357806337f0d4c8146105cf57600080fd5b806322849720116103395780632b112e49116103085780632b112e491461050f5780632cbf5360146105245780632d838119146105445780632f54bf6e1461056457600080fd5b806322849720146104a457806323b872dd146104ba57806327334a08146104da578063293230b8146104fa57600080fd5b8063095ea7b311610375578063095ea7b3146104295780630e7daf6d1461045957806311403aec1461046f57806318160ddd1461048f57600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f75565b610b0e565b005b3480156103fe57600080fd5b50604080518082019091526005815264417269657360d81b60208201525b6040516103c79190612f92565b34801561043557600080fd5b50610449610444366004612fe0565b610ccd565b60405190151581526020016103c7565b34801561046557600080fd5b506103bd60225481565b34801561047b57600080fd5b506103f061048a36600461300c565b610ce4565b34801561049b57600080fd5b506001546103bd565b3480156104b057600080fd5b506103bd602b5481565b3480156104c657600080fd5b506104496104d5366004613025565b610cf3565b3480156104e657600080fd5b506103f06104f5366004612f75565b610d5c565b34801561050657600080fd5b506103f0610eaf565b34801561051b57600080fd5b506103bd610ee8565b34801561053057600080fd5b506103f061053f366004613066565b610f24565b34801561055057600080fd5b506103bd61055f36600461300c565b610f79565b34801561057057600080fd5b5061044961057f366004612f75565b6000546001600160a01b0391821691161490565b34801561059f57600080fd5b506103f06105ae36600461300c565b610ffd565b3480156105bf57600080fd5b50604051600981526020016103c7565b3480156105db57600080fd5b506103bd602d5481565b3480156105f157600080fd5b50610449610600366004612fe0565b611074565b34801561061157600080fd5b506103bd602a5481565b34801561062757600080fd5b50610449610636366004612f75565b601c6020526000908152604090205460ff1681565b34801561065757600080fd5b506103bd60205481565b34801561066d57600080fd5b50601f5461044990600160b01b900460ff1681565b34801561068e57600080fd5b506103bd61069d366004613096565b6110ab565b3480156106ae57600080fd5b506103bd60215481565b3480156106c457600080fd5b506103f06106d336600461300c565b61113f565b3480156106e457600080fd5b506103f061114b565b3480156106f957600080fd5b506103bd610708366004612f75565b611199565b34801561071957600080fd5b506103bd60045481565b34801561072f57600080fd5b506103f061073e3660046130c6565b6111f8565b34801561074f57600080fd5b506103bd60255481565b34801561076557600080fd5b506103bd60035481565b34801561077b57600080fd5b5061044961078a366004612f75565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b457600080fd5b506103f06107c33660046130f4565b61124a565b3480156107d457600080fd5b506103bd60285481565b3480156107ea57600080fd5b506103f06107f9366004613066565b6112c9565b34801561080a57600080fd5b506103bd610819366004612f75565b6113d9565b34801561082a57600080fd5b506103f0610839366004613137565b61140b565b34801561084a57600080fd5b506103f0610859366004613165565b611460565b34801561086a57600080fd5b506103f0610879366004613066565b611506565b34801561088a57600080fd5b50604080518082019091526005815264415249455360d81b602082015261041c565b3480156108b857600080fd5b506103bd602c5481565b3480156108ce57600080fd5b506103f06108dd366004612f75565b611555565b3480156108ee57600080fd5b506104496108fd366004612fe0565b6115b9565b34801561090e57600080fd5b50601f54610922906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094657600080fd5b50610449610955366004612fe0565b611608565b34801561096657600080fd5b506103f0610975366004613025565b611615565b34801561098657600080fd5b506103bd60245481565b34801561099c57600080fd5b50601f5461044990600160a81b900460ff1681565b3480156109bd57600080fd5b506103bd6109cc3660046131b0565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0357600080fd5b506103f0610a123660046131ce565b611741565b348015610a2357600080fd5b506103bd60275481565b348015610a3957600080fd5b506103f0610a483660046131ce565b61178d565b348015610a5957600080fd5b506103bd60295481565b348015610a6f57600080fd5b506103f0610a7e3660046131ec565b6117d9565b348015610a8f57600080fd5b50602e546103bd565b348015610aa457600080fd5b506103bd60265481565b348015610aba57600080fd5b506103f0610ac93660046131b0565b61183f565b348015610ada57600080fd5b506103f0610ae9366004612f75565b6118c8565b348015610afa57600080fd5b50601e54610922906001600160a01b031681565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b3890613218565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610ba95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b38565b60005b601d54811015610cc957816001600160a01b0316601d8281548110610bd357610bd3613238565b6000918252602090912001546001600160a01b031603610cb757601d8054610bfd90600190613264565b81548110610c0d57610c0d613238565b600091825260209091200154601d80546001600160a01b039092169183908110610c3957610c39613238565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9157610c91613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc18161328d565b915050610bac565b5050565b6000610cda338484611946565b5060015b92915050565b610cf033826000611a6a565b50565b6000610d00848484611b41565b610d528433610d4d856040518060600160405280602881526020016133e5602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c16565b611946565b5060019392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b0381166000908152601b602052604090205460ff1615610def5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b38565b6001600160a01b03811660009081526018602052604090205415610e49576001600160a01b038116600090815260186020526040902054610e2f90610f79565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b3890613218565b600f805460ff19166001179055565b6000610f1f610ef76000611199565b601254610f1990610f10906001600160a01b0316611199565b60015490611c42565b90611c42565b905090565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b3890613218565b610f70620186a0610f6a84600154611c4e90919063ffffffff16565b90611c5a565b60215560235550565b6000600254821115610fe05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b38565b6000610fea611c66565b9050610ff681846132a6565b9392505050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610b3890613218565b60155447906001600160a01b03166108fc6110476064610f6a8587611c4e565b6040518115909202916000818181858888f1935050505015801561106f573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cda918590610d4d9086906132c8565b60006001548311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b38565b816111205760006111168460016000806000611c89565b519150610cde9050565b60006111328460016000806000611c89565b602001519150610cde9050565b610cf033826000611d07565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610b3890613218565b602854611183904290611dcf565b602455602954611194904290611dcf565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d657506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cde90610f79565b6000546001600160a01b031633146112225760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b8152600401610b3890613218565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112a85750600b5460095411155b80156112b85750600b54600a5411155b6112c157600080fd5b505050505050565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610b3890613218565b6000611310600b54610f6a85600154611c4e90919063ffffffff16565b9050600061132f600b54610f6a85600154611c4e90919063ffffffff16565b9050600061134f620186a0610f6a60018054611c4e90919063ffffffff16565b90508083101580156113615750808210155b6113cb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b38565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cde9190610f1990610f79565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b3890613218565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610b3890613218565b61154c620186a0610f6a84600154611c4e90919063ffffffff16565b60205560225550565b6000546001600160a01b0316331461157f5760405162461bcd60e51b8152600401610b3890613218565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cda3384610d4d8560405180606001604052806025815260200161340d60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c16565b6000610cda338484611b41565b6000546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b3890613218565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906132db565b90506001600160a01b03841663a9059cbb846116cb6064610f6a8688611c4e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a91906132f4565b5050505050565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118035760405162461bcd60e51b8152600401610b3890613218565b601183905560015461181e90620186a090610f6a9085611c4e565b600d5560015461183790620186a090610f6a9084611c4e565b600e55505050565b6000546001600160a01b031633146118695760405162461bcd60e51b8152600401610b3890613218565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610b3890613218565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b38565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b38565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aec576000611ab5600b54610f6a602254611aaf601660009054906101000a90046001600160a01b0316611199565b90611c4e565b905082811015611ac3578092505b601654600090611adb906001600160a01b0316611199565b905083811015611ae9578093505b50505b602b54611af99083611dcf565b602b5542602555602d54611b0e906001611dcf565b602d55611b1c833084611946565b611b2f8360008460008060006001611ddb565b5050601f805460ff60a01b1916905550565b611b4c838383612010565b611b568383612148565b611b618383836121e1565b611b6c8284836122f0565b611b76838361237c565b611b818383836123f1565b611b8b8383612416565b6001600160a01b0383166000908152601c602052604090205461106f9084908490849060ff1680611bd457506001600160a01b0386166000908152601c602052604090205460ff165b80611be15750600c5460ff165b80611bf55750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddb565b60008184841115611c3a5760405162461bcd60e51b8152600401610b389190612f92565b505050900390565b6000610ff68284613264565b6000610ff68284613311565b6000610ff682846132a6565b6000806000611c736125bb565b9092509050611c8281836132a6565b9250505090565b611cc96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd6868686868661273e565b9050611cec818787611ce6611c66565b86612966565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d82576000611d4c600b54610f6a602354611aaf601760009054906101000a90046001600160a01b0316611199565b905082811015611d5a578092505b601754600090611d72906001600160a01b0316611199565b9050838111611d7f578093505b50505b602a54611d8f9083611dcf565b602a5542602755602c54611da4906001611dcf565b602c55611db2833084611946565b601254611b2f9084906001600160a01b0316846000808080611ddb565b6000610ff682846132c8565b6000611dea8686868686611c89565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4c576001600160a01b038816600090815260196020526040902054611e32908790613264565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eaf5760808101516001600160a01b038816600090815260196020526040902054611e9591906132c8565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed49190613264565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0b91906132c8565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3c919084612a0b565b611f4e81606001518260c00151612a47565b608081015115611faa57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa191815260200190565b60405180910390a35b60c08101511561200657306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611ffd91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120745760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166120d65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b6120df83611199565b81111561106f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218a57506001600160a01b0381166000908152601c602052604090205460ff16155b15610cc957600f5460ff16610cc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222357506001600160a01b0383166000908152601c602052604090205460ff16155b801561223857506001600160a01b0382163014155b801561225257506012546001600160a01b03838116911614155b801561226c5750601f546001600160a01b03838116911614155b801561228657506013546001600160a01b03838116911614155b1561106f576004548161229884611199565b6122a291906132c8565b111561106f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b38565b6003548111158061231957506001600160a01b0382166000908152601c602052604090205460ff165b8061233c57506001600160a01b0383166000908152601c602052604090205460ff165b61106f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b38565b601f546001600160a01b0382811691161480156123b257506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c15750600c5460ff16155b80156123d75750601f54600160a01b900460ff16155b15610cc9576010546123ea906001611dcf565b6010555050565b6123fc838383612ac6565b1561106f5761240c600d54612b8c565b6000601055505050565b426024541115801561242b5750600c5460ff16155b80156124445750601f546001600160a01b038281169116145b801561246957506001600160a01b0382166000908152601c602052604090205460ff16155b801561247e5750601f54600160a81b900460ff165b801561249f575060165460009061249d906001600160a01b0316611199565b115b80156124b55750601f54600160a01b900460ff16155b156124e7576016546020546124d5916001600160a01b0316906001611a6a565b6028546124e3904290611dcf565b6024555b42602654111580156124fc5750600c5460ff16155b80156125155750601f546001600160a01b038281169116145b801561253a57506001600160a01b0382166000908152601c602052604090205460ff16155b801561254f5750601f54600160b01b900460ff165b8015612570575060175460009061256e906001600160a01b0316611199565b115b80156125865750601f54600160a01b900460ff16155b15610cc9576017546021546125a6916001600160a01b0316906001611d07565b6029546125b4904290611dcf565b6026555050565b6002546001546000918291825b601d5481101561270d578260186000601d84815481106125ea576125ea613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265557508160196000601d848154811061262e5761262e613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266b57600254600154945094505050509091565b60186000601d838154811061268257612682613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b19084613264565b925060196000601d83815481106126ca576126ca613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126f99083613264565b9150806127058161328d565b9150506125c8565b5060015460025461271e91906132a6565b821015612735576002546001549350935050509091565b90939092509050565b61277e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278a575081155b806127a4575061279a8484612d1b565b80156127a4575081155b156127b55760808101869052611cfe565b831580156127c1575082155b80156127cb575081155b156128435760006127ed600b54610f6a600a548a611c4e90919063ffffffff16565b9050600a546005600001541161281d57600b5460055461280d9089613311565b61281791906132a6565b60a08301525b60a082015161282d908290611c42565b60c083015261283c8188613264565b6080830152505b83801561284e575081155b156128c6576000612870600b54610f6a6009548a611c4e90919063ffffffff16565b9050600954600560000154116128a057600b546005546128909089613311565b61289a91906132a6565b60a08301525b60a08201516128b0908290611c42565b60c08301526128bf8188613264565b6080830152505b8280156128d1575081155b156129495760006128f3600b54610f6a6008548a611c4e90919063ffffffff16565b90506008546005600001541161292357600b546005546129139089613311565b61291d91906132a6565b60a08301525b60a0820151612933908290611c42565b60c08301526129428188613264565b6080830152505b8115611cfe5760a081018690526080810186905295945050505050565b60008080806129758689613311565b935086158015612983575084155b15612996575082915060009050806129ff565b84156129c357858960a001516129ac9190613311565b91506129b88285613264565b9250600090506129ff565b858960a001516129d39190613311565b9150858960c001516129e59190613311565b9050806129f28386613264565b6129fc9190613264565b92505b95509550955095915050565b8260026000828254612a1d9190613264565b9091555081905061106f5781602e6000016000828254612a3d91906132c8565b9091555050505050565b80602e6001016000828254612a5c91906132c8565b9091555050306000908152601b602052604090205460ff1615612a9e573060009081526019602052604081208054839290612a989084906132c8565b90915550505b3060009081526018602052604081208054849290612abd9084906132c8565b90915550505050565b600080600e5483101590506000600d54612adf30611199565b600c54911115915060ff16158015612afe5750600c54610100900460ff165b8015612b075750815b8015612b2c57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3a5750600f5460ff165b8015612b535750601f546001600160a01b038681169116145b8015612b63575060115460105410155b8015612b6c5750805b8015612b825750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb391600291611aaf9190611dcf565b9050600854600003612be557600654600754612be291600291611aaf91600191612bdc91611dcf565b90611dcf565b90505b6007546000908290612bf79085613311565b612c0191906132a6565b90506000612c0f8285613264565b905047612c1b82612d61565b6000612c278247613264565b600754909150600090612c3a9087613264565b612c4490836132a6565b600754909150600090612c579083613311565b90508015612c6957612c698682612eb3565b600654600090612c7e90611aaf856002611c4e565b90508015612cc2576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc0573d6000803e3d6000fd5b505b478015612d05576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d03573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2a5750600954155b80612d3d5750818015612d3d5750600854155b80610ff6575082158015612d4f575081155b8015610ff6575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9657612d96613238565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613328565b81600181518110612e2657612e26613238565b6001600160a01b039283166020918202929092010152601e54612e4c9130911684611946565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e85908590600090869030904290600401613345565b600060405180830381600087803b158015612e9f57600080fd5b505af11580156112c1573d6000803e3d6000fd5b601e54612ecb9030906001600160a01b031684611946565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173a91906133b6565b6001600160a01b0381168114610cf057600080fd5b600060208284031215612f8757600080fd5b8135610ff681612f60565b600060208083528351808285015260005b81811015612fbf57858101830151858201604001528201612fa3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff357600080fd5b8235612ffe81612f60565b946020939093013593505050565b60006020828403121561301e57600080fd5b5035919050565b60008060006060848603121561303a57600080fd5b833561304581612f60565b9250602084013561305581612f60565b929592945050506040919091013590565b6000806040838503121561307957600080fd5b50508035926020909101359150565b8015158114610cf057600080fd5b600080604083850312156130a957600080fd5b8235915060208301356130bb81613088565b809150509250929050565b600080604083850312156130d957600080fd5b82356130e481613088565b915060208301356130bb81612f60565b60008060008060008060c0878903121561310d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314a57600080fd5b823561315581612f60565b915060208301356130bb81613088565b60008060006060848603121561317a57600080fd5b833561318581612f60565b9250602084013561319581612f60565b915060408401356131a581612f60565b809150509250925092565b600080604083850312156131c357600080fd5b82356130e481612f60565b600080604083850312156131e157600080fd5b8235612ffe81613088565b60008060006060848603121561320157600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cde57610cde61324e565b634e487b7160e01b600052603160045260246000fd5b60006001820161329f5761329f61324e565b5060010190565b6000826132c357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cde57610cde61324e565b6000602082840312156132ed57600080fd5b5051919050565b60006020828403121561330657600080fd5b8151610ff681613088565b8082028115828204841417610cde57610cde61324e565b60006020828403121561333a57600080fd5b8151610ff681612f60565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133955784516001600160a01b031683529383019391830191600101613370565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122031f4e22211c105a07f41fe4db212a4d8dabdd79bd22b6670c03e51a9caa64d4b64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a98578063f09f694e14610aae578063f2fde38b14610ace578063f887ea4014610aee57600080fd5b8063e480034514610a2d578063e55a68b314610a4d578063e94dd17c14610a63578063e960e68e14610a8357600080fd5b8063d1571e47116100dc578063d1571e4714610990578063dd62ed3e146109b1578063dfa5f4ea146109f7578063e306744914610a1757600080fd5b8063a9059cbb1461093a578063b2118a8d1461095a578063ca221c081461097a57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ac578063a22d4832146108c2578063a457c2d7146108e2578063a8aa1b311461090257600080fd5b80638ebfc7961461081e5780639213c3581461083e57806395b186411461085e57806395d89b411461087e57600080fd5b806384836778116101b657806384836778146107a857806384b81093146107c8578063884870c7146107de5780638cf2e94a146107fe57600080fd5b80637934f4f2146107435780637d1db4a5146107595780637d459db31461076f57600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d857806370a08231146106ed57806378109e541461070d578063783b5a0a1461072357600080fd5b806344df8e70146106615780634549b03914610682578063486a7e6b146106a257806354b822cf146106b857600080fd5b8063395093511161029b57806339509351146105e55780633c9f861d146106055780633f4218e01461061b578063404ca34a1461064b57600080fd5b80633052ea0814610593578063313ce567146105b357806337f0d4c8146105cf57600080fd5b806322849720116103395780632b112e49116103085780632b112e491461050f5780632cbf5360146105245780632d838119146105445780632f54bf6e1461056457600080fd5b806322849720146104a457806323b872dd146104ba57806327334a08146104da578063293230b8146104fa57600080fd5b8063095ea7b311610375578063095ea7b3146104295780630e7daf6d1461045957806311403aec1461046f57806318160ddd1461048f57600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f75565b610b0e565b005b3480156103fe57600080fd5b50604080518082019091526005815264417269657360d81b60208201525b6040516103c79190612f92565b34801561043557600080fd5b50610449610444366004612fe0565b610ccd565b60405190151581526020016103c7565b34801561046557600080fd5b506103bd60225481565b34801561047b57600080fd5b506103f061048a36600461300c565b610ce4565b34801561049b57600080fd5b506001546103bd565b3480156104b057600080fd5b506103bd602b5481565b3480156104c657600080fd5b506104496104d5366004613025565b610cf3565b3480156104e657600080fd5b506103f06104f5366004612f75565b610d5c565b34801561050657600080fd5b506103f0610eaf565b34801561051b57600080fd5b506103bd610ee8565b34801561053057600080fd5b506103f061053f366004613066565b610f24565b34801561055057600080fd5b506103bd61055f36600461300c565b610f79565b34801561057057600080fd5b5061044961057f366004612f75565b6000546001600160a01b0391821691161490565b34801561059f57600080fd5b506103f06105ae36600461300c565b610ffd565b3480156105bf57600080fd5b50604051600981526020016103c7565b3480156105db57600080fd5b506103bd602d5481565b3480156105f157600080fd5b50610449610600366004612fe0565b611074565b34801561061157600080fd5b506103bd602a5481565b34801561062757600080fd5b50610449610636366004612f75565b601c6020526000908152604090205460ff1681565b34801561065757600080fd5b506103bd60205481565b34801561066d57600080fd5b50601f5461044990600160b01b900460ff1681565b34801561068e57600080fd5b506103bd61069d366004613096565b6110ab565b3480156106ae57600080fd5b506103bd60215481565b3480156106c457600080fd5b506103f06106d336600461300c565b61113f565b3480156106e457600080fd5b506103f061114b565b3480156106f957600080fd5b506103bd610708366004612f75565b611199565b34801561071957600080fd5b506103bd60045481565b34801561072f57600080fd5b506103f061073e3660046130c6565b6111f8565b34801561074f57600080fd5b506103bd60255481565b34801561076557600080fd5b506103bd60035481565b34801561077b57600080fd5b5061044961078a366004612f75565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b457600080fd5b506103f06107c33660046130f4565b61124a565b3480156107d457600080fd5b506103bd60285481565b3480156107ea57600080fd5b506103f06107f9366004613066565b6112c9565b34801561080a57600080fd5b506103bd610819366004612f75565b6113d9565b34801561082a57600080fd5b506103f0610839366004613137565b61140b565b34801561084a57600080fd5b506103f0610859366004613165565b611460565b34801561086a57600080fd5b506103f0610879366004613066565b611506565b34801561088a57600080fd5b50604080518082019091526005815264415249455360d81b602082015261041c565b3480156108b857600080fd5b506103bd602c5481565b3480156108ce57600080fd5b506103f06108dd366004612f75565b611555565b3480156108ee57600080fd5b506104496108fd366004612fe0565b6115b9565b34801561090e57600080fd5b50601f54610922906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094657600080fd5b50610449610955366004612fe0565b611608565b34801561096657600080fd5b506103f0610975366004613025565b611615565b34801561098657600080fd5b506103bd60245481565b34801561099c57600080fd5b50601f5461044990600160a81b900460ff1681565b3480156109bd57600080fd5b506103bd6109cc3660046131b0565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0357600080fd5b506103f0610a123660046131ce565b611741565b348015610a2357600080fd5b506103bd60275481565b348015610a3957600080fd5b506103f0610a483660046131ce565b61178d565b348015610a5957600080fd5b506103bd60295481565b348015610a6f57600080fd5b506103f0610a7e3660046131ec565b6117d9565b348015610a8f57600080fd5b50602e546103bd565b348015610aa457600080fd5b506103bd60265481565b348015610aba57600080fd5b506103f0610ac93660046131b0565b61183f565b348015610ada57600080fd5b506103f0610ae9366004612f75565b6118c8565b348015610afa57600080fd5b50601e54610922906001600160a01b031681565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b3890613218565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610ba95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b38565b60005b601d54811015610cc957816001600160a01b0316601d8281548110610bd357610bd3613238565b6000918252602090912001546001600160a01b031603610cb757601d8054610bfd90600190613264565b81548110610c0d57610c0d613238565b600091825260209091200154601d80546001600160a01b039092169183908110610c3957610c39613238565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9157610c91613277565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc18161328d565b915050610bac565b5050565b6000610cda338484611946565b5060015b92915050565b610cf033826000611a6a565b50565b6000610d00848484611b41565b610d528433610d4d856040518060600160405280602881526020016133e5602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c16565b611946565b5060019392505050565b6000546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b0381166000908152601b602052604090205460ff1615610def5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b38565b6001600160a01b03811660009081526018602052604090205415610e49576001600160a01b038116600090815260186020526040902054610e2f90610f79565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b3890613218565b600f805460ff19166001179055565b6000610f1f610ef76000611199565b601254610f1990610f10906001600160a01b0316611199565b60015490611c42565b90611c42565b905090565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b3890613218565b610f70620186a0610f6a84600154611c4e90919063ffffffff16565b90611c5a565b60215560235550565b6000600254821115610fe05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b38565b6000610fea611c66565b9050610ff681846132a6565b9392505050565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610b3890613218565b60155447906001600160a01b03166108fc6110476064610f6a8587611c4e565b6040518115909202916000818181858888f1935050505015801561106f573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cda918590610d4d9086906132c8565b60006001548311156110ff5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b38565b816111205760006111168460016000806000611c89565b519150610cde9050565b60006111328460016000806000611c89565b602001519150610cde9050565b610cf033826000611d07565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610b3890613218565b602854611183904290611dcf565b602455602954611194904290611dcf565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d657506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610cde90610f79565b6000546001600160a01b031633146112225760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b8152600401610b3890613218565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112a85750600b5460095411155b80156112b85750600b54600a5411155b6112c157600080fd5b505050505050565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610b3890613218565b6000611310600b54610f6a85600154611c4e90919063ffffffff16565b9050600061132f600b54610f6a85600154611c4e90919063ffffffff16565b9050600061134f620186a0610f6a60018054611c4e90919063ffffffff16565b90508083101580156113615750808210155b6113cb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b38565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610cde9190610f1990610f79565b6000546001600160a01b031633146114355760405162461bcd60e51b8152600401610b3890613218565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610b3890613218565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610b3890613218565b61154c620186a0610f6a84600154611c4e90919063ffffffff16565b60205560225550565b6000546001600160a01b0316331461157f5760405162461bcd60e51b8152600401610b3890613218565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cda3384610d4d8560405180606001604052806025815260200161340d60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c16565b6000610cda338484611b41565b6000546001600160a01b0316331461163f5760405162461bcd60e51b8152600401610b3890613218565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa91906132db565b90506001600160a01b03841663a9059cbb846116cb6064610f6a8688611c4e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a91906132f4565b5050505050565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b75760405162461bcd60e51b8152600401610b3890613218565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118035760405162461bcd60e51b8152600401610b3890613218565b601183905560015461181e90620186a090610f6a9085611c4e565b600d5560015461183790620186a090610f6a9084611c4e565b600e55505050565b6000546001600160a01b031633146118695760405162461bcd60e51b8152600401610b3890613218565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f25760405162461bcd60e51b8152600401610b3890613218565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b38565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b38565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aec576000611ab5600b54610f6a602254611aaf601660009054906101000a90046001600160a01b0316611199565b90611c4e565b905082811015611ac3578092505b601654600090611adb906001600160a01b0316611199565b905083811015611ae9578093505b50505b602b54611af99083611dcf565b602b5542602555602d54611b0e906001611dcf565b602d55611b1c833084611946565b611b2f8360008460008060006001611ddb565b5050601f805460ff60a01b1916905550565b611b4c838383612010565b611b568383612148565b611b618383836121e1565b611b6c8284836122f0565b611b76838361237c565b611b818383836123f1565b611b8b8383612416565b6001600160a01b0383166000908152601c602052604090205461106f9084908490849060ff1680611bd457506001600160a01b0386166000908152601c602052604090205460ff165b80611be15750600c5460ff165b80611bf55750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddb565b60008184841115611c3a5760405162461bcd60e51b8152600401610b389190612f92565b505050900390565b6000610ff68284613264565b6000610ff68284613311565b6000610ff682846132a6565b6000806000611c736125bb565b9092509050611c8281836132a6565b9250505090565b611cc96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd6868686868661273e565b9050611cec818787611ce6611c66565b86612966565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d82576000611d4c600b54610f6a602354611aaf601760009054906101000a90046001600160a01b0316611199565b905082811015611d5a578092505b601754600090611d72906001600160a01b0316611199565b9050838111611d7f578093505b50505b602a54611d8f9083611dcf565b602a5542602755602c54611da4906001611dcf565b602c55611db2833084611946565b601254611b2f9084906001600160a01b0316846000808080611ddb565b6000610ff682846132c8565b6000611dea8686868686611c89565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4c576001600160a01b038816600090815260196020526040902054611e32908790613264565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eaf5760808101516001600160a01b038816600090815260196020526040902054611e9591906132c8565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed49190613264565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0b91906132c8565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3c919084612a0b565b611f4e81606001518260c00151612a47565b608081015115611faa57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa191815260200190565b60405180910390a35b60c08101511561200657306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611ffd91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120745760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166120d65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b6120df83611199565b81111561106f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218a57506001600160a01b0381166000908152601c602052604090205460ff16155b15610cc957600f5460ff16610cc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b38565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222357506001600160a01b0383166000908152601c602052604090205460ff16155b801561223857506001600160a01b0382163014155b801561225257506012546001600160a01b03838116911614155b801561226c5750601f546001600160a01b03838116911614155b801561228657506013546001600160a01b03838116911614155b1561106f576004548161229884611199565b6122a291906132c8565b111561106f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b38565b6003548111158061231957506001600160a01b0382166000908152601c602052604090205460ff165b8061233c57506001600160a01b0383166000908152601c602052604090205460ff165b61106f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b38565b601f546001600160a01b0382811691161480156123b257506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c15750600c5460ff16155b80156123d75750601f54600160a01b900460ff16155b15610cc9576010546123ea906001611dcf565b6010555050565b6123fc838383612ac6565b1561106f5761240c600d54612b8c565b6000601055505050565b426024541115801561242b5750600c5460ff16155b80156124445750601f546001600160a01b038281169116145b801561246957506001600160a01b0382166000908152601c602052604090205460ff16155b801561247e5750601f54600160a81b900460ff165b801561249f575060165460009061249d906001600160a01b0316611199565b115b80156124b55750601f54600160a01b900460ff16155b156124e7576016546020546124d5916001600160a01b0316906001611a6a565b6028546124e3904290611dcf565b6024555b42602654111580156124fc5750600c5460ff16155b80156125155750601f546001600160a01b038281169116145b801561253a57506001600160a01b0382166000908152601c602052604090205460ff16155b801561254f5750601f54600160b01b900460ff165b8015612570575060175460009061256e906001600160a01b0316611199565b115b80156125865750601f54600160a01b900460ff16155b15610cc9576017546021546125a6916001600160a01b0316906001611d07565b6029546125b4904290611dcf565b6026555050565b6002546001546000918291825b601d5481101561270d578260186000601d84815481106125ea576125ea613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265557508160196000601d848154811061262e5761262e613238565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266b57600254600154945094505050509091565b60186000601d838154811061268257612682613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b19084613264565b925060196000601d83815481106126ca576126ca613238565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126f99083613264565b9150806127058161328d565b9150506125c8565b5060015460025461271e91906132a6565b821015612735576002546001549350935050509091565b90939092509050565b61277e6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278a575081155b806127a4575061279a8484612d1b565b80156127a4575081155b156127b55760808101869052611cfe565b831580156127c1575082155b80156127cb575081155b156128435760006127ed600b54610f6a600a548a611c4e90919063ffffffff16565b9050600a546005600001541161281d57600b5460055461280d9089613311565b61281791906132a6565b60a08301525b60a082015161282d908290611c42565b60c083015261283c8188613264565b6080830152505b83801561284e575081155b156128c6576000612870600b54610f6a6009548a611c4e90919063ffffffff16565b9050600954600560000154116128a057600b546005546128909089613311565b61289a91906132a6565b60a08301525b60a08201516128b0908290611c42565b60c08301526128bf8188613264565b6080830152505b8280156128d1575081155b156129495760006128f3600b54610f6a6008548a611c4e90919063ffffffff16565b90506008546005600001541161292357600b546005546129139089613311565b61291d91906132a6565b60a08301525b60a0820151612933908290611c42565b60c08301526129428188613264565b6080830152505b8115611cfe5760a081018690526080810186905295945050505050565b60008080806129758689613311565b935086158015612983575084155b15612996575082915060009050806129ff565b84156129c357858960a001516129ac9190613311565b91506129b88285613264565b9250600090506129ff565b858960a001516129d39190613311565b9150858960c001516129e59190613311565b9050806129f28386613264565b6129fc9190613264565b92505b95509550955095915050565b8260026000828254612a1d9190613264565b9091555081905061106f5781602e6000016000828254612a3d91906132c8565b9091555050505050565b80602e6001016000828254612a5c91906132c8565b9091555050306000908152601b602052604090205460ff1615612a9e573060009081526019602052604081208054839290612a989084906132c8565b90915550505b3060009081526018602052604081208054849290612abd9084906132c8565b90915550505050565b600080600e5483101590506000600d54612adf30611199565b600c54911115915060ff16158015612afe5750600c54610100900460ff165b8015612b075750815b8015612b2c57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3a5750600f5460ff165b8015612b535750601f546001600160a01b038681169116145b8015612b63575060115460105410155b8015612b6c5750805b8015612b825750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb391600291611aaf9190611dcf565b9050600854600003612be557600654600754612be291600291611aaf91600191612bdc91611dcf565b90611dcf565b90505b6007546000908290612bf79085613311565b612c0191906132a6565b90506000612c0f8285613264565b905047612c1b82612d61565b6000612c278247613264565b600754909150600090612c3a9087613264565b612c4490836132a6565b600754909150600090612c579083613311565b90508015612c6957612c698682612eb3565b600654600090612c7e90611aaf856002611c4e565b90508015612cc2576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc0573d6000803e3d6000fd5b505b478015612d05576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d03573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2a5750600954155b80612d3d5750818015612d3d5750600854155b80610ff6575082158015612d4f575081155b8015610ff6575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9657612d96613238565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613328565b81600181518110612e2657612e26613238565b6001600160a01b039283166020918202929092010152601e54612e4c9130911684611946565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e85908590600090869030904290600401613345565b600060405180830381600087803b158015612e9f57600080fd5b505af11580156112c1573d6000803e3d6000fd5b601e54612ecb9030906001600160a01b031684611946565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173a91906133b6565b6001600160a01b0381168114610cf057600080fd5b600060208284031215612f8757600080fd5b8135610ff681612f60565b600060208083528351808285015260005b81811015612fbf57858101830151858201604001528201612fa3565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff357600080fd5b8235612ffe81612f60565b946020939093013593505050565b60006020828403121561301e57600080fd5b5035919050565b60008060006060848603121561303a57600080fd5b833561304581612f60565b9250602084013561305581612f60565b929592945050506040919091013590565b6000806040838503121561307957600080fd5b50508035926020909101359150565b8015158114610cf057600080fd5b600080604083850312156130a957600080fd5b8235915060208301356130bb81613088565b809150509250929050565b600080604083850312156130d957600080fd5b82356130e481613088565b915060208301356130bb81612f60565b60008060008060008060c0878903121561310d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314a57600080fd5b823561315581612f60565b915060208301356130bb81613088565b60008060006060848603121561317a57600080fd5b833561318581612f60565b9250602084013561319581612f60565b915060408401356131a581612f60565b809150509250925092565b600080604083850312156131c357600080fd5b82356130e481612f60565b600080604083850312156131e157600080fd5b8235612ffe81613088565b60008060006060848603121561320157600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cde57610cde61324e565b634e487b7160e01b600052603160045260246000fd5b60006001820161329f5761329f61324e565b5060010190565b6000826132c357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cde57610cde61324e565b6000602082840312156132ed57600080fd5b5051919050565b60006020828403121561330657600080fd5b8151610ff681613088565b8082028115828204841417610cde57610cde61324e565b60006020828403121561333a57600080fd5b8151610ff681612f60565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133955784516001600160a01b031683529383019391830191600101613370565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122031f4e22211c105a07f41fe4db212a4d8dabdd79bd22b6670c03e51a9caa64d4b64736f6c63430008130033

Deployed Bytecode Sourcemap

7421:23960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9706:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9706:32:0;;;;;;;;26989:464;;;;;;;;;;-1:-1:-1;26989:464:0;;;;;:::i;:::-;;:::i;:::-;;11647:67;;;;;;;;;;-1:-1:-1;11707:5:0;;;;;;;;;;;;-1:-1:-1;;;11707:5:0;;;;11647:67;;;;;;;:::i;12413:134::-;;;;;;;;;;-1:-1:-1;12413:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12413:134:0;1457:187:1;9660:39:0;;;;;;;;;;;;;;;;19322:117;;;;;;;;;;-1:-1:-1;19322:117:0;;;;;:::i;:::-;;:::i;11870:79::-;;;;;;;;;;-1:-1:-1;11940:7:0;;11870:79;;10019:30;;;;;;;;;;;;;;;;12827:309;;;;;;;;;;-1:-1:-1;12827:309:0;;;;;:::i;:::-;;:::i;26646:335::-;;;;;;;;;;-1:-1:-1;26646:335:0;;;;;:::i;:::-;;:::i;22107:83::-;;;;;;;;;;;;;:::i;25742:143::-;;;;;;;;;;;;;:::i;23989:182::-;;;;;;;;;;-1:-1:-1;23989:182:0;;;;;:::i;:::-;;:::i;26390:248::-;;;;;;;;;;-1:-1:-1;26390:248:0;;;;;:::i;:::-;;:::i;6126:87::-;;;;;;;;;;-1:-1:-1;6126:87:0;;;;;:::i;:::-;6181:4;6206:5;-1:-1:-1;;;;;6195:16:0;;;6206:5;;6195:16;;6126:87;24418:182;;;;;;;;;;-1:-1:-1;24418:182:0;;;;;:::i;:::-;;:::i;11797:67::-;;;;;;;;;;-1:-1:-1;11797:67:0;;7656:1;2690:36:1;;2678:2;2663:18;11797:67:0;2548:184:1;10093:36:0;;;;;;;;;;;;;;;;13144:209;;;;;;;;;;-1:-1:-1;13144:209:0;;;;;:::i;:::-;;:::i;9988:24::-;;;;;;;;;;;;;;;;9295:44;;;;;;;;;;-1:-1:-1;9295:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9527:63;;;;;;;;;;;;;;;;9497:23;;;;;;;;;;-1:-1:-1;9497:23:0;;;;-1:-1:-1;;;9497:23:0;;;;;;25893:489;;;;;;;;;;-1:-1:-1;25893:489:0;;;;;:::i;:::-;;:::i;9597:56::-;;;;;;;;;;;;;;;;19447:103;;;;;;;;;;-1:-1:-1;19447:103:0;;;;;:::i;:::-;;:::i;22198:175::-;;;;;;;;;;;;;:::i;11955:173::-;;;;;;;;;;-1:-1:-1;11955:173:0;;;;;:::i;:::-;;:::i;7898:58::-;;;;;;;;;;;;;;;;22532:124;;;;;;;;;;-1:-1:-1;22532:124:0;;;;;:::i;:::-;;:::i;9782:34::-;;;;;;;;;;;;;;;;7836:55;;;;;;;;;;;;;;;;12645:108;;;;;;;;;;-1:-1:-1;12645:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12731:20:0;12717:4;12731:20;;;:11;:20;;;;;;;;;12645:108;22664:442;;;;;;;;;;-1:-1:-1;22664:442:0;;;;;:::i;:::-;;:::i;9887:47::-;;;;;;;;;;;;;;;;25035:445;;;;;;;;;;-1:-1:-1;25035:445:0;;;;;:::i;:::-;;:::i;13634:157::-;;;;;;;;;;-1:-1:-1;13634:157:0;;;;;:::i;:::-;;:::i;24608:117::-;;;;;;;;;;-1:-1:-1;24608:117:0;;;;;:::i;:::-;;:::i;23114:322::-;;;;;;;;;;-1:-1:-1;23114:322:0;;;;;:::i;:::-;;:::i;24179:231::-;;;;;;;;;;-1:-1:-1;24179:231:0;;;;;:::i;:::-;;:::i;11720:71::-;;;;;;;;;;-1:-1:-1;11782:7:0;;;;;;;;;;;;-1:-1:-1;;;11782:7:0;;;;11720:71;;10056:30;;;;;;;;;;;;;;;;22381:143;;;;;;;;;;-1:-1:-1;22381:143:0;;;;;:::i;:::-;;:::i;13361:265::-;;;;;;;;;;-1:-1:-1;13361:265:0;;;;;:::i;:::-;;:::i;9408:19::-;;;;;;;;;;-1:-1:-1;9408:19:0;;;;-1:-1:-1;;;;;9408:19:0;;;;;;-1:-1:-1;;;;;5174:32:1;;;5156:51;;5144:2;5129:18;9408:19:0;5010:203:1;12134:140:0;;;;;;;;;;-1:-1:-1;12134:140:0;;;;;:::i;:::-;;:::i;25488:246::-;;;;;;;;;;-1:-1:-1;25488:246:0;;;;;:::i;:::-;;:::i;9745:30::-;;;;;;;;;;;;;;;;9460;;;;;;;;;;-1:-1:-1;9460:30:0;;;;-1:-1:-1;;;9460:30:0;;;;;;12280:127;;;;;;;;;;-1:-1:-1;12280:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12378:18:0;;;12361:7;12378:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12280:127;23824:157;;;;;;;;;;-1:-1:-1;23824:157:0;;;;;:::i;:::-;;:::i;9853:27::-;;;;;;;;;;;;;;;;23680:136;;;;;;;;;;-1:-1:-1;23680:136:0;;;;;:::i;:::-;;:::i;9941:40::-;;;;;;;;;;;;;;;;24733:294;;;;;;;;;;-1:-1:-1;24733:294:0;;;;;:::i;:::-;;:::i;12553:86::-;;;;;;;;;;-1:-1:-1;12622:11:0;:15;12553:86;;9823:23;;;;;;;;;;;;;;;;23444:228;;;;;;;;;;-1:-1:-1;23444:228:0;;;;;:::i;:::-;;:::i;6219:111::-;;;;;;;;;;-1:-1:-1;6219:111:0;;;;;:::i;:::-;;:::i;9380:21::-;;;;;;;;;;-1:-1:-1;9380:21:0;;;;-1:-1:-1;;;;;9380:21:0;;;26989:464;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27073:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27065:56;;;::::0;-1:-1:-1;;;27065:56:0;;7265:2:1;27065:56:0::1;::::0;::::1;7247:21:1::0;7304:2;7284:18;;;7277:30;7343:25;7323:18;;;7316:53;7386:18;;27065:56:0::1;7063:347:1::0;27065:56:0::1;27137:9;27132:314;27156:9;:16:::0;27152:20;::::1;27132:314;;;27214:7;-1:-1:-1::0;;;;;27198:23:0::1;:9;27208:1;27198:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27198:12:0::1;:23:::0;27194:241:::1;;27257:9;27267:16:::0;;:20:::1;::::0;27286:1:::1;::::0;27267:20:::1;:::i;:::-;27257:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27242:9:::1;:12:::0;;-1:-1:-1;;;;;27257:31:0;;::::1;::::0;27252:1;;27242:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27242:46:0::1;-1:-1:-1::0;;;;;27242:46:0;;::::1;;::::0;;27307:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27346:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27346:28:0::1;::::0;;27393:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27393:15:0;;;;;-1:-1:-1;;;;;;27393:15:0::1;::::0;;;;;27132:314:::1;26989:464:::0;:::o;27194:241::-:1;27174:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27132:314;;;;26989:464:::0;:::o;12413:134::-;12488:4;12495:37;12504:10;12516:7;12525:6;12495:8;:37::i;:::-;-1:-1:-1;12541:4:0;12413:134;;;;;:::o;19322:117::-;19386:45;19405:10;19417:6;19425:5;19386:18;:45::i;:::-;19322:117;:::o;12827:309::-;12925:4;12942:36;12952:6;12960:9;12971:6;12942:9;:36::i;:::-;12989:117;12998:6;13006:10;13018:87;13054:6;13018:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13018:19:0;;;;;;:11;:19;;;;;;;;13038:10;13018:31;;;;;;;;;:87;:35;:87::i;:::-;12989:8;:117::i;:::-;-1:-1:-1;13124:4:0;12827:309;;;;;:::o;26646:335::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26731:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26730:21;26722:61;;;::::0;-1:-1:-1;;;26722:61:0;;8286:2:1;26722:61:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;8364:29;8344:18;;;8337:57;8411:18;;26722:61:0::1;8084:351:1::0;26722:61:0::1;-1:-1:-1::0;;;;;26797:16:0;::::1;26816:1;26797:16:::0;;;:7:::1;:16;::::0;;;;;:20;26794:108:::1;;-1:-1:-1::0;;;;;26873:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26853:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26834:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26794:108:::1;-1:-1:-1::0;;;;;26912:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26912:27:0::1;26935:4;26912:27:::0;;::::1;::::0;;;26950:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26950:23:0::1;::::0;;::::1;::::0;;26646:335::o;22107:83::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;22161:14:::1;:21:::0;;-1:-1:-1;;22161:21:0::1;22178:4;22161:21;::::0;;22107:83::o;25742:143::-;25795:7;25822:55;25855:21;25873:1;25855:9;:21::i;:::-;25844:4;;25822:28;;25834:15;;-1:-1:-1;;;;;25844:4:0;25834:9;:15::i;:::-;25822:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;25815:62;;25742:143;:::o;23989:182::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;24099:36:::1;24128:6;24099:24;24111:11;24099:7;;:11;;:24;;;;:::i;:::-;:28:::0;::::1;:36::i;:::-;24086:10;:49:::0;24137:11:::1;:26:::0;-1:-1:-1;23989:182:0:o;26390:248::-;26456:7;26495;;26484;:18;;26476:73;;;;-1:-1:-1;;;26476:73:0;;8642:2:1;26476: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;;26476:73:0;8440:406:1;26476:73:0;26560:19;26583:10;:8;:10::i;:::-;26560:33;-1:-1:-1;26611:19:0;26560:33;26611:7;:19;:::i;:::-;26604:26;26390:248;-1:-1:-1;;;26390:248:0:o;24418:182::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;24538:16:::1;::::0;24498:21:::1;::::0;-1:-1:-1;;;;;24538:16:0::1;24530:62;24565:26;24587:3;24565:17;24498:21:::0;24579:2;24565:13:::1;:17::i;:26::-;24530:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24467:133;24418:182:::0;:::o;13144:209::-;13258:10;13232:4;13279:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13279:32:0;;;;;;;;;;13232:4;;13249:74;;13270:7;;13279:43;;13312:10;;13279:43;:::i;25893:489::-;25983:7;26022;;26011;:18;;26003:62;;;;-1:-1:-1;;;26003:62:0;;9405:2:1;26003:62:0;;;9387:21:1;9444:2;9424:18;;;9417:30;9483:33;9463:18;;;9456:61;9534:18;;26003:62:0;9203:355:1;26003:62:0;26081:17;26076:299;;26115:28;26146:46;26157:7;26166:4;26172:5;26179;26186;26146:10;:46::i;:::-;26214:9;;-1:-1:-1;26207:16:0;;-1:-1:-1;26207:16:0;26076:299;26256:28;26287:46;26298:7;26307:4;26313:5;26320;26327;26287:10;:46::i;:::-;26355:17;;;;-1:-1:-1;26348:24:0;;-1:-1:-1;26348:24:0;19447:103;19504:38;19516:10;19528:6;19536:5;19504:11;:38::i;22198:175::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;22290:19:::1;::::0;22270:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;:::-;22252:15;:58:::0;22352:12:::1;::::0;22332:33:::1;::::0;:15:::1;::::0;:19:::1;:33::i;:::-;22321:8;:44:::0;22198:175::o;11955:173::-;-1:-1:-1;;;;;12035:20:0;;12021:7;12035:20;;;:11;:20;;;;;;;;12031:49;;;-1:-1:-1;;;;;;12064:16:0;;;;;:7;:16;;;;;;;11955:173::o;12031:49::-;-1:-1:-1;;;;;12109:16:0;;;;;;:7;:16;;;;;;12089:37;;:19;:37::i;22532:124::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22616:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22616:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22532:124::o;22664:442::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;22823:8:::1;:15:::0;;;22840:7:::1;:15:::0;;;22857:11:::1;:20:::0;;;22888:8:::1;:27:::0;;;22926:18;:31;;;22968:18;:31;;;23030:11:::1;::::0;23018:23;::::1;::::0;::::1;::::0;:49:::1;;;23056:11;;23045:7;;:22;;23018:49;:79;;;;;23086:11;;23071;;:26;;23018:79;23010:88;;;::::0;::::1;;22664:442:::0;;;;;;:::o;25035:445::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;25119:13:::1;25135:43;25165:11;;25135:17;25147:4;25135:7;;:11;;:17;;;;:::i;:43::-;25119:59;;25189:17;25209:46;25242:11;;25209:20;25221:7;25209;;:11;;:20;;;;:::i;:46::-;25189:66;;25257:13;25273:26;25292:6;25273:14;25285:1;25273:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25257:42;;25327:5;25318;:14;;:36;;;;;25349:5;25336:9;:18;;25318:36;25310:102;;;::::0;-1:-1:-1;;;25310:102:0;;9765:2:1;25310: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;;25310:102:0::1;9563:417:1::0;25310:102:0::1;-1:-1:-1::0;25423:12:0::1;:20:::0;;;;25445:15:::1;:27:::0;-1:-1:-1;;25035:445:0:o;13634:157::-;-1:-1:-1;;;;;13767:15:0;;13699:7;13767:15;;;:7;:15;;;;;;;;;13746:7;:15;;;;;;13726:57;;13767:15;13726:36;;:19;:36::i;24608:117::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24689:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24689:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24608:117::o;23114:322::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;23232:18:::1;:31:::0;;-1:-1:-1;;;;;23232:31:0;;::::1;-1:-1:-1::0;;;;;;23232:31:0;;::::1;::::0;::::1;::::0;;;23265:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23298:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23232:18:::1;23336:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;23336:30:0;;::::1;23232:31:::0;23336:30;;::::1;::::0;;;23368:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23400:21;;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23114:322::o;24179:231::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;24317:43:::1;24353:6;24317:31;24329:18;24317:7;;:11;;:31;;;;:::i;:43::-;24297:17;:63:::0;24362:18:::1;:40:::0;-1:-1:-1;24179:231:0:o;22381:143::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;22456:4:::1;:18:::0;;-1:-1:-1;;;;;22456:18:0;;::::1;-1:-1:-1::0;;;;;;22456:18:0;;::::1;::::0;::::1;::::0;;:4:::1;22476:33:::0;;;:11:::1;:33;::::0;;;;:40;;-1:-1:-1;;22476:40:0::1;22456:18:::0;22476:40:::1;::::0;;22381:143::o;13361:265::-;13454:4;13471:125;13480:10;13492:7;13501:94;13538:15;13501:94;;;;;;;;;;;;;;;;;13513:10;13501:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13501:32:0;;;;;;;;;;;:94;:36;:94::i;12134:140::-;12212:4;12219:40;12229:10;12241:9;12252:6;12219:9;:40::i;25488:246::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;25610:39:::1;::::0;-1:-1:-1;;;25610:39:0;;25643:4:::1;25610:39;::::0;::::1;5156:51:1::0;25595:12:0::1;::::0;-1:-1:-1;;;;;25610:24:0;::::1;::::0;::::1;::::0;5129:18:1;;25610:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25595:54:::0;-1:-1:-1;;;;;;25660:23:0;::::1;;25684:9:::0;25695:30:::1;25721:3;25695:21;25595:54:::0;25704:11;25695:8:::1;:21::i;:30::-;25660:66;::::0;-1:-1:-1;;;;;;25660:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10366:32:1;;;25660:66:0::1;::::0;::::1;10348:51:1::0;10415:18;;;10408:34;10321:18;;25660:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25584:150;25488:246:::0;;;:::o;23824:157::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;23920:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;23920:21:0::1;-1:-1:-1::0;;;;23920:21:0;;::::1;::::0;;;::::1;::::0;;;23943:19:::1;:30:::0;23824:157::o;23680:136::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;23769:4:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;23769:14:0::1;-1:-1:-1::0;;;;23769:14:0;;::::1;::::0;;;::::1;::::0;;;23785:12:::1;:23:::0;23680:136::o;24733:294::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;24861:10:::1;:24:::0;;;24903:7:::1;::::0;:48:::1;::::0;24943:6:::1;::::0;24903:27:::1;::::0;24915:14;24903:11:::1;:27::i;:48::-;24887:13;:64:::0;24971:7:::1;::::0;:48:::1;::::0;25011:6:::1;::::0;24971:27:::1;::::0;24983:14;24971:11:::1;:27::i;:48::-;24953:15;:66:::0;-1:-1:-1;;;24733:294:0:o;23444:228::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;23542:17:::1;:32:::0;;-1:-1:-1;;;;;23542:32:0;;::::1;-1:-1:-1::0;;;;;;23542:32:0;;::::1;::::0;::::1;::::0;;;23576:10:::1;:18:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23542:17:::1;23605:25:::0;;;:11:::1;:25;::::0;;;;;:32;;-1:-1:-1;;23605:32:0;;::::1;23542::::0;23605;;::::1;::::0;;;23639:18;;;;;:25;;;;::::1;::::0;;::::1;::::0;;23444:228::o;6219:111::-;6181:4;6206:5;-1:-1:-1;;;;;6206:5:0;6093:10;6195:16;6077:38;;;;-1:-1:-1;;;6077:38:0;;;;;;;:::i;:::-;6285:5:::1;:11:::0;;-1:-1:-1;;;;;;6285:11:0::1;-1:-1:-1::0;;;;;6285:11:0;::::1;::::0;;::::1;::::0;;;6303:25:::1;::::0;5156:51:1;;;6303:25:0::1;::::0;5144:2:1;5129:18;6303:25:0::1;;;;;;;6219:111:::0;:::o;13799:335::-;-1:-1:-1;;;;;13892:19:0;;13884:68;;;;-1:-1:-1;;;13884:68:0;;11121:2:1;13884: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;;13884:68:0;10919:400:1;13884:68:0;-1:-1:-1;;;;;13971:21:0;;13963:68;;;;-1:-1:-1;;;13963:68:0;;11526:2:1;13963: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;;13963:68:0;11324:398:1;13963:68:0;-1:-1:-1;;;;;14042:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14094:32;;160:25:1;;;14094:32:0;;133:18:1;14094:32:0;;;;;;;13799:335;;;:::o;17834:780::-;17934:12;:19;;-1:-1:-1;;;;17934:19:0;-1:-1:-1;;;17934:19:0;;;17964:304;;;;17982:22;18007:69;18064:11;;18007:52;18040:18;;18007:28;18017:17;;;;;;;;;-1:-1:-1;;;;;18017:17:0;18007:9;:28::i;:::-;:32;;:52::i;:69::-;17982:94;;18107:6;18090:14;:23;18087:53;;;18124:14;18115:23;;18087:53;18185:17;;18150:22;;18175:28;;-1:-1:-1;;;;;18185:17:0;18175:9;:28::i;:::-;18150:53;;18234:6;18217:14;:23;18214:53;;;18251:14;18242:23;;18214:53;17981:287;;17964:304;18296:15;;:27;;18316:6;18296:19;:27::i;:::-;18278:15;:45;18356:15;18334:19;:37;18406:21;;:37;;18440:1;18406:25;:37::i;:::-;18382:21;:61;18454:39;18463:6;18479:4;18486:6;18454:8;:39::i;:::-;18504:71;18519:6;18535:3;18541:6;18549:5;18556;18563;18570:4;18504:14;:71::i;:::-;-1:-1:-1;;18586:12:0;:20;;-1:-1:-1;;;;18586:20:0;;;-1:-1:-1;17834:780:0:o;14142:594::-;14231:37;14242:6;14250:9;14261:6;14231:10;:37::i;:::-;14279:38;14299:6;14307:9;14279:19;:38::i;:::-;14328:41;14343:6;14351:9;14362:6;14328:14;:41::i;:::-;14381:39;14394:9;14405:6;14413;14381:12;:39::i;:::-;14431:35;14448:6;14456:9;14431:16;:35::i;:::-;14477;14486:6;14494:9;14505:6;14477:8;:35::i;:::-;14523:33;14538:6;14546:9;14523:14;:33::i;:::-;-1:-1:-1;;;;;14611:19:0;;;;;;:11;:19;;;;;;14567:161;;14582:6;;14590:9;;14601:6;;14611:19;;;:45;;-1:-1:-1;;;;;;14634:22:0;;;;;;:11;:22;;;;;;;;14611:45;:57;;;-1:-1:-1;14660:8:0;;;;14611:57;:73;;;-1:-1:-1;14672:12:0;;-1:-1:-1;;;14672:12:0;;;;14611:73;14700:4;;14609:76;;;-1:-1:-1;;;;;14700:4:0;;;14687:17;;;;;;14706:14;;;14700:4;14567:14;:161::i;1470:162::-;1556:7;1602:12;1594:6;;;;1586:29;;;;-1:-1:-1;;;1586:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1624:5:0;;;1470:162::o;257:82::-;315:7;332:5;336:1;332;:5;:::i;345:82::-;403:7;420:5;424:1;420;:5;:::i;433:82::-;491:7;508:5;512:1;508;:5;:::i;30681:158::-;30722:7;30743:15;30760;30779:19;:17;:19::i;:::-;30742:56;;-1:-1:-1;30742:56:0;-1:-1:-1;30816:15:0;30742:56;;30816:15;:::i;:::-;30809:22;;;;30681:158;:::o;27725:444::-;27848:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27848:36:0;27909:64;27921:7;27930;27939:6;27947:10;27959:13;27909:11;:64::i;:::-;27897:76;;28067:67;28079:9;28090:7;28099;28108:10;:8;:10::i;:::-;28120:13;28067:11;:67::i;:::-;28047:16;;;27984:150;28031:14;;;27984:150;28004:25;;;27984:150;;;27725:444;;;;;;;;:::o;18622:692::-;18708:12;:19;;-1:-1:-1;;;;18708:19:0;-1:-1:-1;;;18708:19:0;;;18738:259;;;;18749:19;18771:55;18814:11;;18771:38;18797:11;;18771:21;18781:10;;;;;;;;;-1:-1:-1;;;;;18781:10:0;18771:9;:21::i;:55::-;18749:77;;18854:6;18840:11;:20;18837:47;;;18871:11;18862:20;;18837:47;18926:10;;18894:19;;18916:21;;-1:-1:-1;;;;;18926:10:0;18916:9;:21::i;:::-;18894:43;;18966:6;18951:11;:21;18948:48;;18983:11;18974:20;;18948:48;18748:249;;18738:259;19019:9;;:21;;19033:6;19019:13;:21::i;:::-;19007:9;:33;19066:15;19051:12;:30;19110:15;;:31;;19138:1;19110:19;:31::i;:::-;19092:15;:49;19152:39;19161:6;19177:4;19184:6;19152:8;:39::i;:::-;19233:4;;19202:73;;19217:6;;-1:-1:-1;;;;;19233:4:0;19240:6;19233:4;;;;19202:14;:73::i;169:82::-;227:7;244:5;248:1;244;:5;:::i;16291:863::-;16450:28;16481:63;16492:7;16501;16510:6;16518:10;16530:13;16481:10;:63::i;:::-;-1:-1:-1;;;;;16558:19:0;;;;;;:11;:19;;;;;;16450:94;;-1:-1:-1;16558:19:0;;16555:83;;;-1:-1:-1;;;;;16613:15:0;;;;;;:7;:15;;;;;;:23;;16629:7;;16613:23;:::i;:::-;-1:-1:-1;;;;;16595:15:0;;;;;;:7;:15;;;;;:41;16555:83;-1:-1:-1;;;;;16651:22:0;;;;;;:11;:22;;;;;;;;16648:101;;;16730:17;;;;-1:-1:-1;;;;;16711:18:0;;;;;;:7;:18;;;;;;:36;;16730:17;16711:36;:::i;:::-;-1:-1:-1;;;;;16690:18:0;;;;;;:7;:18;;;;;:57;16648:101;16793:9;;-1:-1:-1;;;;;16777:15:0;;16793:9;16777:15;;;:7;:15;;;;;;:25;;16793:9;16777:25;:::i;:::-;-1:-1:-1;;;;;16759:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16853:17;;;16834:18;;;;;;;;;;:36;;16853:17;16834:36;:::i;:::-;-1:-1:-1;;;;;16813:18:0;;;;;;:7;:18;;;;;;;:57;;;;16893:6;;;16901;;;;16881:42;;16893:6;16909:13;16881:11;:42::i;:::-;16934:30;16945:1;:8;;;16955:1;:8;;;16934:10;:30::i;:::-;16978:17;;;;:30;16975:88;;17032:9;-1:-1:-1;;;;;17015:46:0;17024:6;-1:-1:-1;;;;;17015:46:0;;17043:1;:17;;;17015:46;;;;160:25:1;;148:2;133:18;;14:177;17015:46:0;;;;;;;;16975:88;17076:8;;;;:21;17073:74;;17129:4;-1:-1:-1;;;;;17104:41:0;17113:6;-1:-1:-1;;;;;17104:41:0;;17136:1;:8;;;17104:41;;;;160:25:1;;148:2;133:18;;14:177;17104:41:0;;;;;;;;17073:74;16439:715;16291:863;;;;;;;:::o;14744:355::-;-1:-1:-1;;;;;14848:20:0;;14840:70;;;;-1:-1:-1;;;14840:70:0;;12102:2:1;14840: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;;14840:70:0;11900:401:1;14840:70:0;-1:-1:-1;;;;;14929:23:0;;14921:71;;;;-1:-1:-1;;;14921:71:0;;12508:2:1;14921: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;;14921:71:0;12306:399:1;14921:71:0;15021:17;15031:6;15021:9;:17::i;:::-;15011:6;:27;;15003:88;;;;-1:-1:-1;;;15003:88:0;;12912:2:1;15003: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;;15003:88:0;12710:413:1;15107:206:0;-1:-1:-1;;;;;15200:19:0;;;;;;:11;:19;;;;;;;;15199:20;:47;;;;-1:-1:-1;;;;;;15224:22:0;;;;;;:11;:22;;;;;;;;15223:23;15199:47;15196:110;;;15256:14;;;;15248:56;;;;-1:-1:-1;;;15248:56:0;;13330:2:1;15248:56:0;;;13312:21:1;13369:2;13349:18;;;13342:30;13408:31;13388:18;;;13381:59;13457:18;;15248:56:0;13128:353:1;15325:384:0;-1:-1:-1;;;;;15429:22:0;;;;;;:11;:22;;;;;;;;15428:23;:47;;;;-1:-1:-1;;;;;;15456:19:0;;;;;;:11;:19;;;;;;;;15455:20;15428:47;:77;;;;-1:-1:-1;;;;;;15479:26:0;;15500:4;15479:26;;15428:77;:107;;;;-1:-1:-1;15530:4:0;;-1:-1:-1;;;;;15509:26:0;;;15530:4;;15509:26;;15428:107;:128;;;;-1:-1:-1;15552:4:0;;-1:-1:-1;;;;;15539:17:0;;;15552:4;;15539:17;;15428:128;:163;;;;-1:-1:-1;15573:18:0;;-1:-1:-1;;;;;15560:31:0;;;15573:18;;15560:31;;15428:163;15425:277;;;15650:15;;15639:6;15616:20;15626:9;15616;:20::i;:::-;:29;;;;:::i;:::-;15615:50;;15607:93;;;;-1:-1:-1;;;15607:93:0;;13688:2:1;15607:93:0;;;13670:21:1;13727:2;13707:18;;;13700:30;13766:32;13746:18;;;13739:60;13816:18;;15607:93:0;13486:354:1;15919:193:0;16028:12;;16018:6;:22;;:45;;;-1:-1:-1;;;;;;16044:19:0;;;;;;:11;:19;;;;;;;;16018:45;:64;;;-1:-1:-1;;;;;;16067:15:0;;;;;;:11;:15;;;;;;;;16018:64;16010:94;;;;-1:-1:-1;;;16010:94:0;;14047:2:1;16010:94:0;;;14029:21:1;14086:2;14066:18;;;14059:30;-1:-1:-1;;;14105:18:1;;;14098:47;14162:18;;16010:94:0;13845:341:1;15717:194:0;15814:4;;-1:-1:-1;;;;;15801:17:0;;;15814:4;;15801:17;:41;;;;-1:-1:-1;;;;;;15823:19:0;;;;;;:11;:19;;;;;;;;15822:20;15801:41;:54;;;;-1:-1:-1;15847:8:0;;;;15846:9;15801:54;:71;;;;-1:-1:-1;15860:12:0;;-1:-1:-1;;;15860:12:0;;;;15859:13;15801:71;15798:106;;;15886:9;;:16;;15900:1;15886:13;:16::i;:::-;15874:9;:28;15717:194;;:::o;19997:188::-;20089:41;20104:6;20112:9;20123:6;20089:14;:41::i;:::-;20086:92;;;20132:29;20147:13;;20132:14;:29::i;:::-;20175:1;20163:9;:13;19997:188;;;:::o;17162:664::-;17263:15;17244;;:34;;:47;;;;-1:-1:-1;17283:8:0;;;;17282:9;17244:47;:68;;;;-1:-1:-1;17308:4:0;;-1:-1:-1;;;;;17295:17:0;;;17308:4;;17295:17;17244:68;:92;;;;-1:-1:-1;;;;;;17317:19:0;;;;;;:11;:19;;;;;;;;17316:20;17244:92;:107;;;;-1:-1:-1;17340:11:0;;-1:-1:-1;;;17340:11:0;;;;17244:107;:152;;;;-1:-1:-1;17365:17:0;;17394:1;;17355:28;;-1:-1:-1;;;;;17365:17:0;17355:9;:28::i;:::-;:41;17244:152;:169;;;;-1:-1:-1;17401:12:0;;-1:-1:-1;;;17401:12:0;;;;17400:13;17244:169;17241:312;;;17448:17;;17467;;17429:62;;-1:-1:-1;;;;;17448:17:0;;;17429:18;:62::i;:::-;17531:19;;17511:40;;:15;;:19;:40::i;:::-;17493:15;:58;17241:312;17578:15;17566:8;;:27;;:40;;;;-1:-1:-1;17598:8:0;;;;17597:9;17566:40;:61;;;;-1:-1:-1;17623:4:0;;-1:-1:-1;;;;;17610:17:0;;;17623:4;;17610:17;17566:61;:85;;;;-1:-1:-1;;;;;;17632:19:0;;;;;;:11;:19;;;;;;;;17631:20;17566:85;:93;;;;-1:-1:-1;17655:4:0;;-1:-1:-1;;;17655:4:0;;;;17566:93;:131;;;;-1:-1:-1;17673:10:0;;17695:1;;17663:21;;-1:-1:-1;;;;;17673:10:0;17663:9;:21::i;:::-;:34;17566:131;:148;;;;-1:-1:-1;17702:12:0;;-1:-1:-1;;;17702:12:0;;;;17701:13;17566:148;17563:256;;;17742:10;;17754;;17730:41;;-1:-1:-1;;;;;17742:10:0;;;17730:11;:41::i;:::-;17804:12;;17784:33;;:15;;:19;:33::i;:::-;17773:8;:44;17162:664;;:::o;30847:531::-;30944:7;;30980;;30897;;;;;30998:270;31022:9;:16;31018:20;;30998:270;;;31088:7;31064;:21;31072:9;31082:1;31072:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31072:12:0;31064:21;;;;;;;;;;;;;:31;;:66;;;31123:7;31099;:21;31107:9;31117:1;31107:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31107:12:0;31099:21;;;;;;;;;;;;;:31;31064:66;31060:97;;;31140:7;;31149;;31132:25;;;;;;;30847:531;;:::o;31060:97::-;31190:7;:21;31198:9;31208:1;31198:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31198:12:0;31190:21;;;;;;;;;;;;;31182:29;;:7;:29;:::i;:::-;31172:39;;31244:7;:21;31252:9;31262:1;31252:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31252:12:0;31244:21;;;;;;;;;;;;;31236:29;;:7;:29;:::i;:::-;31226:39;-1:-1:-1;31040:3:0;;;;:::i;:::-;;;;30998:270;;;;31300:7;;31292;;:15;;;;:::i;:::-;31282:7;:25;31278:56;;;31317:7;;31326;;31309:25;;;;;;30847:531;;:::o;31278:56::-;31353:7;;31362;;-1:-1:-1;30847:531:0;-1:-1:-1;30847:531:0:o;28395:1361::-;28519:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28519:28:0;28564:7;28563:8;:26;;;;;28576:13;28575:14;28563:26;:77;;;;28593:29;28603:6;28611:10;28593:9;:29::i;:::-;:47;;;;;28627:13;28626:14;28593:47;28560:146;;;28655:17;;;:27;;;28695:8;;28560:146;28720:6;28719:7;:22;;;;;28731:10;28730:11;28719:22;:40;;;;;28746:13;28745:14;28719:40;28716:311;;;28775:17;28795:41;28824:11;;28795:24;28807:11;;28795:7;:11;;:24;;;;:::i;:41::-;28775:61;;28870:11;;28854:8;:12;;;:27;28851:75;;28913:11;;28900:8;:12;28892:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28883:6;;;:41;28851:75;28965:6;;;;28951:21;;:9;;:13;:21::i;:::-;28940:8;;;:32;29007:17;29015:9;29007:7;:17;:::i;:::-;28987;;;:37;-1:-1:-1;28716:311:0;29040:6;:24;;;;;29051:13;29050:14;29040:24;29037:287;;;29080:17;29100:37;29125:11;;29100:20;29112:7;;29100;:11;;:20;;;;:::i;:37::-;29080:57;;29171:7;;29155:8;:12;;;:23;29152:71;;29210:11;;29197:8;:12;29189:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29180:6;;;:41;29152:71;29262:6;;;;29248:21;;:9;;:13;:21::i;:::-;29237:8;;;:32;29304:17;29312:9;29304:7;:17;:::i;:::-;29284;;;:37;-1:-1:-1;29037:287:0;29337:10;:28;;;;;29352:13;29351:14;29337:28;29334:293;;;29381:17;29401:38;29427:11;;29401:21;29413:8;;29401:7;:11;;:21;;;;:::i;:38::-;29381:58;;29473:8;;29457;:12;;;:24;29454:72;;29513:11;;29500:8;:12;29492:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29483:6;;;:41;29454:72;29565:6;;;;29551:21;;:9;;:13;:21::i;:::-;29540:8;;;:32;29607:17;29615:9;29607:7;:17;:::i;:::-;29587;;;:37;-1:-1:-1;29334:293:0;29640:13;29637:93;;;29669:6;;;:16;;;29700:17;;;:27;;;28395:1361;;;;;;;:::o;29764:705::-;29909:15;;;;30002:19;30010:11;30002:7;:19;:::i;:::-;29992:29;;30036:7;30035:8;:26;;;;;30048:13;30047:14;30035:26;30032:76;;;-1:-1:-1;30084:7:0;;-1:-1:-1;30102:1:0;;-1:-1:-1;30102:1:0;30077:29;;30032:76;30121:13;30118:161;;;30164:11;30157:1;:6;;;:18;;;;:::i;:::-;30150:25;-1:-1:-1;30209:12:0;30150:25;30209:7;:12;:::i;:::-;30190:31;-1:-1:-1;30275:1:0;;-1:-1:-1;30236:41:0;;30118:161;30303:11;30296:1;:6;;;:18;;;;:::i;:::-;30289:25;;30343:11;30334:1;:8;;;:20;;;;:::i;:::-;30325:29;-1:-1:-1;30325:29:0;30384:12;30392:4;30384:7;:12;:::i;:::-;:19;;;;:::i;:::-;30365:38;;29764:705;;;;;;;;;;;:::o;16120:163::-;16218:4;16208:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;16237:13:0;;-1:-1:-1;16233:43:0;;16270:4;16252:11;:15;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16120:163:0;;;:::o;27461:256::-;27552:6;27532:11;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;27594:4:0;27574:26;;;;:11;:26;;;;;;;;27571:97;;;27642:4;27626:22;;;;:7;:22;;;;;:30;;27650:6;;27626:22;:30;;27650:6;;27626:30;:::i;:::-;;;;-1:-1:-1;;27571:97:0;27694:4;27678:22;;;;:7;:22;;;;;:31;;27703:6;;27678:22;:31;;27703:6;;27678:31;:::i;:::-;;;;-1:-1:-1;;;;27461:256:0:o;19559:430::-;19657:4;19674:13;19700:15;;19690:6;:25;;19674:41;;19726:19;19776:13;;19748:24;19766:4;19748:9;:24::i;:::-;19808:8;;19748:41;-1:-1:-1;19748:41:0;;-1:-1:-1;19808:8:0;;19807:9;:24;;;;-1:-1:-1;19820:11:0;;;;;;;19807:24;:36;;;;;19835:8;19807:36;:60;;;;-1:-1:-1;;;;;;19848:19:0;;;;;;:11;:19;;;;;;;;19847:20;19807:60;:78;;;;-1:-1:-1;19871:14:0;;;;19807:78;:112;;;;-1:-1:-1;19915:4:0;;-1:-1:-1;;;;;19902:17:0;;;19915:4;;19902:17;19807:112;:139;;;;;19936:10;;19923:9;;:23;;19807:139;:157;;;;;19950:14;19807:157;:174;;;;-1:-1:-1;19969:12:0;;-1:-1:-1;;;19969:12:0;;;;19968:13;19807:174;19800:181;19559:430;-1:-1:-1;;;;;;19559:430:0:o;20193:1113::-;12781:8;:15;;-1:-1:-1;;12781:15:0;12792:4;12781:15;;;;;;20287:8:::1;::::0;12781;;20286:24:::1;::::0;20308:1:::1;::::0;20286:17:::1;::::0;20287:8;20286:14:::1;:17::i;:24::-;20263:47;;20324:8;;20336:1;20324:13:::0;20321:91:::1;;20377:18:::0;;20354;;:56:::1;::::0;20408:1:::1;::::0;20354:49:::1;::::0;20401:1:::1;::::0;20354:42:::1;::::0;:22:::1;:42::i;:::-;:46:::0;::::1;:49::i;:56::-;20339:71;;20321:91;20466:18:::0;;20422:32:::1;::::0;20487:12;;20457:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20422:77:::0;-1:-1:-1;20510:14:0::1;20527:33;20422:77:::0;20527:6;:33:::1;:::i;:::-;20510:50:::0;-1:-1:-1;20596:21:0::1;20628:24;20510:50:::0;20628:16:::1;:24::i;:::-;20663:20;20686:38;20710:14:::0;20686:21:::1;:38;:::i;:::-;20787:18:::0;;20663:61;;-1:-1:-1;20735:19:0::1;::::0;20772:33:::1;::::0;:12;:33:::1;:::i;:::-;20756:50;::::0;:12;:50:::1;:::i;:::-;20863:18:::0;;20735:71;;-1:-1:-1;20817:29:0::1;::::0;20849:32:::1;::::0;20735:71;20849:32:::1;:::i;:::-;20817:64:::0;-1:-1:-1;20895:25:0;;20892:108:::1;;20936:61;20949:24;20975:21;20936:12;:61::i;:::-;21059:18:::0;;21010:23:::1;::::0;21036:42:::1;::::0;:18:::1;:11:::0;21052:1:::1;21036:15;:18::i;:42::-;21010:68:::0;-1:-1:-1;21092:19:0;;21089:80:::1;;21121:18;::::0;21113:53:::1;::::0;-1:-1:-1;;;;;21121:18:0;;::::1;::::0;21113:53;::::1;;;::::0;21150:15;;21121:18:::1;21113:53:::0;21121:18;21113:53;21150:15;21121:18;21113:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21089:80;21197:21;21232:20:::0;;21229:70:::1;;21262:16;::::0;21254:43:::1;::::0;-1:-1:-1;;;;;21262:16:0;;::::1;::::0;21254:43;::::1;;;::::0;21289:7;;21262:16:::1;21254:43:::0;21262:16;21254:43;21289:7;21262:16;21254:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21229:70;-1:-1:-1::0;;12801:8:0;:16;;-1:-1:-1;;12801:16:0;;;-1:-1:-1;;;;;;;;20193:1113:0:o;28177:210::-;28249:4;28274:6;:22;;;;-1:-1:-1;28284:7:0;;:12;28274:22;28273:57;;;;28302:10;:27;;;;-1:-1:-1;28316:8:0;;:13;28302:27;28273:105;;;;28336:6;28335:7;:22;;;;;28347:10;28346:11;28335:22;:42;;;;-1:-1:-1;;28361:11:0;;:16;;28177:210;-1:-1:-1;;28177:210:0:o;21665:434::-;21755:16;;;21769:1;21755:16;;;;;;;;21731:21;;21755:16;;;;;;;;;;-1:-1:-1;21755:16:0;21731:40;;21800:4;21782;21787:1;21782:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21782:23:0;;;:7;;;;;;;;;;:23;;;;21826:6;;:13;;;-1:-1:-1;;;21826:13:0;;;;:6;;;;;:11;;:13;;;;;21782:7;;21826:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21816:4;21821:1;21816:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21816:23:0;;;:7;;;;;;;;;:23;21882:6;;21850:53;;21867:4;;21882:6;21891:11;21850:8;:53::i;:::-;21914:6;;:177;;-1:-1:-1;;;21914:177:0;;-1:-1:-1;;;;;21914:6:0;;;;:57;;:177;;21986:11;;21914:6;;22028:4;;22055;;22075:15;;21914:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21314:343;21427:6;;21395:53;;21412:4;;-1:-1:-1;;;;;21427:6:0;21436:11;21395:8;:53::i;:::-;21459:6;;21600:18;;21459:190;;-1:-1:-1;;;21459:190:0;;21522:4;21459:190;;;15905:34:1;15955:18;;;15948:34;;;21459:6:0;15998:18:1;;;15991:34;;;16041:18;;;16034:34;-1:-1:-1;;;;;21600:18:0;;;16084:19:1;;;16077:44;21633:15:0;16137:19:1;;;16130:35;21459:6:0;;;:22;;21489:9;;15839:19:1;;21459: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://31f4e22211c105a07f41fe4db212a4d8dabdd79bd22b6670c03e51a9caa64d4b
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.