ETH Price: $2,444.55 (-1.01%)

Token

BTCBullDog ETH (BitDog-E)
 

Overview

Max Total Supply

1,000,000,000 BitDog-E

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,859,565.850673981821542211 BitDog-E

Value
$0.00
0xdaa8ccbbcc7de35abc0eff020b7b98d2bb0a6d1e
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:
BTCBullDogETH

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-18
*/

// SPDX-License-Identifier: UNLICENSE
pragma solidity ^0.8.17;

interface IBEP20 {
    function totalSupply() external view returns (uint256);

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

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

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

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

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


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract BTCBullDogETH is Context, IBEP20, Ownable {
    using Address for address payable;
    using SafeMath for uint256;

    uint256 public maxBuyTransactionAmount =  1000000  * (10**18);
    uint256 public maxSellTransactionAmount = 1000000 * (10**18);



    mapping(address => bool) public _isBlacklisted;
    mapping(address => bool) public teamWallets;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;

    address[] private _excluded;

    bool private swapping;
    bool public tradingIsEnabled = false;
    bool teamCanTrade = false;


    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 200000 * 10**_decimals;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity,
        bool success
    );

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0x48a959c8Ba47863F41A13689C97Fa4aFDFF86FFd;
    address public liquidityWallet = 0x69f33B0F3eed2eE635769181df8449CD8aF638D2;
    address public nftWallet = 0xE9354D1B507Fe75aa1C1601bB1f40DaCf33caC41;

    string private constant _name = "BTCBullDog ETH";
    string private constant _symbol = "BitDog-E";

    uint256 countMarketingTokens;
    uint256 countLPTokens;
    uint256 countNFTRewardsTokens;

    struct BuyTaxes {
        uint256 rfi;
        uint256 marketing;
        uint256 lp;
        uint256 nftRewards;
    }

    struct SellTaxes {
        uint256 rfi;
        uint256 marketing;
        uint256 lp;
        uint256 nftRewards;
    }

    // tax reflection, mkt, lp, nftRewards
    BuyTaxes public taxes = BuyTaxes(4, 2, 2, 4);
    SellTaxes public selltaxes = SellTaxes(8, 4, 4, 8);

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 marketing;
        uint256 lp;
        uint256 nftRewards;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rNFTRewards;
        uint256 rLP;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tNFTRewards;
        uint256 tLP;
    }

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

    constructor() {
        IRouter _router = IRouter(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;

        excludeFromReward(pair);
        excludeFromReward(deadWallet);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[liquidityWallet] = true;
        _isExcludedFromFee[deadWallet] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

    //std BEP20:
    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;
    }

    //override BEP20:
    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 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(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "BEP20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "BEP20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }


    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);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            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;
    }

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(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 blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function setTradingIsEnabled() external onlyOwner {
        tradingIsEnabled = true;
    }

    function allowTeamtrading() external onlyOwner {
        teamCanTrade = true;
    } 
    
    function addTeamWallet(address wallet) external onlyOwner {
        teamWallets[wallet] = true;
    }

    function includeInReward(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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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


    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing += tMarketing;
        countMarketingTokens += tMarketing;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tMarketing;
        }
        _rOwned[address(this)] += rMarketing;
    }

    function _takeNFTRewards(uint256 rNFTRewards, uint256 tNFTRewards) private {
        totFeesPaid.nftRewards += tNFTRewards;
        countNFTRewardsTokens  += tNFTRewards;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tNFTRewards;
        }
        _rOwned[address(this)] += rNFTRewards;
    }

    function _takeLP(uint256 rLP, uint256 tLP) private {
        totFeesPaid.lp += tLP;
        countLPTokens  += tLP;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tLP;
        }
        _rOwned[address(this)] += rLP;
    }

    function _getValues(
        uint256 tAmount,
        bool takeFee
    ) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rMarketing,
            to_return.rNFTRewards,
            to_return.rLP
        ) = _getRValues(to_return, tAmount, takeFee, _getRate());

        return to_return;
    }

    function _getTValues(
        uint256 tAmount,
        bool takeFee
    ) private view returns (valuesFromGetValues memory s) {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }

        s.tRfi = (tAmount * taxes.rfi) / 100;
        s.tMarketing = (tAmount * taxes.marketing) / 100;
        s.tNFTRewards = (tAmount * taxes.nftRewards) / 100;
        s.tLP = (tAmount * taxes.lp) / 100;
        s.tTransferAmount =
            tAmount -
            s.tRfi -
            s.tMarketing -
            s.tNFTRewards -
            s.tLP;
        return s;
    }

    function _getRValues(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rMarketing,
            uint256 rNFTRewards,
            uint256 rLP
        )
    {
        rAmount = tAmount * currentRate;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0, 0, 0);
        }

        rRfi = s.tRfi * currentRate;
        rMarketing = s.tMarketing * currentRate;
        rNFTRewards = s.tNFTRewards * currentRate;
        rLP = s.tLP * currentRate;
        rTransferAmount =
            rAmount -
            rRfi -
            rMarketing -
            rNFTRewards -
            rLP;
        return (rAmount, rTransferAmount, rRfi, rMarketing, rNFTRewards, rLP);
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address");
        require(tradingIsEnabled || (_isExcludedFromFee[from] || _isExcludedFromFee[to]), "Trading not started");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );

        if(!teamCanTrade){
            require(!teamWallets[from], "Team Cannot trade!");
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

            uint256 oldBuyRFI = taxes.rfi;
            uint256 oldBuyMarketing = taxes.marketing;
            uint256 oldBuyNFTRewards = taxes.nftRewards;
            uint256 oldBuyLP = taxes.lp;

        if(from != pair){
        
            taxes.rfi = selltaxes.rfi;
            taxes.marketing = selltaxes.marketing;
            taxes.nftRewards = selltaxes.nftRewards;
            taxes.lp = selltaxes.lp;
        }

        if (
            from == pair &&
             !_isExcludedFromFee[from] &&
             !_isExcludedFromFee[to]
        ) {
            
            require(amount <= maxBuyTransactionAmount, "maximum buy amount reached.");
        }

        if ( 
            to == pair &&
             !_isExcludedFromFee[from] &&
             !_isExcludedFromFee[to]
        ) {

           require(amount <= maxSellTransactionAmount, "maximum sell amount reached.");
        }

        if (
            !swapping &&
            canSwap &&
            from != pair &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {

            swapAndSendMarketingETH(countMarketingTokens);
            swapAndSendNFTRewardETH(countNFTRewardsTokens);
            swapAndLiquify(countLPTokens);
        }
        bool takeFee = true;
        if (swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;

        _tokenTransfer(from, to, amount, takeFee);

        if(from != pair){
           
            taxes.rfi = oldBuyRFI;
            taxes.marketing = oldBuyMarketing;
            taxes.nftRewards = oldBuyNFTRewards;
            taxes.lp = oldBuyLP;

        }
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
            //from excluded
            _tOwned[sender] = _tOwned[sender] - tAmount;
        }
        if (_isExcluded[recipient]) {
            //to excluded
            _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender] - s.rAmount;
        _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;

        if (s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if (s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if (s.rNFTRewards > 0 || s.tNFTRewards > 0) _takeNFTRewards(s.rNFTRewards, s.tNFTRewards);
        if (s.rLP > 0 || s.tLP > 0) _takeLP(s.rLP, s.tLP);
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndSendMarketingETH(uint256 _tokenAmount) private lockTheSwap {
       
        uint256 contractBalance = balanceOf(address(this));
        
        if(_tokenAmount > contractBalance){
            return;
        }

        swapTokensForETH(_tokenAmount, marketingWallet);
        countMarketingTokens -= _tokenAmount;

    }

    function swapAndSendNFTRewardETH(uint256 _tokenAmount) private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));

        if(_tokenAmount > contractBalance){
            return;
        }

        swapTokensForETH(_tokenAmount, nftWallet);
        countNFTRewardsTokens -= _tokenAmount;

    }

    function swapAndLiquify(uint256 tokens) private {

        if(tokens > balanceOf(address(this))){
            emit SwapAndLiquify(0, 0, 0, false);
            return;
        }
        
        
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        
        if(half <= 0 || otherHalf <= 0){
            return;
        }

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half, payable(address(this)));
        
        countLPTokens -= half;

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        countLPTokens -= otherHalf;
        
        emit SwapAndLiquify(half, newBalance, otherHalf, true);
    }


      
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }



    function swapTokensForETH(uint256 tokenAmount, address wallet) private {
        // generate the pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            payable(wallet),
            block.timestamp
        );
    }

    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = newWallet;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(amount <= 10000000, "Cannot set swap threshold amount higher than 1% of tokens");
        swapTokensAtAmount = amount * 10**_decimals;
    }


    function updateBuyTax(uint256 _rfl, uint256 _marketing, uint256 _nftRewards, uint256 _lp) external onlyOwner {
        uint256 _totalBuyFees = _rfl.add(_marketing).add(_nftRewards).add(_lp);

        require(_totalBuyFees <= 16, "Cannot be total fees higher than 16%");
        taxes.rfi = _rfl;
        taxes.marketing = _marketing;
        taxes.nftRewards = _nftRewards;
        taxes.lp = _lp;
   
    }

    function updateSellTax(uint256 _rfl, uint256 _marketing, uint256 _nftRewards, uint256 _lp) external onlyOwner {
        uint256 _totalSellFees = _rfl.add(_marketing).add(_nftRewards).add(_lp);

        require(_totalSellFees <= 16, "Cannot be total fees higher than 16%");
        selltaxes.rfi = _rfl;
        selltaxes.marketing = _marketing;
        selltaxes.nftRewards = _nftRewards;
        selltaxes.lp = _lp;

        
    }

    receive() external payable {}
}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapAndLiquify","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowTeamtrading","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":"nftWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selltaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"nftRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setTradingIsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"nftRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"teamWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"nftRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfl","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_nftRewards","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfl","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_nftRewards","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269d3c21bcecceda10000006001819055600255600b805462ffff0019169055620000316012600a620009c9565b6200004190633b9aca00620009da565b600d819055620000549060001962000a0a565b620000629060001962000a21565b600e55620000736012600a620009c9565b620000829062030d40620009da565b600f55601080546001600160a01b031990811661dead179091556011805482167348a959c8ba47863f41a13689c97fa4afdff86ffd1790556012805482167369f33b0f3eed2ee635769181df8449cd8af638d21790556013805490911673e9354d1b507fe75aa1c1601bb1f40dacf33cac411790556040805160808082018352600480835260026020808501829052848601829052606094850183905260178390556018829055601991909155601a8290558451928301855260088084529083018290529382018190529101829052601b829055601c819055601d55601e553480156200016e57600080fd5b506200017a336200048a565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fa919062000a37565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000a37565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000a37565b600b80546001600160a01b038086166301000000026301000000600160b81b031990921691909117909155600c80549183166001600160a01b0319909216821790559091506200033290620004da565b60105462000349906001600160a01b0316620004da565b600e5460056000620003636000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526008918290528220805460ff1916600190811790915591620003b26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601154821681526008909352818320805485166001908117909155601254821684528284208054861682179055601054909116835291208054909216179055620004326000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200047a91815260200190565b60405180910390a3505062000aab565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200053a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615620005a55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000531565b6001600160a01b0381166000908152600560205260409020541562000602576001600160a01b038116600090815260056020526040902054620005e89062000668565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600e54821115620006d15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000531565b6000620006dd620006f2565b9050620006eb818462000a62565b9392505050565b600080806200070062000718565b909250905062000711818362000a62565b9250505090565b600e54600d546000918291825b600a5481101562000880578260056000600a84815481106200074b576200074b62000a79565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007ba57508160066000600a848154811062000793576200079362000a79565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620007d157600e54600d54945094505050509091565b60056000600a8381548110620007eb57620007eb62000a79565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200081c908462000a21565b925060066000600a838154811062000838576200083862000a79565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000869908362000a21565b915080620008778162000a8f565b91505062000725565b50600d54600e5462000893919062000a62565b821015620008ab57600e54600d549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200090b578160001904821115620008ef57620008ef620008b4565b80851615620008fd57918102915b93841c9390800290620008cf565b509250929050565b6000826200092457506001620009c3565b816200093357506000620009c3565b81600181146200094c5760028114620009575762000977565b6001915050620009c3565b60ff8411156200096b576200096b620008b4565b50506001821b620009c3565b5060208310610133831016604e8410600b84101617156200099c575081810a620009c3565b620009a88383620008ca565b8060001904821115620009bf57620009bf620008b4565b0290505b92915050565b6000620006eb60ff84168362000913565b8082028115828204841417620009c357620009c3620008b4565b634e487b7160e01b600052601260045260246000fd5b60008262000a1c5762000a1c620009f4565b500690565b81810381811115620009c357620009c3620008b4565b60006020828403121562000a4a57600080fd5b81516001600160a01b0381168114620006eb57600080fd5b60008262000a745762000a74620009f4565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000aa45762000aa4620008b4565b5060010190565b612ee08062000abb6000396000f3fe6080604052600436106102815760003560e01c806388c7c85c1161014f578063b4bad528116100c1578063dd62ed3e1161007a578063dd62ed3e1461081f578063e2f4560514610865578063ea2f0b371461087b578063f2fde38b1461089b578063f887ea40146108bb578063fdf7d2c0146108e257600080fd5b8063b4bad52814610772578063b95859d114610792578063c03bd2aa146107b5578063d257b34f146107ca578063d4698016146107ea578063d5b281551461080a57600080fd5b80639ba5e4d5116101135780639ba5e4d5146106af578063a457c2d7146106d2578063a8aa1b31146106f2578063a9059cbb14610712578063aacebbe314610732578063b1e370081461075257600080fd5b806388c7c85c146105e757806388f82020146106075780638da5cb5b146106405780638e2839ff1461065e57806395d89b411461067e57600080fd5b806339509351116101f35780635aa821a9116101ac5780635aa821a91461050157806370a0823114610517578063715018a614610537578063728f8eea1461054c57806375f0a8741461058f57806385141a77146105c757600080fd5b80633950935114610428578063437823ec146104485780634549b03914610468578063455a43961461048857806352390c02146104a85780635342acb4146104c857600080fd5b80631cdd3be3116102455780631cdd3be31461035a5780631d202bbf1461038a57806323b872dd146103ac5780632d838119146103cc578063313ce567146103ec5780633685d4191461040857600080fd5b806302259e9e1461028d57806306fdde03146102b6578063095ea7b3146102f657806309c58fcd1461032657806318160ddd1461034557600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a360025481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5060408051808201909152600e81526d084a88684ead8d888dece408aa8960931b60208201525b6040516102ad91906128f2565b34801561030257600080fd5b50610316610311366004612965565b610912565b60405190151581526020016102ad565b34801561033257600080fd5b50600b5461031690610100900460ff1681565b34801561035157600080fd5b50600d546102a3565b34801561036657600080fd5b50610316610375366004612991565b60036020526000908152604090205460ff1681565b34801561039657600080fd5b506103aa6103a53660046129ae565b610929565b005b3480156103b857600080fd5b506103166103c73660046129e0565b6109ac565b3480156103d857600080fd5b506102a36103e7366004612a21565b610a5d565b3480156103f857600080fd5b50604051601281526020016102ad565b34801561041457600080fd5b506103aa610423366004612991565b610ae1565b34801561043457600080fd5b50610316610443366004612965565b610c97565b34801561045457600080fd5b506103aa610463366004612991565b610cce565b34801561047457600080fd5b506102a3610483366004612a4a565b610d1c565b34801561049457600080fd5b506103aa6104a3366004612a76565b610da6565b3480156104b457600080fd5b506103aa6104c3366004612991565b610dfb565b3480156104d457600080fd5b506103166104e3366004612991565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561050d57600080fd5b506102a360015481565b34801561052357600080fd5b506102a3610532366004612991565b610f4e565b34801561054357600080fd5b506103aa610fad565b34801561055857600080fd5b50601754601854601954601a5461056f9392919084565b6040805194855260208501939093529183015260608201526080016102ad565b34801561059b57600080fd5b506011546105af906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b3480156105d357600080fd5b506010546105af906001600160a01b031681565b3480156105f357600080fd5b506103aa610602366004612991565b610fe3565b34801561061357600080fd5b50610316610622366004612991565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561064c57600080fd5b506000546001600160a01b03166105af565b34801561066a57600080fd5b506103aa610679366004612ab8565b611031565b34801561068a57600080fd5b50604080518082019091526008815267426974446f672d4560c01b60208201526102e9565b3480156106bb57600080fd5b50601f5460205460215460225461056f9392919084565b3480156106de57600080fd5b506103166106ed366004612965565b6110c7565b3480156106fe57600080fd5b50600c546105af906001600160a01b031681565b34801561071e57600080fd5b5061031661072d366004612965565b611162565b34801561073e57600080fd5b506103aa61074d366004612991565b61116f565b34801561075e57600080fd5b506013546105af906001600160a01b031681565b34801561077e57600080fd5b506103aa61078d3660046129ae565b61121c565b34801561079e57600080fd5b50601b54601c54601d54601e5461056f9392919084565b3480156107c157600080fd5b506103aa611290565b3480156107d657600080fd5b506103aa6107e5366004612a21565b6112cb565b3480156107f657600080fd5b506012546105af906001600160a01b031681565b34801561081657600080fd5b506103aa61138a565b34801561082b57600080fd5b506102a361083a366004612b8f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561087157600080fd5b506102a3600f5481565b34801561088757600080fd5b506103aa610896366004612991565b6113c7565b3480156108a757600080fd5b506103aa6108b6366004612991565b611412565b3480156108c757600080fd5b50600b546105af90630100000090046001600160a01b031681565b3480156108ee57600080fd5b506103166108fd366004612991565b60046020526000908152604090205460ff1681565b600061091f3384846114ad565b5060015b92915050565b6000546001600160a01b0316331461095c5760405162461bcd60e51b815260040161095390612bc8565b60405180910390fd5b60006109748261096e858189896115d1565b906115d1565b905060108111156109975760405162461bcd60e51b815260040161095390612bfd565b50601793909355601891909155601a55601955565b60006109b9848484611630565b6001600160a01b038416600090815260076020908152604080832033845290915290205482811015610a3e5760405162461bcd60e51b815260206004820152602860248201527f42455032303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610953565b610a528533610a4d8685612c57565b6114ad565b506001949350505050565b6000600e54821115610ac45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610953565b6000610ace611c39565b9050610ada8184612c6a565b9392505050565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03811660009081526009602052604090205460ff16610b735760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610953565b60005b600a54811015610c9357816001600160a01b0316600a8281548110610b9d57610b9d612c8c565b6000918252602090912001546001600160a01b031603610c8157600a8054610bc790600190612c57565b81548110610bd757610bd7612c8c565b600091825260209091200154600a80546001600160a01b039092169183908110610c0357610c03612c8c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610c5b57610c5b612ca2565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c8b81612cb8565b915050610b76565b5050565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161091f918590610a4d908690612cd1565b6000546001600160a01b03163314610cf85760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d54831115610d705760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610953565b81610d8c576000610d82846001611c5c565b5191506109239050565b6000610d99846001611c5c565b6020015191506109239050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e255760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03811660009081526009602052604090205460ff1615610e8e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610953565b6001600160a01b03811660009081526005602052604090205415610ee8576001600160a01b038116600090815260056020526040902054610ece90610a5d565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff1615610f8b57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526005602052604090205461092390610a5d565b6000546001600160a01b03163314610fd75760405162461bcd60e51b815260040161095390612bc8565b610fe16000611ca4565b565b6000546001600160a01b0316331461100d5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b0316331461105b5760405162461bcd60e51b815260040161095390612bc8565b60005b82518110156110c257816008600085848151811061107e5761107e612c8c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806110ba81612cb8565b91505061105e565b505050565b3360009081526007602090815260408083206001600160a01b0386168452909152812054828110156111495760405162461bcd60e51b815260206004820152602560248201527f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b6111583385610a4d8685612c57565b5060019392505050565b600061091f338484611630565b6000546001600160a01b031633146111995760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b0381166111fa5760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b6064820152608401610953565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112465760405162461bcd60e51b815260040161095390612bc8565b60006112588261096e858189896115d1565b9050601081111561127b5760405162461bcd60e51b815260040161095390612bfd565b50601b93909355601c91909155601e55601d55565b6000546001600160a01b031633146112ba5760405162461bcd60e51b815260040161095390612bc8565b600b805461ff001916610100179055565b6000546001600160a01b031633146112f55760405162461bcd60e51b815260040161095390612bc8565b6298968081111561136e5760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610953565b61137a6012600a612dc8565b6113849082612dd7565b600f5550565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260040161095390612bc8565b600b805462ff0000191662010000179055565b6000546001600160a01b031633146113f15760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461143c5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b0381166114a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b6114aa81611ca4565b50565b6001600160a01b03831661150f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b0382166115705760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806115de8385612cd1565b905083811015610ada5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610953565b6001600160a01b0383166116945760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610953565b6001600160a01b0382166116f65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610953565b6001600160a01b03831660009081526003602052604090205460ff1615801561173857506001600160a01b03821660009081526003602052604090205460ff16155b61177a5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610953565b600b54610100900460ff16806117ca57506001600160a01b03831660009081526008602052604090205460ff16806117ca57506001600160a01b03821660009081526008602052604090205460ff165b61180c5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b6044820152606401610953565b6000811161186e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610953565b61187783610f4e565b8111156118e05760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610953565b600b5462010000900460ff1661194e576001600160a01b03831660009081526004602052604090205460ff161561194e5760405162461bcd60e51b81526020600482015260126024820152715465616d2043616e6e6f742074726164652160701b6044820152606401610953565b6000600f5461195c30610f4e565b601754601854601a54601954600c549590941015955091939092906001600160a01b038981169116146119a257601b54601755601c54601855601e54601a55601d546019555b600c546001600160a01b0389811691161480156119d857506001600160a01b03881660009081526008602052604090205460ff16155b80156119fd57506001600160a01b03871660009081526008602052604090205460ff16155b15611a5457600154861115611a545760405162461bcd60e51b815260206004820152601b60248201527f6d6178696d756d2062757920616d6f756e7420726561636865642e00000000006044820152606401610953565b600c546001600160a01b038881169116148015611a8a57506001600160a01b03881660009081526008602052604090205460ff16155b8015611aaf57506001600160a01b03871660009081526008602052604090205460ff16155b15611b0657600254861115611b065760405162461bcd60e51b815260206004820152601c60248201527f6d6178696d756d2073656c6c20616d6f756e7420726561636865642e000000006044820152606401610953565b600b5460ff16158015611b165750845b8015611b305750600c546001600160a01b03898116911614155b8015611b5557506001600160a01b03881660009081526008602052604090205460ff16155b8015611b7a57506001600160a01b03871660009081526008602052604090205460ff16155b15611ba057611b8a601454611cf4565b611b95601654611d59565b611ba0601554611daa565b600b5460019060ff1680611bcc57506001600160a01b03891660009081526008602052604090205460ff165b80611bef57506001600160a01b03881660009081526008602052604090205460ff165b15611bf8575060005b611c0489898984611ed7565b600c546001600160a01b038a8116911614611c2e5760178590556018849055601a83905560198290555b505050505050505050565b6000806000611c46612135565b9092509050611c558183612c6a565b9250505090565b611c64612898565b611c6e83836122b8565b9050611c83818484611c7e611c39565b612396565b60a08701526080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b805460ff191660011790556000611d0c30610f4e565b905080821115611d1c5750611d4c565b601154611d339083906001600160a01b0316612448565b8160146000828254611d459190612c57565b9091555050505b50600b805460ff19169055565b600b805460ff191660011790556000611d7130610f4e565b905080821115611d815750611d4c565b601354611d989083906001600160a01b0316612448565b8160166000828254611d459190612c57565b611db330610f4e565b811115611e045760408051600080825260208201819052818301819052606082015290517f5826dab182292d2e5b8adf2856697983c65b882fa567a247222747a43e606d199181900360800190a150565b6000611e118260026125ca565b90506000611e1f838361260c565b9050811580611e2c575080155b15611e3657505050565b47611e418330612448565b8260156000828254611e539190612c57565b9091555060009050611e65478361260c565b9050611e71838261264e565b8260156000828254611e839190612c57565b90915550506040805185815260208101839052908101849052600160608201527f5826dab182292d2e5b8adf2856697983c65b882fa567a247222747a43e606d199060800160405180910390a15050505050565b6000611ee38383611c5c565b6001600160a01b03861660009081526009602052604090205490915060ff1615611f45576001600160a01b038516600090815260066020526040902054611f2b908490612c57565b6001600160a01b0386166000908152600660205260409020555b6001600160a01b03841660009081526009602052604090205460ff1615611fa85760c08101516001600160a01b038516600090815260066020526040902054611f8e9190612cd1565b6001600160a01b0385166000908152600660205260409020555b80516001600160a01b038616600090815260056020526040902054611fcd9190612c57565b6001600160a01b03808716600090815260056020908152604080832094909455840151918716815291909120546120049190612cd1565b6001600160a01b0385166000908152600560205260409081902091909155810151151580612036575060008160e00151115b1561204d5761204d81604001518260e00151612710565b60008160600151118061206557506000816101000151115b1561207d5761207d8160600151826101000151612745565b60008160800151118061209557506000816101200151115b156120ad576120ad81608001518261012001516127d4565b60008160a0015111806120c557506000816101400151115b156120dd576120dd8160a00151826101400151612802565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161212691815260200190565b60405180910390a35050505050565b600e54600d546000918291825b600a54811015612287578260056000600a848154811061216457612164612c8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121cf57508160066000600a84815481106121a8576121a8612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121e557600e54600d54945094505050509091565b60056000600a83815481106121fc576121fc612c8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461222b9084612c57565b925060066000600a838154811061224457612244612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122739083612c57565b91508061227f81612cb8565b915050612142565b50600d54600e546122989190612c6a565b8210156122af57600e54600d549350935050509091565b90939092509050565b6122c0612898565b816122d15760c08101839052610923565b6017546064906122e19085612dd7565b6122eb9190612c6a565b60e08201526018546064906123009085612dd7565b61230a9190612c6a565b610100820152601a546064906123209085612dd7565b61232a9190612c6a565b6101208201526019546064906123409085612dd7565b61234a9190612c6a565b610140820181905261012082015161010083015160e084015161236d9087612c57565b6123779190612c57565b6123819190612c57565b61238b9190612c57565b60c082015292915050565b600080808080806123a7878a612dd7565b9550876123c25750849350600092508291508190508061243b565b868a60e001516123d29190612dd7565b9350868a61010001516123e59190612dd7565b9250868a61012001516123f89190612dd7565b9150868a610140015161240b9190612dd7565b905080828461241a878a612c57565b6124249190612c57565b61242e9190612c57565b6124389190612c57565b94505b9499939850945094509450565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247d5761247d612c8c565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125149190612dee565b8160018151811061252757612527612c8c565b6001600160a01b039283166020918202929092010152600b546125549130916301000000900416856114ad565b600b5460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612593908690600090869088904290600401612e0b565b600060405180830381600087803b1580156125ad57600080fd5b505af11580156125c1573d6000803e3d6000fd5b50505050505050565b6000610ada83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612830565b6000610ada83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612867565b600b5461266d903090630100000090046001600160a01b0316846114ad565b600b5460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af11580156126e4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127099190612e7c565b5050505050565b81600e60008282546127229190612c57565b9091555050601f805482919060009061273c908490612cd1565b90915550505050565b80601f600101600082825461275a9190612cd1565b9250508190555080601460008282546127739190612cd1565b90915550503060009081526009602052604090205460ff16156127b55730600090815260066020526040812080548392906127af908490612cd1565b90915550505b306000908152600560205260408120805484929061273c908490612cd1565b80601f60030160008282546127e99190612cd1565b9250508190555080601660008282546127739190612cd1565b80601f60020160008282546128179190612cd1565b9250508190555080601560008282546127739190612cd1565b600081836128515760405162461bcd60e51b815260040161095391906128f2565b50600061285e8486612c6a565b95945050505050565b6000818484111561288b5760405162461bcd60e51b815260040161095391906128f2565b50600061285e8486612c57565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561291f57858101830151858201604001528201612903565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114aa57600080fd5b803561296081612940565b919050565b6000806040838503121561297857600080fd5b823561298381612940565b946020939093013593505050565b6000602082840312156129a357600080fd5b8135610ada81612940565b600080600080608085870312156129c457600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156129f557600080fd5b8335612a0081612940565b92506020840135612a1081612940565b929592945050506040919091013590565b600060208284031215612a3357600080fd5b5035919050565b8035801515811461296057600080fd5b60008060408385031215612a5d57600080fd5b82359150612a6d60208401612a3a565b90509250929050565b60008060408385031215612a8957600080fd5b8235612a9481612940565b9150612a6d60208401612a3a565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612acb57600080fd5b823567ffffffffffffffff80821115612ae357600080fd5b818501915085601f830112612af757600080fd5b8135602082821115612b0b57612b0b612aa2565b8160051b604051601f19603f83011681018181108682111715612b3057612b30612aa2565b604052928352818301935084810182019289841115612b4e57600080fd5b948201945b83861015612b7357612b6486612955565b85529482019493820193612b53565b9650612b829050878201612a3a565b9450505050509250929050565b60008060408385031215612ba257600080fd5b8235612bad81612940565b91506020830135612bbd81612940565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f43616e6e6f7420626520746f74616c206665657320686967686572207468616e6040820152632031362560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561092357610923612c41565b600082612c8757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612cca57612cca612c41565b5060010190565b8082018082111561092357610923612c41565b600181815b80851115612d1f578160001904821115612d0557612d05612c41565b80851615612d1257918102915b93841c9390800290612ce9565b509250929050565b600082612d3657506001610923565b81612d4357506000610923565b8160018114612d595760028114612d6357612d7f565b6001915050610923565b60ff841115612d7457612d74612c41565b50506001821b610923565b5060208310610133831016604e8410600b8410161715612da2575081810a610923565b612dac8383612ce4565b8060001904821115612dc057612dc0612c41565b029392505050565b6000610ada60ff841683612d27565b808202811582820484141761092357610923612c41565b600060208284031215612e0057600080fd5b8151610ada81612940565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e5b5784516001600160a01b031683529383019391830191600101612e36565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e9157600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a0462bf50e7fe615c85dc6ac71f8ea54d0fd4170f59abb157393ce59c3942a6e64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806388c7c85c1161014f578063b4bad528116100c1578063dd62ed3e1161007a578063dd62ed3e1461081f578063e2f4560514610865578063ea2f0b371461087b578063f2fde38b1461089b578063f887ea40146108bb578063fdf7d2c0146108e257600080fd5b8063b4bad52814610772578063b95859d114610792578063c03bd2aa146107b5578063d257b34f146107ca578063d4698016146107ea578063d5b281551461080a57600080fd5b80639ba5e4d5116101135780639ba5e4d5146106af578063a457c2d7146106d2578063a8aa1b31146106f2578063a9059cbb14610712578063aacebbe314610732578063b1e370081461075257600080fd5b806388c7c85c146105e757806388f82020146106075780638da5cb5b146106405780638e2839ff1461065e57806395d89b411461067e57600080fd5b806339509351116101f35780635aa821a9116101ac5780635aa821a91461050157806370a0823114610517578063715018a614610537578063728f8eea1461054c57806375f0a8741461058f57806385141a77146105c757600080fd5b80633950935114610428578063437823ec146104485780634549b03914610468578063455a43961461048857806352390c02146104a85780635342acb4146104c857600080fd5b80631cdd3be3116102455780631cdd3be31461035a5780631d202bbf1461038a57806323b872dd146103ac5780632d838119146103cc578063313ce567146103ec5780633685d4191461040857600080fd5b806302259e9e1461028d57806306fdde03146102b6578063095ea7b3146102f657806309c58fcd1461032657806318160ddd1461034557600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a360025481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5060408051808201909152600e81526d084a88684ead8d888dece408aa8960931b60208201525b6040516102ad91906128f2565b34801561030257600080fd5b50610316610311366004612965565b610912565b60405190151581526020016102ad565b34801561033257600080fd5b50600b5461031690610100900460ff1681565b34801561035157600080fd5b50600d546102a3565b34801561036657600080fd5b50610316610375366004612991565b60036020526000908152604090205460ff1681565b34801561039657600080fd5b506103aa6103a53660046129ae565b610929565b005b3480156103b857600080fd5b506103166103c73660046129e0565b6109ac565b3480156103d857600080fd5b506102a36103e7366004612a21565b610a5d565b3480156103f857600080fd5b50604051601281526020016102ad565b34801561041457600080fd5b506103aa610423366004612991565b610ae1565b34801561043457600080fd5b50610316610443366004612965565b610c97565b34801561045457600080fd5b506103aa610463366004612991565b610cce565b34801561047457600080fd5b506102a3610483366004612a4a565b610d1c565b34801561049457600080fd5b506103aa6104a3366004612a76565b610da6565b3480156104b457600080fd5b506103aa6104c3366004612991565b610dfb565b3480156104d457600080fd5b506103166104e3366004612991565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561050d57600080fd5b506102a360015481565b34801561052357600080fd5b506102a3610532366004612991565b610f4e565b34801561054357600080fd5b506103aa610fad565b34801561055857600080fd5b50601754601854601954601a5461056f9392919084565b6040805194855260208501939093529183015260608201526080016102ad565b34801561059b57600080fd5b506011546105af906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b3480156105d357600080fd5b506010546105af906001600160a01b031681565b3480156105f357600080fd5b506103aa610602366004612991565b610fe3565b34801561061357600080fd5b50610316610622366004612991565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561064c57600080fd5b506000546001600160a01b03166105af565b34801561066a57600080fd5b506103aa610679366004612ab8565b611031565b34801561068a57600080fd5b50604080518082019091526008815267426974446f672d4560c01b60208201526102e9565b3480156106bb57600080fd5b50601f5460205460215460225461056f9392919084565b3480156106de57600080fd5b506103166106ed366004612965565b6110c7565b3480156106fe57600080fd5b50600c546105af906001600160a01b031681565b34801561071e57600080fd5b5061031661072d366004612965565b611162565b34801561073e57600080fd5b506103aa61074d366004612991565b61116f565b34801561075e57600080fd5b506013546105af906001600160a01b031681565b34801561077e57600080fd5b506103aa61078d3660046129ae565b61121c565b34801561079e57600080fd5b50601b54601c54601d54601e5461056f9392919084565b3480156107c157600080fd5b506103aa611290565b3480156107d657600080fd5b506103aa6107e5366004612a21565b6112cb565b3480156107f657600080fd5b506012546105af906001600160a01b031681565b34801561081657600080fd5b506103aa61138a565b34801561082b57600080fd5b506102a361083a366004612b8f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561087157600080fd5b506102a3600f5481565b34801561088757600080fd5b506103aa610896366004612991565b6113c7565b3480156108a757600080fd5b506103aa6108b6366004612991565b611412565b3480156108c757600080fd5b50600b546105af90630100000090046001600160a01b031681565b3480156108ee57600080fd5b506103166108fd366004612991565b60046020526000908152604090205460ff1681565b600061091f3384846114ad565b5060015b92915050565b6000546001600160a01b0316331461095c5760405162461bcd60e51b815260040161095390612bc8565b60405180910390fd5b60006109748261096e858189896115d1565b906115d1565b905060108111156109975760405162461bcd60e51b815260040161095390612bfd565b50601793909355601891909155601a55601955565b60006109b9848484611630565b6001600160a01b038416600090815260076020908152604080832033845290915290205482811015610a3e5760405162461bcd60e51b815260206004820152602860248201527f42455032303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610953565b610a528533610a4d8685612c57565b6114ad565b506001949350505050565b6000600e54821115610ac45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610953565b6000610ace611c39565b9050610ada8184612c6a565b9392505050565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03811660009081526009602052604090205460ff16610b735760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610953565b60005b600a54811015610c9357816001600160a01b0316600a8281548110610b9d57610b9d612c8c565b6000918252602090912001546001600160a01b031603610c8157600a8054610bc790600190612c57565b81548110610bd757610bd7612c8c565b600091825260209091200154600a80546001600160a01b039092169183908110610c0357610c03612c8c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610c5b57610c5b612ca2565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c8b81612cb8565b915050610b76565b5050565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161091f918590610a4d908690612cd1565b6000546001600160a01b03163314610cf85760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d54831115610d705760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610953565b81610d8c576000610d82846001611c5c565b5191506109239050565b6000610d99846001611c5c565b6020015191506109239050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e255760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03811660009081526009602052604090205460ff1615610e8e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610953565b6001600160a01b03811660009081526005602052604090205415610ee8576001600160a01b038116600090815260056020526040902054610ece90610a5d565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff1615610f8b57506001600160a01b031660009081526006602052604090205490565b6001600160a01b03821660009081526005602052604090205461092390610a5d565b6000546001600160a01b03163314610fd75760405162461bcd60e51b815260040161095390612bc8565b610fe16000611ca4565b565b6000546001600160a01b0316331461100d5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b0316331461105b5760405162461bcd60e51b815260040161095390612bc8565b60005b82518110156110c257816008600085848151811061107e5761107e612c8c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806110ba81612cb8565b91505061105e565b505050565b3360009081526007602090815260408083206001600160a01b0386168452909152812054828110156111495760405162461bcd60e51b815260206004820152602560248201527f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b6111583385610a4d8685612c57565b5060019392505050565b600061091f338484611630565b6000546001600160a01b031633146111995760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b0381166111fa5760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b6064820152608401610953565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112465760405162461bcd60e51b815260040161095390612bc8565b60006112588261096e858189896115d1565b9050601081111561127b5760405162461bcd60e51b815260040161095390612bfd565b50601b93909355601c91909155601e55601d55565b6000546001600160a01b031633146112ba5760405162461bcd60e51b815260040161095390612bc8565b600b805461ff001916610100179055565b6000546001600160a01b031633146112f55760405162461bcd60e51b815260040161095390612bc8565b6298968081111561136e5760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610953565b61137a6012600a612dc8565b6113849082612dd7565b600f5550565b6000546001600160a01b031633146113b45760405162461bcd60e51b815260040161095390612bc8565b600b805462ff0000191662010000179055565b6000546001600160a01b031633146113f15760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461143c5760405162461bcd60e51b815260040161095390612bc8565b6001600160a01b0381166114a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b6114aa81611ca4565b50565b6001600160a01b03831661150f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b0382166115705760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806115de8385612cd1565b905083811015610ada5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610953565b6001600160a01b0383166116945760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610953565b6001600160a01b0382166116f65760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610953565b6001600160a01b03831660009081526003602052604090205460ff1615801561173857506001600160a01b03821660009081526003602052604090205460ff16155b61177a5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610953565b600b54610100900460ff16806117ca57506001600160a01b03831660009081526008602052604090205460ff16806117ca57506001600160a01b03821660009081526008602052604090205460ff165b61180c5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b6044820152606401610953565b6000811161186e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610953565b61187783610f4e565b8111156118e05760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610953565b600b5462010000900460ff1661194e576001600160a01b03831660009081526004602052604090205460ff161561194e5760405162461bcd60e51b81526020600482015260126024820152715465616d2043616e6e6f742074726164652160701b6044820152606401610953565b6000600f5461195c30610f4e565b601754601854601a54601954600c549590941015955091939092906001600160a01b038981169116146119a257601b54601755601c54601855601e54601a55601d546019555b600c546001600160a01b0389811691161480156119d857506001600160a01b03881660009081526008602052604090205460ff16155b80156119fd57506001600160a01b03871660009081526008602052604090205460ff16155b15611a5457600154861115611a545760405162461bcd60e51b815260206004820152601b60248201527f6d6178696d756d2062757920616d6f756e7420726561636865642e00000000006044820152606401610953565b600c546001600160a01b038881169116148015611a8a57506001600160a01b03881660009081526008602052604090205460ff16155b8015611aaf57506001600160a01b03871660009081526008602052604090205460ff16155b15611b0657600254861115611b065760405162461bcd60e51b815260206004820152601c60248201527f6d6178696d756d2073656c6c20616d6f756e7420726561636865642e000000006044820152606401610953565b600b5460ff16158015611b165750845b8015611b305750600c546001600160a01b03898116911614155b8015611b5557506001600160a01b03881660009081526008602052604090205460ff16155b8015611b7a57506001600160a01b03871660009081526008602052604090205460ff16155b15611ba057611b8a601454611cf4565b611b95601654611d59565b611ba0601554611daa565b600b5460019060ff1680611bcc57506001600160a01b03891660009081526008602052604090205460ff165b80611bef57506001600160a01b03881660009081526008602052604090205460ff165b15611bf8575060005b611c0489898984611ed7565b600c546001600160a01b038a8116911614611c2e5760178590556018849055601a83905560198290555b505050505050505050565b6000806000611c46612135565b9092509050611c558183612c6a565b9250505090565b611c64612898565b611c6e83836122b8565b9050611c83818484611c7e611c39565b612396565b60a08701526080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b805460ff191660011790556000611d0c30610f4e565b905080821115611d1c5750611d4c565b601154611d339083906001600160a01b0316612448565b8160146000828254611d459190612c57565b9091555050505b50600b805460ff19169055565b600b805460ff191660011790556000611d7130610f4e565b905080821115611d815750611d4c565b601354611d989083906001600160a01b0316612448565b8160166000828254611d459190612c57565b611db330610f4e565b811115611e045760408051600080825260208201819052818301819052606082015290517f5826dab182292d2e5b8adf2856697983c65b882fa567a247222747a43e606d199181900360800190a150565b6000611e118260026125ca565b90506000611e1f838361260c565b9050811580611e2c575080155b15611e3657505050565b47611e418330612448565b8260156000828254611e539190612c57565b9091555060009050611e65478361260c565b9050611e71838261264e565b8260156000828254611e839190612c57565b90915550506040805185815260208101839052908101849052600160608201527f5826dab182292d2e5b8adf2856697983c65b882fa567a247222747a43e606d199060800160405180910390a15050505050565b6000611ee38383611c5c565b6001600160a01b03861660009081526009602052604090205490915060ff1615611f45576001600160a01b038516600090815260066020526040902054611f2b908490612c57565b6001600160a01b0386166000908152600660205260409020555b6001600160a01b03841660009081526009602052604090205460ff1615611fa85760c08101516001600160a01b038516600090815260066020526040902054611f8e9190612cd1565b6001600160a01b0385166000908152600660205260409020555b80516001600160a01b038616600090815260056020526040902054611fcd9190612c57565b6001600160a01b03808716600090815260056020908152604080832094909455840151918716815291909120546120049190612cd1565b6001600160a01b0385166000908152600560205260409081902091909155810151151580612036575060008160e00151115b1561204d5761204d81604001518260e00151612710565b60008160600151118061206557506000816101000151115b1561207d5761207d8160600151826101000151612745565b60008160800151118061209557506000816101200151115b156120ad576120ad81608001518261012001516127d4565b60008160a0015111806120c557506000816101400151115b156120dd576120dd8160a00151826101400151612802565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161212691815260200190565b60405180910390a35050505050565b600e54600d546000918291825b600a54811015612287578260056000600a848154811061216457612164612c8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121cf57508160066000600a84815481106121a8576121a8612c8c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121e557600e54600d54945094505050509091565b60056000600a83815481106121fc576121fc612c8c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461222b9084612c57565b925060066000600a838154811061224457612244612c8c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122739083612c57565b91508061227f81612cb8565b915050612142565b50600d54600e546122989190612c6a565b8210156122af57600e54600d549350935050509091565b90939092509050565b6122c0612898565b816122d15760c08101839052610923565b6017546064906122e19085612dd7565b6122eb9190612c6a565b60e08201526018546064906123009085612dd7565b61230a9190612c6a565b610100820152601a546064906123209085612dd7565b61232a9190612c6a565b6101208201526019546064906123409085612dd7565b61234a9190612c6a565b610140820181905261012082015161010083015160e084015161236d9087612c57565b6123779190612c57565b6123819190612c57565b61238b9190612c57565b60c082015292915050565b600080808080806123a7878a612dd7565b9550876123c25750849350600092508291508190508061243b565b868a60e001516123d29190612dd7565b9350868a61010001516123e59190612dd7565b9250868a61012001516123f89190612dd7565b9150868a610140015161240b9190612dd7565b905080828461241a878a612c57565b6124249190612c57565b61242e9190612c57565b6124389190612c57565b94505b9499939850945094509450565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247d5761247d612c8c565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125149190612dee565b8160018151811061252757612527612c8c565b6001600160a01b039283166020918202929092010152600b546125549130916301000000900416856114ad565b600b5460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612593908690600090869088904290600401612e0b565b600060405180830381600087803b1580156125ad57600080fd5b505af11580156125c1573d6000803e3d6000fd5b50505050505050565b6000610ada83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612830565b6000610ada83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612867565b600b5461266d903090630100000090046001600160a01b0316846114ad565b600b5460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af11580156126e4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127099190612e7c565b5050505050565b81600e60008282546127229190612c57565b9091555050601f805482919060009061273c908490612cd1565b90915550505050565b80601f600101600082825461275a9190612cd1565b9250508190555080601460008282546127739190612cd1565b90915550503060009081526009602052604090205460ff16156127b55730600090815260066020526040812080548392906127af908490612cd1565b90915550505b306000908152600560205260408120805484929061273c908490612cd1565b80601f60030160008282546127e99190612cd1565b9250508190555080601660008282546127739190612cd1565b80601f60020160008282546128179190612cd1565b9250508190555080601560008282546127739190612cd1565b600081836128515760405162461bcd60e51b815260040161095391906128f2565b50600061285e8486612c6a565b95945050505050565b6000818484111561288b5760405162461bcd60e51b815260040161095391906128f2565b50600061285e8486612c57565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561291f57858101830151858201604001528201612903565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114aa57600080fd5b803561296081612940565b919050565b6000806040838503121561297857600080fd5b823561298381612940565b946020939093013593505050565b6000602082840312156129a357600080fd5b8135610ada81612940565b600080600080608085870312156129c457600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156129f557600080fd5b8335612a0081612940565b92506020840135612a1081612940565b929592945050506040919091013590565b600060208284031215612a3357600080fd5b5035919050565b8035801515811461296057600080fd5b60008060408385031215612a5d57600080fd5b82359150612a6d60208401612a3a565b90509250929050565b60008060408385031215612a8957600080fd5b8235612a9481612940565b9150612a6d60208401612a3a565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612acb57600080fd5b823567ffffffffffffffff80821115612ae357600080fd5b818501915085601f830112612af757600080fd5b8135602082821115612b0b57612b0b612aa2565b8160051b604051601f19603f83011681018181108682111715612b3057612b30612aa2565b604052928352818301935084810182019289841115612b4e57600080fd5b948201945b83861015612b7357612b6486612955565b85529482019493820193612b53565b9650612b829050878201612a3a565b9450505050509250929050565b60008060408385031215612ba257600080fd5b8235612bad81612940565b91506020830135612bbd81612940565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f43616e6e6f7420626520746f74616c206665657320686967686572207468616e6040820152632031362560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561092357610923612c41565b600082612c8757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612cca57612cca612c41565b5060010190565b8082018082111561092357610923612c41565b600181815b80851115612d1f578160001904821115612d0557612d05612c41565b80851615612d1257918102915b93841c9390800290612ce9565b509250929050565b600082612d3657506001610923565b81612d4357506000610923565b8160018114612d595760028114612d6357612d7f565b6001915050610923565b60ff841115612d7457612d74612c41565b50506001821b610923565b5060208310610133831016604e8410600b8410161715612da2575081810a610923565b612dac8383612ce4565b8060001904821115612dc057612dc0612c41565b029392505050565b6000610ada60ff841683612d27565b808202811582820484141761092357610923612c41565b600060208284031215612e0057600080fd5b8151610ada81612940565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e5b5784516001600160a01b031683529383019391830191600101612e36565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e9157600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a0462bf50e7fe615c85dc6ac71f8ea54d0fd4170f59abb157393ce59c3942a6e64736f6c63430008130033

Deployed Bytecode Sourcemap

8140:20880:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8341:60;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8341:60:0;;;;;;;;11726:83;;;;;;;;;;-1:-1:-1;11796:5:0;;;;;;;;;;;;-1:-1:-1;;;11796:5:0;;;;11726:83;;;;;;;:::i;12486:161::-;;;;;;;;;;-1:-1:-1;12486:161:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;12486:161:0;1344:187:1;8868:36:0;;;;;;;;;;-1:-1:-1;8868:36:0;;;;;;;;;;;12026:95;;;;;;;;;;-1:-1:-1;12106:7:0;;12026:95;;8414:46;;;;;;;;;;-1:-1:-1;8414:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28114:416;;;;;;;;;;-1:-1:-1;28114:416:0;;;;;:::i;:::-;;:::i;:::-;;12655:448;;;;;;;;;;-1:-1:-1;12655:448:0;;;;;:::i;:::-;;:::i;14526:250::-;;;;;;;;;;-1:-1:-1;14526:250:0;;;;;:::i;:::-;;:::i;11912:83::-;;;;;;;;;;-1:-1:-1;11912:83:0;;9038:2;2966:36:1;;2954:2;2939:18;11912:83:0;2824:184:1;15630:473:0;;;;;;;;;;-1:-1:-1;15630:473:0;;;;;:::i;:::-;;:::i;13111:207::-;;;;;;;;;;-1:-1:-1;13111:207:0;;;;;:::i;:::-;;:::i;16111:111::-;;;;;;;;;;-1:-1:-1;16111:111:0;;;;;:::i;:::-;;:::i;14029:489::-;;;;;;;;;;-1:-1:-1;14029:489:0;;;;;:::i;:::-;;:::i;15190:123::-;;;;;;;;;;-1:-1:-1;15190:123:0;;;;;:::i;:::-;;:::i;14850:332::-;;;;;;;;;;-1:-1:-1;14850:332:0;;;;;:::i;:::-;;:::i;16348:124::-;;;;;;;;;;-1:-1:-1;16348:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;16437:27:0;16413:4;16437:27;;;:18;:27;;;;;;;;;16348:124;8273:61;;;;;;;;;;;;;;;;12129:198;;;;;;;;;;-1:-1:-1;12129:198:0;;;;;:::i;:::-;;:::i;1627:94::-;;;;;;;;;;;;;:::i;10277:44::-;;;;;;;;;;-1:-1:-1;10277:44:0;;;;;;;;;;;;;;;;;;;3982:25:1;;;4038:2;4023:18;;4016:34;;;;4066:18;;;4059:34;4124:2;4109:18;;4102:34;3969:3;3954:19;10277:44:0;3751:391:1;9517:75:0;;;;;;;;;;-1:-1:-1;9517:75:0;;;;-1:-1:-1;;;;;9517:75:0;;;;;;-1:-1:-1;;;;;4311:32:1;;;4293:51;;4281:2;4266:18;9517:75:0;4147:203:1;9440:70:0;;;;;;;;;;-1:-1:-1;9440:70:0;;;;-1:-1:-1;;;;;9440:70:0;;;15519:103;;;;;;;;;;-1:-1:-1;15519:103:0;;;;;:::i;:::-;;:::i;13899:120::-;;;;;;;;;;-1:-1:-1;13899:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;13991:20:0;13967:4;13991:20;;;:11;:20;;;;;;;;;13899:120;1404:87;;;;;;;;;;-1:-1:-1;1450:7:0;1477:6;-1:-1:-1;;;;;1477:6:0;1404:87;;27451:212;;;;;;;;;;-1:-1:-1;27451:212:0;;;;;:::i;:::-;;:::i;11817:87::-;;;;;;;;;;-1:-1:-1;11889:7:0;;;;;;;;;;;;-1:-1:-1;;;11889:7:0;;;;11817:87;;10528:36;;;;;;;;;;-1:-1:-1;10528:36:0;;;;;;;;;;;;;;;13326:392;;;;;;;;;;-1:-1:-1;13326:392:0;;;;;:::i;:::-;;:::i;8975:19::-;;;;;;;;;;-1:-1:-1;8975:19:0;;;;-1:-1:-1;;;;;8975:19:0;;;13726:165;;;;;;;;;;-1:-1:-1;13726:165:0;;;;;:::i;:::-;;:::i;27671:195::-;;;;;;;;;;-1:-1:-1;27671:195:0;;;;;:::i;:::-;;:::i;9681:69::-;;;;;;;;;;-1:-1:-1;9681:69:0;;;;-1:-1:-1;;;;;9681:69:0;;;28538:442;;;;;;;;;;-1:-1:-1;28538:442:0;;;;;:::i;:::-;;:::i;10328:50::-;;;;;;;;;;-1:-1:-1;10328:50:0;;;;;;;;;;;;;;;15321:92;;;;;;;;;;;;;:::i;27874:230::-;;;;;;;;;;-1:-1:-1;27874:230:0;;;;;:::i;:::-;;:::i;9599:75::-;;;;;;;;;;-1:-1:-1;9599:75:0;;;;-1:-1:-1;;;;;9599:75:0;;;15421:85;;;;;;;;;;;;;:::i;12335:143::-;;;;;;;;;;-1:-1:-1;12335:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12443:18:0;;;12416:7;12443:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12335:143;9215:58;;;;;;;;;;;;;;;;16230:110;;;;;;;;;;-1:-1:-1;16230:110:0;;;;;:::i;:::-;;:::i;1729:192::-;;;;;;;;;;-1:-1:-1;1729:192:0;;;;;:::i;:::-;;:::i;8947:21::-;;;;;;;;;;-1:-1:-1;8947:21:0;;;;;;;-1:-1:-1;;;;;8947:21:0;;;8467:43;;;;;;;;;;-1:-1:-1;8467:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12486:161;12561:4;12578:39;905:10;12601:7;12610:6;12578:8;:39::i;:::-;-1:-1:-1;12635:4:0;12486:161;;;;;:::o;28114:416::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;;;;;;;;;28234:21:::1;28258:46;28300:3:::0;28258:37:::1;28283:11:::0;28258:37;:4;28267:10;28258:8:::1;:20::i;:::-;:24:::0;::::1;:37::i;:46::-;28234:70;;28342:2;28325:13;:19;;28317:68;;;;-1:-1:-1::0;;;28317:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;28396:5:0::1;:16:::0;;;;28423:15;:28;;;;28462:16;:30;28503:8;:14;28114:416::o;12655:448::-;12787:4;12804:36;12814:6;12822:9;12833:6;12804:9;:36::i;:::-;-1:-1:-1;;;;;12880:19:0;;12853:24;12880:19;;;:11;:19;;;;;;;;905:10;12880:33;;;;;;;;12932:26;;;;12924:79;;;;-1:-1:-1;;;12924:79:0;;7267:2:1;12924:79:0;;;7249:21:1;7306:2;7286:18;;;7279:30;7345:34;7325:18;;;7318:62;-1:-1:-1;;;7396:18:1;;;7389:38;7444:19;;12924:79:0;7065:404:1;12924:79:0;13014:57;13023:6;905:10;13045:25;13064:6;13045:16;:25;:::i;:::-;13014:8;:57::i;:::-;-1:-1:-1;13091:4:0;;12655:448;-1:-1:-1;;;;12655:448:0:o;14526:250::-;14593:7;14632;;14621;:18;;14613:73;;;;-1:-1:-1;;;14613:73:0;;7941:2:1;14613:73:0;;;7923:21:1;7980:2;7960:18;;;7953:30;8019:34;7999:18;;;7992:62;-1:-1:-1;;;8070:18:1;;;8063:40;8120:19;;14613:73:0;7739:406:1;14613:73:0;14697:19;14719:10;:8;:10::i;:::-;14697:32;-1:-1:-1;14747:21:0;14697:32;14747:7;:21;:::i;:::-;14740:28;14526:250;-1:-1:-1;;;14526:250:0:o;15630:473::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15710:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15702:56;;;::::0;-1:-1:-1;;;15702:56:0;;8574:2:1;15702:56:0::1;::::0;::::1;8556:21:1::0;8613:2;8593:18;;;8586:30;8652:25;8632:18;;;8625:53;8695:18;;15702:56:0::1;8372:347:1::0;15702:56:0::1;15774:9;15769:327;15793:9;:16:::0;15789:20;::::1;15769:327;;;15851:7;-1:-1:-1::0;;;;;15835:23:0::1;:9;15845:1;15835:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;15835:12:0::1;:23:::0;15831:254:::1;;15894:9;15904:16:::0;;:20:::1;::::0;15923:1:::1;::::0;15904:20:::1;:::i;:::-;15894:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;15879:9:::1;:12:::0;;-1:-1:-1;;;;;15894:31:0;;::::1;::::0;15889:1;;15879:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;15879:46:0::1;-1:-1:-1::0;;;;;15879:46:0;;::::1;;::::0;;15944:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;15983:11:::1;:20:::0;;;;:28;;-1:-1:-1;;15983:28:0::1;::::0;;16030:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;16030:15:0;;;;;-1:-1:-1;;;;;;16030:15:0::1;::::0;;;;;15769:327:::1;15630:473:::0;:::o;15831:254::-:1;15811:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15769:327;;;;15630:473:::0;:::o;13111:207::-;905:10;13191:4;13240:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13240:34:0;;;;;;;;;;13191:4;;13208:80;;13231:7;;13240:47;;13277:10;;13240:47;:::i;16111:111::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16180:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;16180:34:0::1;16210:4;16180:34;::::0;;16111:111::o;14029:489::-;14147:7;14191;;14180;:18;;14172:62;;;;-1:-1:-1;;;14172:62:0;;9460:2:1;14172:62:0;;;9442:21:1;9499:2;9479:18;;;9472:30;9538:33;9518:18;;;9511:61;9589:18;;14172:62:0;9258:355:1;14172:62:0;14250:17;14245:266;;14284:28;14315:25;14326:7;14335:4;14315:10;:25::i;:::-;14362:9;;-1:-1:-1;14355:16:0;;-1:-1:-1;14355:16:0;14245:266;14404:28;14435:25;14446:7;14455:4;14435:10;:25::i;:::-;14482:17;;;;-1:-1:-1;14475:24:0;;-1:-1:-1;14475:24:0;15190:123;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15274:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;15274:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15190:123::o;14850:332::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14931:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;14930:21;14922:61;;;::::0;-1:-1:-1;;;14922:61:0;;9820:2:1;14922:61:0::1;::::0;::::1;9802:21:1::0;9859:2;9839:18;;;9832:30;9898:29;9878:18;;;9871:57;9945:18;;14922:61:0::1;9618:351:1::0;14922:61:0::1;-1:-1:-1::0;;;;;14998:16:0;::::1;15017:1;14998:16:::0;;;:7:::1;:16;::::0;;;;;:20;14994:109:::1;;-1:-1:-1::0;;;;;15074:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;15054:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;15035:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;14994:109:::1;-1:-1:-1::0;;;;;15113:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;15113:27:0::1;15136:4;15113:27:::0;;::::1;::::0;;;15151:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;15151:23:0::1;::::0;;::::1;::::0;;14850:332::o;12129:198::-;-1:-1:-1;;;;;12219:20:0;;12195:7;12219:20;;;:11;:20;;;;;;;;12215:49;;;-1:-1:-1;;;;;;12248:16:0;;;;;:7;:16;;;;;;;12129:198::o;12215:49::-;-1:-1:-1;;;;;12302:16:0;;;;;;:7;:16;;;;;;12282:37;;:19;:37::i;1627:94::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;1692:21:::1;1710:1;1692:9;:21::i;:::-;1627:94::o:0;15519:103::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15588:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;15588:26:0::1;15610:4;15588:26;::::0;;15519:103::o;27451:212::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;27549:9:::1;27544:112;27568:8;:15;27564:1;:19;27544:112;;;27639:5;27605:18;:31;27624:8;27633:1;27624:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27605:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27605:31:0;:39;;-1:-1:-1;;27605:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27585:3;::::1;::::0;::::1;:::i;:::-;;;;27544:112;;;;27451:212:::0;;:::o;13326:392::-;905:10;13429:4;13478:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13478:34:0;;;;;;;;;;13531:35;;;;13523:85;;;;-1:-1:-1;;;13523:85:0;;10176:2:1;13523:85:0;;;10158:21:1;10215:2;10195:18;;;10188:30;10254:34;10234:18;;;10227:62;-1:-1:-1;;;10305:18:1;;;10298:35;10350:19;;13523:85:0;9974:401:1;13523:85:0;13619:67;905:10;13642:7;13651:34;13670:15;13651:16;:34;:::i;13619:67::-;-1:-1:-1;13706:4:0;;13326:392;-1:-1:-1;;;13326:392:0:o;13726:165::-;13804:4;13821:40;13831:10;13843:9;13854:6;13821:9;:40::i;27671:195::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27759:23:0;::::1;27751:69;;;::::0;-1:-1:-1;;;27751:69:0;;10582:2:1;27751:69:0::1;::::0;::::1;10564:21:1::0;10621:2;10601:18;;;10594:30;10660:34;10640:18;;;10633:62;-1:-1:-1;;;10711:18:1;;;10704:32;10753:19;;27751:69:0::1;10380:398:1::0;27751:69:0::1;27831:15;:27:::0;;-1:-1:-1;;;;;;27831:27:0::1;-1:-1:-1::0;;;;;27831:27:0;;;::::1;::::0;;;::::1;::::0;;27671:195::o;28538:442::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;28659:22:::1;28684:46;28726:3:::0;28684:37:::1;28709:11:::0;28684:37;:4;28693:10;28684:8:::1;:20::i;:46::-;28659:71;;28769:2;28751:14;:20;;28743:69;;;;-1:-1:-1::0;;;28743:69:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;28823:9:0::1;:20:::0;;;;28854:19;:32;;;;28897:20;:34;28942:12;:18;28538:442::o;15321:92::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;15382:16:::1;:23:::0;;-1:-1:-1;;15382:23:0::1;;;::::0;;15321:92::o;27874:230::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;27972:8:::1;27962:6;:18;;27954:88;;;::::0;-1:-1:-1;;;27954:88:0;;10985:2:1;27954:88:0::1;::::0;::::1;10967:21:1::0;11024:2;11004:18;;;10997:30;11063:34;11043:18;;;11036:62;11134:27;11114:18;;;11107:55;11179:19;;27954:88:0::1;10783:421:1::0;27954:88:0::1;28083:13;9038:2;28083;:13;:::i;:::-;28074:22;::::0;:6;:22:::1;:::i;:::-;28053:18;:43:::0;-1:-1:-1;27874:230:0:o;15421:85::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;15479:12:::1;:19:::0;;-1:-1:-1;;15479:19:0::1;::::0;::::1;::::0;;15421:85::o;16230:110::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16297:27:0::1;16327:5;16297:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;16297:35:0::1;::::0;;16230:110::o;1729:192::-;1450:7;1477:6;-1:-1:-1;;;;;1477:6:0;905:10;1539:23;1531:68;;;;-1:-1:-1;;;1531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1818:22:0;::::1;1810:73;;;::::0;-1:-1:-1;;;1810:73:0;;12967:2:1;1810:73:0::1;::::0;::::1;12949:21:1::0;13006:2;12986:18;;;12979:30;13045:34;13025:18;;;13018:62;-1:-1:-1;;;13096:18:1;;;13089:36;13142:19;;1810:73:0::1;12765:402:1::0;1810:73:0::1;1894:19;1904:8;1894:9;:19::i;:::-;1729:192:::0;:::o;20389:369::-;-1:-1:-1;;;;;20516:19:0;;20508:68;;;;-1:-1:-1;;;20508:68:0;;13374:2:1;20508:68:0;;;13356:21:1;13413:2;13393:18;;;13386:30;13452:34;13432:18;;;13425:62;-1:-1:-1;;;13503:18:1;;;13496:34;13547:19;;20508:68:0;13172:400:1;20508:68:0;-1:-1:-1;;;;;20595:21:0;;20587:68;;;;-1:-1:-1;;;20587:68:0;;13779:2:1;20587:68:0;;;13761:21:1;13818:2;13798:18;;;13791:30;13857:34;13837:18;;;13830:62;-1:-1:-1;;;13908:18:1;;;13901:32;13950:19;;20587:68:0;13577:398:1;20587:68:0;-1:-1:-1;;;;;20666:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20718:32;;160:25:1;;;20718:32:0;;133:18:1;20718:32:0;;;;;;;20389:369;;;:::o;3578:181::-;3636:7;;3668:5;3672:1;3668;:5;:::i;:::-;3656:17;;3697:1;3692;:6;;3684:46;;;;-1:-1:-1;;;3684:46:0;;14182:2:1;3684:46:0;;;14164:21:1;14221:2;14201:18;;;14194:30;14260:29;14240:18;;;14233:57;14307:18;;3684:46:0;13980:351:1;20766:2550:0;-1:-1:-1;;;;;20888:18:0;;20880:68;;;;-1:-1:-1;;;20880:68:0;;14538:2:1;20880:68:0;;;14520:21:1;14577:2;14557:18;;;14550:30;14616:34;14596:18;;;14589:62;-1:-1:-1;;;14667:18:1;;;14660:35;14712:19;;20880:68:0;14336:401:1;20880:68:0;-1:-1:-1;;;;;20967:16:0;;20959:64;;;;-1:-1:-1;;;20959:64:0;;14944:2:1;20959:64:0;;;14926:21:1;14983:2;14963:18;;;14956:30;15022:34;15002:18;;;14995:62;-1:-1:-1;;;15073:18:1;;;15066:33;15116:19;;20959:64:0;14742:399:1;20959:64:0;-1:-1:-1;;;;;21043:20:0;;;;;;:14;:20;;;;;;;;21042:21;:44;;;;-1:-1:-1;;;;;;21068:18:0;;;;;;:14;:18;;;;;;;;21067:19;21042:44;21034:76;;;;-1:-1:-1;;;21034:76:0;;15348:2:1;21034:76:0;;;15330:21:1;15387:2;15367:18;;;15360:30;-1:-1:-1;;;15406:18:1;;;15399:49;15465:18;;21034:76:0;15146:343:1;21034:76:0;21129:16;;;;;;;;:72;;-1:-1:-1;;;;;;21150:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;21178:22:0;;;;;;:18;:22;;;;;;;;21150:50;21121:104;;;;-1:-1:-1;;;21121:104:0;;15696:2:1;21121:104:0;;;15678:21:1;15735:2;15715:18;;;15708:30;-1:-1:-1;;;15754:18:1;;;15747:49;15813:18;;21121:104:0;15494:343:1;21121:104:0;21253:1;21244:6;:10;21236:64;;;;-1:-1:-1;;;21236:64:0;;16044:2:1;21236:64:0;;;16026:21:1;16083:2;16063:18;;;16056:30;16122:34;16102:18;;;16095:62;-1:-1:-1;;;16173:18:1;;;16166:39;16222:19;;21236:64:0;15842:405:1;21236:64:0;21343:15;21353:4;21343:9;:15::i;:::-;21333:6;:25;;21311:124;;;;-1:-1:-1;;;21311:124:0;;16454:2:1;21311:124:0;;;16436:21:1;16493:2;16473:18;;;16466:30;16532:34;16512:18;;;16505:62;-1:-1:-1;;;16583:18:1;;;16576:47;16640:19;;21311:124:0;16252:413:1;21311:124:0;21452:12;;;;;;;21448:93;;-1:-1:-1;;;;;21489:17:0;;;;;;:11;:17;;;;;;;;21488:18;21480:49;;;;-1:-1:-1;;;21480:49:0;;16872:2:1;21480:49:0;;;16854:21:1;16911:2;16891:18;;;16884:30;-1:-1:-1;;;16930:18:1;;;16923:48;16988:18;;21480:49:0;16670:342:1;21480:49:0;21553:12;21596:18;;21568:24;21586:4;21568:9;:24::i;:::-;21651:5;:9;21701:15;;21758:16;;21808:8;;21840:4;;21568:46;;;;;;-1:-1:-1;21651:9:0;;21701:15;;21808:8;-1:-1:-1;;;;;21832:12:0;;;21840:4;;21832:12;21829:222;;21882:9;:13;21870:5;:25;21928:19;;21910:15;:37;21981:20;;21962:16;:39;22027:12;;22016:8;:23;21829:222;22089:4;;-1:-1:-1;;;;;22081:12:0;;;22089:4;;22081:12;:55;;;;-1:-1:-1;;;;;;22112:24:0;;;;;;:18;:24;;;;;;;;22111:25;22081:55;:96;;;;-1:-1:-1;;;;;;22155:22:0;;;;;;:18;:22;;;;;;;;22154:23;22081:96;22063:240;;;22236:23;;22226:6;:33;;22218:73;;;;-1:-1:-1;;;22218:73:0;;17219:2:1;22218:73:0;;;17201:21:1;17258:2;17238:18;;;17231:30;17297:29;17277:18;;;17270:57;17344:18;;22218:73:0;17017:351:1;22218:73:0;22340:4;;-1:-1:-1;;;;;22334:10:0;;;22340:4;;22334:10;:53;;;;-1:-1:-1;;;;;;22363:24:0;;;;;;:18;:24;;;;;;;;22362:25;22334:53;:94;;;;-1:-1:-1;;;;;;22406:22:0;;;;;;:18;:22;;;;;;;;22405:23;22334:94;22315:228;;;22474:24;;22464:6;:34;;22456:75;;;;-1:-1:-1;;;22456:75:0;;17575:2:1;22456:75:0;;;17557:21:1;17614:2;17594:18;;;17587:30;17653;17633:18;;;17626:58;17701:18;;22456:75:0;17373:352:1;22456:75:0;22574:8;;;;22573:9;:33;;;;;22599:7;22573:33;:62;;;;-1:-1:-1;22631:4:0;;-1:-1:-1;;;;;22623:12:0;;;22631:4;;22623:12;;22573:62;:104;;;;-1:-1:-1;;;;;;22653:24:0;;;;;;:18;:24;;;;;;;;22652:25;22573:104;:144;;;;-1:-1:-1;;;;;;22695:22:0;;;;;;:18;:22;;;;;;;;22694:23;22573:144;22555:353;;;22746:45;22770:20;;22746:23;:45::i;:::-;22806:46;22830:21;;22806:23;:46::i;:::-;22867:29;22882:13;;22867:14;:29::i;:::-;22952:8;;22933:4;;22952:8;;;:36;;-1:-1:-1;;;;;;22964:24:0;;;;;;:18;:24;;;;;;;;22952:36;:62;;;-1:-1:-1;;;;;;22992:22:0;;;;;;:18;:22;;;;;;;;22952:62;22948:83;;;-1:-1:-1;23026:5:0;22948:83;23044:41;23059:4;23065:2;23069:6;23077:7;23044:14;:41::i;:::-;23109:4;;-1:-1:-1;;;;;23101:12:0;;;23109:4;;23101:12;23098:211;;23142:5;:21;;;23178:15;:33;;;23226:16;:35;;;23276:8;:19;;;23098:211;20869:2447;;;;;;20766:2550;;;:::o;19648:161::-;19690:7;19711:15;19728;19747:19;:17;:19::i;:::-;19710:56;;-1:-1:-1;19710:56:0;-1:-1:-1;19784:17:0;19710:56;;19784:17;:::i;:::-;19777:24;;;;19648:161;:::o;17562:502::-;17660:36;;:::i;:::-;17721:29;17733:7;17742;17721:11;:29::i;:::-;17709:41;;17975:52;17987:9;17998:7;18007;18016:10;:8;:10::i;:::-;17975:11;:52::i;:::-;17948:13;;;17761:266;17912:21;;;17761:266;17877:20;;;17761:266;17848:14;;;17761:266;17808:25;;;17761:266;;;17562:502;;;;:::o;1929:173::-;1985:16;2004:6;;-1:-1:-1;;;;;2021:17:0;;;-1:-1:-1;;;;;;2021:17:0;;;;;;2054:40;;2004:6;;;;;;;2054:40;;1985:16;2054:40;1974:128;1929:173;:::o;24428:349::-;10952:8;:15;;-1:-1:-1;;10952:15:0;10963:4;10952:15;;;:8;24549:24:::1;24567:4;24549:9;:24::i;:::-;24523:50;;24612:15;24597:12;:30;24594:67;;;24643:7;;;24594:67;24704:15;::::0;24673:47:::1;::::0;24690:12;;-1:-1:-1;;;;;24704:15:0::1;24673:16;:47::i;:::-;24755:12;24731:20;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;10978:1:0::1;-1:-1:-1::0;10990:8:0;:16;;-1:-1:-1;;10990:16:0;;;24428:349::o;24785:329::-;10952:8;:15;;-1:-1:-1;;10952:15:0;10963:4;10952:15;;;:8;24899:24:::1;24917:4;24899:9;:24::i;:::-;24873:50;;24954:15;24939:12;:30;24936:67;;;24985:7;;;24936:67;25046:9;::::0;25015:41:::1;::::0;25032:12;;-1:-1:-1;;;;;25046:9:0::1;25015:16;:41::i;:::-;25092:12;25067:21;;:37;;;;;;;:::i;25122:1216::-:0;25195:24;25213:4;25195:9;:24::i;:::-;25186:6;:33;25183:120;;;25240:30;;;25255:1;17979:25:1;;;18035:2;18020:18;;18013:34;;;18063:18;;;18056:34;;;18121:2;18106:18;;18099:50;25240:30:0;;;;;;;17966:3:1;25240:30:0;;;25122:1216;:::o;25183:120::-;25384:12;25399:13;:6;25410:1;25399:10;:13::i;:::-;25384:28;-1:-1:-1;25423:17:0;25443:16;:6;25384:28;25443:10;:16::i;:::-;25423:36;-1:-1:-1;25483:9:0;;;:27;;-1:-1:-1;25496:14:0;;25483:27;25480:64;;;25526:7;;25122:1216;:::o;25480:64::-;25846:21;25912:46;25929:4;25951;25912:16;:46::i;:::-;25996:4;25979:13;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;26061:18:0;;-1:-1:-1;26082:41:0;:21;26108:14;26082:25;:41::i;:::-;26061:62;;26173:35;26186:9;26197:10;26173:12;:35::i;:::-;26246:9;26229:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;26281:49:0;;;17979:25:1;;;18035:2;18020:18;;18013:34;;;18063:18;;;18056:34;;;26325:4:0;18121:2:1;18106:18;;18099:50;26281:49:0;;17966:3:1;17951:19;26281:49:0;;;;;;;25170:1168;;;;25122:1216;:::o;23397:1023::-;23551:28;23582;23593:7;23602;23582:10;:28::i;:::-;-1:-1:-1;;;;;23627:19:0;;;;;;:11;:19;;;;;;23551:59;;-1:-1:-1;23627:19:0;;23623:124;;;-1:-1:-1;;;;;23710:15:0;;;;;;:7;:15;;;;;;:25;;23728:7;;23710:25;:::i;:::-;-1:-1:-1;;;;;23692:15:0;;;;;;:7;:15;;;;;:43;23623:124;-1:-1:-1;;;;;23761:22:0;;;;;;:11;:22;;;;;;;;23757:141;;;23869:17;;;;-1:-1:-1;;;;;23848:18:0;;;;;;:7;:18;;;;;;:38;;23869:17;23848:38;:::i;:::-;-1:-1:-1;;;;;23827:18:0;;;;;;:7;:18;;;;;:59;23757:141;23946:9;;-1:-1:-1;;;;;23928:15:0;;23946:9;23928:15;;;:7;:15;;;;;;:27;;23946:9;23928:27;:::i;:::-;-1:-1:-1;;;;;23910:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;24008:17;;;23987:18;;;;;;;;;;:38;;24008:17;23987:38;:::i;:::-;-1:-1:-1;;;;;23966:18:0;;;;;;:7;:18;;;;;;;:59;;;;24042:6;;;:10;;;:24;;;24065:1;24056;:6;;;:10;24042:24;24038:57;;;24068:27;24080:1;:6;;;24088:1;:6;;;24068:11;:27::i;:::-;24125:1;24110;:12;;;:16;:36;;;;24145:1;24130;:12;;;:16;24110:36;24106:84;;;24148:42;24163:1;:12;;;24177:1;:12;;;24148:14;:42::i;:::-;24221:1;24205;:13;;;:17;:38;;;;24242:1;24226;:13;;;:17;24205:38;24201:89;;;24245:45;24261:1;:13;;;24276:1;:13;;;24245:15;:45::i;:::-;24313:1;24305;:5;;;:9;:22;;;;24326:1;24318;:5;;;:9;24305:22;24301:49;;;24329:21;24337:1;:5;;;24344:1;:5;;;24329:7;:21::i;:::-;24383:9;-1:-1:-1;;;;;24366:46:0;24375:6;-1:-1:-1;;;;;24366:46:0;;24394:1;:17;;;24366:46;;;;160:25:1;;148:2;133:18;;14:177;24366:46:0;;;;;;;;23538:882;23397:1023;;;;:::o;19817:564::-;19915:7;;19951;;19868;;;;;19969:300;19993:9;:16;19989:20;;19969:300;;;20059:7;20035;:21;20043:9;20053:1;20043:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20043:12:0;20035:21;;;;;;;;;;;;;:31;;:66;;;20094:7;20070;:21;20078:9;20088:1;20078:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20078:12:0;20070:21;;;;;;;;;;;;;:31;20035:66;20031:114;;;20128:7;;20137;;20120:25;;;;;;;19817:564;;:::o;20031:114::-;20180:7;:21;20188:9;20198:1;20188:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20188:12:0;20180:21;;;;;;;;;;;;;20170:31;;:7;:31;:::i;:::-;20160:41;;20236:7;:21;20244:9;20254:1;20244:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20244:12:0;20236:21;;;;;;;;;;;;;20226:31;;:7;:31;:::i;:::-;20216:41;-1:-1:-1;20011:3:0;;;;:::i;:::-;;;;19969:300;;;;20303:7;;20293;;:17;;;;:::i;:::-;20283:7;:27;20279:58;;;20320:7;;20329;;20312:25;;;;;;19817:564;;:::o;20279:58::-;20356:7;;20365;;-1:-1:-1;19817:564:0;-1:-1:-1;19817:564:0:o;18072:622::-;18171:28;;:::i;:::-;18217:7;18212:91;;18241:17;;;:27;;;18283:8;;18212:91;18335:5;:9;18348:3;;18325:19;;:7;:19;:::i;:::-;18324:27;;;;:::i;:::-;18315:6;;;:36;18388:15;;18407:3;;18378:25;;:7;:25;:::i;:::-;18377:33;;;;:::i;:::-;18362:12;;;:48;18448:16;;18468:3;;18438:26;;:7;:26;:::i;:::-;18437:34;;;;:::i;:::-;18421:13;;;:50;18501:8;;18513:3;;18491:18;;:7;:18;:::i;:::-;18490:26;;;;:::i;:::-;18482:5;;;:34;;;18633:13;;;;18605:12;;;;18583:6;;;;18560:29;;:7;:29;:::i;:::-;:57;;;;:::i;:::-;:86;;;;:::i;:::-;:107;;;;:::i;:::-;18527:17;;;:140;18072:622;;;;:::o;18702:938::-;18911:15;;;;;;19122:21;19132:11;19122:7;:21;:::i;:::-;19112:31;;19161:7;19156:78;;-1:-1:-1;19193:7:0;;-1:-1:-1;19211:1:0;;-1:-1:-1;19211:1:0;;-1:-1:-1;19211:1:0;;-1:-1:-1;19211:1:0;19185:37;;19156:78;19262:11;19253:1;:6;;;:20;;;;:::i;:::-;19246:27;;19312:11;19297:1;:12;;;:26;;;;:::i;:::-;19284:39;;19364:11;19348:1;:13;;;:27;;;;:::i;:::-;19334:41;;19400:11;19392:1;:5;;;:19;;;;:::i;:::-;19386:25;-1:-1:-1;19386:25:0;19522:11;19496:10;19453:27;19476:4;19453:7;:27;:::i;:::-;:53;;;;:::i;:::-;:80;;;;:::i;:::-;:99;;;;:::i;:::-;19422:130;;18702:938;;;;;;;;;;;;:::o;26871:572::-;27029:16;;;27043:1;27029:16;;;;;;;;27005:21;;27029:16;;;;;;;;;;-1:-1:-1;27029:16:0;27005:40;;27074:4;27056;27061:1;27056:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27056:23:0;;;-1:-1:-1;;;;;27056:23:0;;;;;27100:6;;;;;;;;;-1:-1:-1;;;;;27100:6:0;-1:-1:-1;;;;;27100:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27090:4;27095:1;27090:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27090:23:0;;;:7;;;;;;;;;:23;27158:6;;27126:53;;27143:4;;27158:6;;;;27167:11;27126:8;:53::i;:::-;27218:6;;:217;;-1:-1:-1;;;27218:217:0;;:6;;;;-1:-1:-1;;;;;27218:6:0;;:57;;:217;;27290:11;;27316:1;;27360:4;;27387:6;;27409:15;;27218:217;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26942:501;26871:572;;:::o;5913:132::-;5971:7;5998:39;6002:1;6005;5998:39;;;;;;;;;;;;;;;;;:3;:39::i;4042:136::-;4100:7;4127:43;4131:1;4134;4127:43;;;;;;;;;;;;;;;;;:3;:43::i;26356:503::-;26536:6;;26504:53;;26521:4;;26536:6;;;-1:-1:-1;;;;;26536:6:0;26545:11;26504:8;:53::i;:::-;26600:6;;26795:15;;26600:251;;-1:-1:-1;;;26600:251:0;;26663:4;26600:251;;;20156:34:1;20206:18;;;20199:34;;;26709:1:0;20249:18:1;;;20242:34;;;20292:18;;;20285:34;-1:-1:-1;;;;;26795:15:0;;;20335:19:1;;;20328:44;26825:15:0;20388:19:1;;;20381:35;26600:6:0;;;;;;:22;;26630:9;;20090:19:1;;26600:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26356:503;;:::o;16480:125::-;16559:4;16548:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;16574:11:0;:23;;16593:4;;16574:11;:15;;:23;;16593:4;;16574:23;:::i;:::-;;;;-1:-1:-1;;;;16480:125:0:o;16615:325::-;16723:10;16698:11;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;16768:10;16744:20;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;16815:4:0;16795:26;;;;:11;:26;;;;;;;;16791:95;;;16854:4;16838:22;;;;:7;:22;;;;;:36;;16864:10;;16838:22;:36;;16864:10;;16838:36;:::i;:::-;;;;-1:-1:-1;;16791:95:0;16912:4;16896:22;;;;:7;:22;;;;;:36;;16922:10;;16896:22;:36;;16922:10;;16896:36;:::i;16948:335::-;17060:11;17034;:22;;;:37;;;;;;;:::i;:::-;;;;;;;;17108:11;17082:21;;:37;;;;;;;:::i;17291:263::-;17371:3;17353:11;:14;;;:21;;;;;;;:::i;:::-;;;;;;;;17403:3;17385:13;;:21;;;;;;;:::i;6541:312::-;6661:7;6696:12;6689:5;6681:28;;;;-1:-1:-1;;;6681:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6720:9:0;6732:5;6736:1;6732;:5;:::i;:::-;6720:17;6541:312;-1:-1:-1;;;;;6541:312:0:o;4481:226::-;4601:7;4637:12;4629:6;;;;4621:29;;;;-1:-1:-1;;;4621:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4661:9:0;4673:5;4677:1;4673;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;:::-;885:134;;;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:247::-;1595:6;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1703:9;1690:23;1722:31;1747:5;1722:31;:::i;1788:385::-;1874:6;1882;1890;1898;1951:3;1939:9;1930:7;1926:23;1922:33;1919:53;;;1968:1;1965;1958:12;1919:53;-1:-1:-1;;1991:23:1;;;2061:2;2046:18;;2033:32;;-1:-1:-1;2112:2:1;2097:18;;2084:32;;2163:2;2148:18;2135:32;;-1:-1:-1;1788:385:1;-1:-1:-1;1788:385:1:o;2178:456::-;2255:6;2263;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:31;2423:5;2398:31;:::i;:::-;2448:5;-1:-1:-1;2505:2:1;2490:18;;2477:32;2518:33;2477:32;2518:33;:::i;:::-;2178:456;;2570:7;;-1:-1:-1;;;2624:2:1;2609:18;;;;2596:32;;2178:456::o;2639:180::-;2698:6;2751:2;2739:9;2730:7;2726:23;2722:32;2719:52;;;2767:1;2764;2757:12;2719:52;-1:-1:-1;2790:23:1;;2639:180;-1:-1:-1;2639:180:1:o;3013:160::-;3078:20;;3134:13;;3127:21;3117:32;;3107:60;;3163:1;3160;3153:12;3178:248;3243:6;3251;3304:2;3292:9;3283:7;3279:23;3275:32;3272:52;;;3320:1;3317;3310:12;3272:52;3356:9;3343:23;3333:33;;3385:35;3416:2;3405:9;3401:18;3385:35;:::i;:::-;3375:45;;3178:248;;;;;:::o;3431:315::-;3496:6;3504;3557:2;3545:9;3536:7;3532:23;3528:32;3525:52;;;3573:1;3570;3563:12;3525:52;3612:9;3599:23;3631:31;3656:5;3631:31;:::i;:::-;3681:5;-1:-1:-1;3705:35:1;3736:2;3721:18;;3705:35;:::i;4355:127::-;4416:10;4411:3;4407:20;4404:1;4397:31;4447:4;4444:1;4437:15;4471:4;4468:1;4461:15;4487:1191;4577:6;4585;4638:2;4626:9;4617:7;4613:23;4609:32;4606:52;;;4654:1;4651;4644:12;4606:52;4694:9;4681:23;4723:18;4764:2;4756:6;4753:14;4750:34;;;4780:1;4777;4770:12;4750:34;4818:6;4807:9;4803:22;4793:32;;4863:7;4856:4;4852:2;4848:13;4844:27;4834:55;;4885:1;4882;4875:12;4834:55;4921:2;4908:16;4943:4;4966:2;4962;4959:10;4956:36;;;4972:18;;:::i;:::-;5018:2;5015:1;5011:10;5050:2;5044:9;5113:2;5109:7;5104:2;5100;5096:11;5092:25;5084:6;5080:38;5168:6;5156:10;5153:22;5148:2;5136:10;5133:18;5130:46;5127:72;;;5179:18;;:::i;:::-;5215:2;5208:22;5265:18;;;5299:15;;;;-1:-1:-1;5341:11:1;;;5337:20;;;5369:19;;;5366:39;;;5401:1;5398;5391:12;5366:39;5425:11;;;;5445:148;5461:6;5456:3;5453:15;5445:148;;;5527:23;5546:3;5527:23;:::i;:::-;5515:36;;5478:12;;;;5571;;;;5445:148;;;5612:6;-1:-1:-1;5637:35:1;;-1:-1:-1;5653:18:1;;;5637:35;:::i;:::-;5627:45;;;;;;4487:1191;;;;;:::o;5683:388::-;5751:6;5759;5812:2;5800:9;5791:7;5787:23;5783:32;5780:52;;;5828:1;5825;5818:12;5780:52;5867:9;5854:23;5886:31;5911:5;5886:31;:::i;:::-;5936:5;-1:-1:-1;5993:2:1;5978:18;;5965:32;6006:33;5965:32;6006:33;:::i;:::-;6058:7;6048:17;;;5683:388;;;;;:::o;6299:356::-;6501:2;6483:21;;;6520:18;;;6513:30;6579:34;6574:2;6559:18;;6552:62;6646:2;6631:18;;6299:356::o;6660:400::-;6862:2;6844:21;;;6901:2;6881:18;;;6874:30;6940:34;6935:2;6920:18;;6913:62;-1:-1:-1;;;7006:2:1;6991:18;;6984:34;7050:3;7035:19;;6660:400::o;7474:127::-;7535:10;7530:3;7526:20;7523:1;7516:31;7566:4;7563:1;7556:15;7590:4;7587:1;7580:15;7606:128;7673:9;;;7694:11;;;7691:37;;;7708:18;;:::i;8150:217::-;8190:1;8216;8206:132;;8260:10;8255:3;8251:20;8248:1;8241:31;8295:4;8292:1;8285:15;8323:4;8320:1;8313:15;8206:132;-1:-1:-1;8352:9:1;;8150:217::o;8724:127::-;8785:10;8780:3;8776:20;8773:1;8766:31;8816:4;8813:1;8806:15;8840:4;8837:1;8830:15;8856:127;8917:10;8912:3;8908:20;8905:1;8898:31;8948:4;8945:1;8938:15;8972:4;8969:1;8962:15;8988:135;9027:3;9048:17;;;9045:43;;9068:18;;:::i;:::-;-1:-1:-1;9115:1:1;9104:13;;8988:135::o;9128:125::-;9193:9;;;9214:10;;;9211:36;;;9227:18;;:::i;11209:422::-;11298:1;11341:5;11298:1;11355:270;11376:7;11366:8;11363:21;11355:270;;;11435:4;11431:1;11427:6;11423:17;11417:4;11414:27;11411:53;;;11444:18;;:::i;:::-;11494:7;11484:8;11480:22;11477:55;;;11514:16;;;;11477:55;11593:22;;;;11553:15;;;;11355:270;;;11359:3;11209:422;;;;;:::o;11636:806::-;11685:5;11715:8;11705:80;;-1:-1:-1;11756:1:1;11770:5;;11705:80;11804:4;11794:76;;-1:-1:-1;11841:1:1;11855:5;;11794:76;11886:4;11904:1;11899:59;;;;11972:1;11967:130;;;;11879:218;;11899:59;11929:1;11920:10;;11943:5;;;11967:130;12004:3;11994:8;11991:17;11988:43;;;12011:18;;:::i;:::-;-1:-1:-1;;12067:1:1;12053:16;;12082:5;;11879:218;;12181:2;12171:8;12168:16;12162:3;12156:4;12153:13;12149:36;12143:2;12133:8;12130:16;12125:2;12119:4;12116:12;12112:35;12109:77;12106:159;;;-1:-1:-1;12218:19:1;;;12250:5;;12106:159;12297:34;12322:8;12316:4;12297:34;:::i;:::-;12367:6;12363:1;12359:6;12355:19;12346:7;12343:32;12340:58;;;12378:18;;:::i;:::-;12416:20;;11636:806;-1:-1:-1;;;11636:806:1:o;12447:140::-;12505:5;12534:47;12575:4;12565:8;12561:19;12555:4;12534:47;:::i;12592:168::-;12665:9;;;12696;;12713:15;;;12707:22;;12693:37;12683:71;;12734:18;;:::i;18566:251::-;18636:6;18689:2;18677:9;18668:7;18664:23;18660:32;18657:52;;;18705:1;18702;18695:12;18657:52;18737:9;18731:16;18756:31;18781:5;18756:31;:::i;18822:988::-;19092:4;19140:3;19129:9;19125:19;19171:6;19160:9;19153:25;19197:2;19235:6;19230:2;19219:9;19215:18;19208:34;19278:3;19273:2;19262:9;19258:18;19251:31;19302:6;19337;19331:13;19368:6;19360;19353:22;19406:3;19395:9;19391:19;19384:26;;19445:2;19437:6;19433:15;19419:29;;19466:1;19476:195;19490:6;19487:1;19484:13;19476:195;;;19555:13;;-1:-1:-1;;;;;19551:39:1;19539:52;;19646:15;;;;19611:12;;;;19587:1;19505:9;19476:195;;;-1:-1:-1;;;;;;;19727:32:1;;;;19722:2;19707:18;;19700:60;-1:-1:-1;;;19791:3:1;19776:19;19769:35;19688:3;18822:988;-1:-1:-1;;;18822:988:1:o;20427:306::-;20515:6;20523;20531;20584:2;20572:9;20563:7;20559:23;20555:32;20552:52;;;20600:1;20597;20590:12;20552:52;20629:9;20623:16;20613:26;;20679:2;20668:9;20664:18;20658:25;20648:35;;20723:2;20712:9;20708:18;20702:25;20692:35;;20427:306;;;;;:::o

Swarm Source

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