ETH Price: $2,298.20 (-3.60%)
Gas: 9.98 Gwei

Token

IUCN Coin (IUCN)
 

Overview

Max Total Supply

2,004,981,056 IUCN

Holders

72 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,118.426588491394399648 IUCN

Value
$0.00
0x010F7ec243bB5e7ed2B54cce49cA147E540E56Fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

IUCN Coin project places significant emphasis on environmentally friendly initiatives such as recycling systems, solar energy farms, and artificial meat production. These efforts aim to reduce the impact of the climate crisis and promote sustainability.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
IUCN

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 20 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-14
*/

/**
 *Submitted for verification at BscScan.com on 2023-04-17
*/

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

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

contract IUCN is Context, IBEP20, Ownable {
    using Address for address payable;

    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 public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;

    //Anti Dump
    mapping(address => uint256) private _lastSell;
    mapping(address => uint256) private _balances;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 30 seconds;

    IRouter public router;
    address public pair;

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

    uint256 private _tTotal = (2*1e9) * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 1e5 * 10**18;
    uint256 public maxBuyLimit = 1e10 * 10**18;
    uint256 public maxSellLimit = 1e10 * 10**18;
    uint256 public maxWalletLimit = 1e10 * 10**18;

    uint256 public genesis_block;
    uint256 private deadline = 3;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0x13C534E432564bd964dB340012B6E5C0279Cd0B1;
    address public AfforestationWallet = 0x186E6e4c484baaa02C9E3A62589d791A7cE5F226; // Afforestation Wallet for tackling climate crisis
    uint256 public constant MAX_SUPPLY = 1e10 * 10**_decimals;
    
    // State variables
    bool public mintingStarted;
    uint256 public lastMintedBlock;

    string private constant _name = "IUCN Coin";
    string private constant _symbol = "IUCN";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 Development;
    }

    Taxes public taxes = Taxes(0, 3, 2, 4);
    Taxes public sellTaxes = Taxes(0, 3, 2, 4);
    Taxes private launchtax = Taxes(0, 99, 0, 0);

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 Development;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rLiquidity;
        uint256 rDevelopment;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tLiquidity;
        uint256 tDevelopment;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);

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

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

        mintingStarted = true;
        lastMintedBlock = block.number;

        router = _router;
        pair = _pair;

        excludeFromReward(pair);
        excludeFromReward(deadWallet);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[AfforestationWallet] = true;
        _isExcludedFromFee[deadWallet] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _tTotal += amount;
        unchecked {

            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

     function mintOnBlock() public onlyOwner {
        require(mintingStarted, "Minting not yet started");
        require(_tTotal < MAX_SUPPLY, "Max supply reached");
        require(block.number > lastMintedBlock, "Block not yet mined");

        uint256 blockDiff = block.number - lastMintedBlock;
        uint256 tokensToMint = blockDiff * (32*10**18);
        uint256 remaining = MAX_SUPPLY - _tTotal;
        if (tokensToMint > remaining) {
            tokensToMint = remaining;
        }

        _mint(marketingWallet, tokensToMint);
        lastMintedBlock = block.number;
    }

    function startMinting() public onlyOwner {
        require(!mintingStarted, "Minting already started");
        mintingStarted = true;
        lastMintedBlock = block.number;
    }

    function stopMinting() public onlyOwner {
        require(mintingStarted, "Minting not yet started");
        mintingStarted = false;
    }


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

    function EnableTrading() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        swapEnabled = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require(_deadline < 5,"Deadline should be less than 5 Blocks");
        deadline = _deadline;
    }

    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 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 setTaxes(
        uint256 _rfi,
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _Development
    ) public onlyOwner {
        require((_rfi + _marketing + _liquidity + _Development ) <= 5, "Must keep fees at 5% or less");
        taxes = Taxes(_rfi, _marketing, _liquidity, _Development);
        emit FeesChanged();
    }

    function setSellTaxes(
        uint256 _rfi,
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _Development
    ) public onlyOwner {
        require((_rfi + _marketing + _liquidity + _Development ) <= 5, "Must keep fees at 5% or less");
        sellTaxes = Taxes(_rfi, _marketing, _liquidity, _Development);
        emit FeesChanged();
    }

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

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity += tLiquidity;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tLiquidity;
        }
        _rOwned[address(this)] += rLiquidity;
    }

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

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

    function _takeDevelopment(uint256 rDevelopment, uint256 tDevelopment) private {
        totFeesPaid.Development += tDevelopment;

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] += tDevelopment;
        }
        _rOwned[address(this)] += rDevelopment;
    }

    function _getValues(
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool useLaunchTax
    ) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell, useLaunchTax);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rMarketing,
            to_return.rLiquidity
        ) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rDevelopment) = _getRValues2(
            to_return,
            takeFee,
            _getRate()
        );

        return to_return;
    }

    function _getTValues(
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool useLaunchTax
    ) private view returns (valuesFromGetValues memory s) {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        Taxes memory temp;
        if (isSell && !useLaunchTax) temp = sellTaxes;
        else if (!useLaunchTax) temp = taxes;
        else temp = launchtax;

        s.tRfi = (tAmount * temp.rfi) / 100;
        s.tMarketing = (tAmount * temp.marketing) / 100;
        s.tLiquidity = (tAmount * temp.liquidity) / 100;
        s.tDevelopment = (tAmount * temp.Development) / 100;
        s.tTransferAmount =
            tAmount -
            s.tRfi -
            s.tMarketing -
            s.tLiquidity -
            s.tDevelopment;
        return s;
    }

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

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

        rRfi = s.tRfi * currentRate;
        rMarketing = s.tMarketing * currentRate;
        rLiquidity = s.tLiquidity * currentRate;
        uint256 rDevelopment = s.tDevelopment * currentRate;
        rTransferAmount =
            rAmount -
            rRfi -
            rMarketing -
            rLiquidity -
            rDevelopment ;
        return (rAmount, rTransferAmount, rRfi, rMarketing, rLiquidity);
    }

    function _getRValues2(
        valuesFromGetValues memory s,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rDevelopment
        )
    {
        if (!takeFee) {
            return (0);
        }

        rDevelopment = s.tDevelopment * currentRate;
        return (rDevelopment);
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );

        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            require(tradingEnabled, "Trading not active");
        }

        if (from == pair && !_isExcludedFromFee[to] && !swapping) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(to) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (to != pair) {
                require(
                    balanceOf(to) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
            if (coolDownEnabled) {
                uint256 timePassed = block.timestamp - _lastSell[from];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[from] = block.timestamp;
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if (
            !swapping &&
            swapEnabled &&
            canSwap &&
            from != pair &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (to == pair) swapAndLiquify(swapTokensAtAmount, sellTaxes);
            else swapAndLiquify(swapTokensAtAmount, taxes);
        }
        bool takeFee = true;
        bool isSell = false;
        if (swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
        if (to == pair) isSell = true;

        _tokenTransfer(from, to, amount, takeFee, isSell);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell
    ) private {
        bool useLaunchTax = !_isExcludedFromFee[sender] &&
            !_isExcludedFromFee[recipient] &&
            block.number < genesis_block + deadline;

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell, useLaunchTax);

        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.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity, s.tLiquidity);
            emit Transfer(
                sender,
                address(this),
                s.tLiquidity + s.tMarketing + s.tDevelopment
            );
        }
        if (s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if (s.rDevelopment > 0 || s.tDevelopment > 0) _takeDevelopment(s.rDevelopment, s.tDevelopment);
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap {
        uint256 denominator = (temp.liquidity +
            temp.marketing +
            temp.Development) * 2;

        if (denominator == 0){
            return;
        }

        uint256 tokensToAddLiquidityWith = (contractBalance * temp.liquidity) / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForBNB(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance / (denominator - temp.liquidity);
        uint256 bnbToAddLiquidityWith = unitBalance * temp.liquidity;

        if (bnbToAddLiquidityWith > 0) {
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if (marketingAmt > 0) {
            payable(marketingWallet).sendValue(marketingAmt);
        }

        uint256 DevelopmentAmt = unitBalance * 2 * temp.Development;
        if (DevelopmentAmt > 0) {
            payable(AfforestationWallet).sendValue(DevelopmentAmt);
        }
    }

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

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

    function swapTokensForBNB(uint256 tokenAmount) 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,
            address(this),
            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 updateAfforestationWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0),"Fee Address cannot be zero address");
        AfforestationWallet = newWallet;
    }

    function updateCooldown(bool state, uint256 time) external onlyOwner {
        require(time <= 60, "cooldown timer cannot exceed 1 minutes");
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

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

    function updateSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 1e6, "Cannot set max buy amount lower than 0.1% of tokens");
        require(maxSell >= 1e6, "Cannot set max sell amount lower than 0.1% of tokens%");
        require(maxWallet >= 1e7, "Cannot set max wallet amount lower than 1% of tokens");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals();
    }

    //Use this in case BNB are sent to the contract by mistake
    function rescueBNB(uint256 weiAmount) external onlyOwner {
        require(address(this).balance >= weiAmount, "insufficient BNB balance");
        payable(msg.sender).transfer(weiAmount);
    }

    //Use this in case BEP20 Tokens are sent to the contract by mistake
    function rescueAnyBEP20Tokens(address _tokenAddr,address _to, uint256 _amount) public onlyOwner {
        require(_tokenAddr != address(this), "Owner can't claim contract's balance of its own tokens");
        IBEP20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":[],"name":"FeesChanged","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":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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"AfforestationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"lastMintedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintOnBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","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":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_Development","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_Development","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"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":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"address","name":"newWallet","type":"address"}],"name":"updateAfforestationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a805460ff19166001178155601e600b556200002490601290620009f0565b6200003490637735940062000a01565b600e819055620000479060001962000a31565b620000559060001962000a48565b600f5569152d02c7e14af68000006010556b204fce5e3e250261100000006011819055601281905560135560036015819055601680546001600160a01b031990811661dead179091556017805482167313c534e432564bd964db340012b6e5c0279cd0b11790556018805490911673186e6e4c484baaa02c9e3a62589d791a7ce5f226179055604080516080808201835260008083526020808401869052600284860181905260046060958601819052601a849055601b889055601c829055601d819055865180860188528481528084018990528088018390528601819052601e849055601f97909755815560219590955583519182018452808252606394820185905292810183905201819052602281905560239190915560248190556025553480156200018357600080fd5b506040516200463138038062004631833981016040819052620001a69162000a5e565b620001b133620004b1565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d919062000a5e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062000a5e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000305919062000a5e565b6018805460ff60a01b1916600160a01b17905543601955600c80546001600160a01b038086166001600160a01b031992831617909255600d80549284169290911682179055909150620003589062000501565b6016546200036f906001600160a01b031662000501565b600f5460016000620003896000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601754821681526004909352818320805485166001908117909155601854821684528284208054861682179055601654909116835291208054909216179055620004586000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620004a091815260200190565b60405180910390a350505062000ad2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620005cc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000558565b6001600160a01b0381166000908152600160205260409020541562000629576001600160a01b0381166000908152600160205260409020546200060f906200068f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000600f54821115620006f85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000558565b60006200070462000719565b905062000712818462000a89565b9392505050565b60008080620007276200073f565b909250905062000738818362000a89565b9250505090565b600f54600e546000918291825b600654811015620008a75782600160006006848154811062000772576200077262000aa0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007e15750816002600060068481548110620007ba57620007ba62000aa0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620007f857600f54600e54945094505050509091565b600160006006838154811062000812576200081262000aa0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000843908462000a48565b925060026000600683815481106200085f576200085f62000aa0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000890908362000a48565b9150806200089e8162000ab6565b9150506200074c565b50600e54600f54620008ba919062000a89565b821015620008d257600f54600e549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000932578160001904821115620009165762000916620008db565b808516156200092457918102915b93841c9390800290620008f6565b509250929050565b6000826200094b57506001620009ea565b816200095a57506000620009ea565b81600181146200097357600281146200097e576200099e565b6001915050620009ea565b60ff841115620009925762000992620008db565b50506001821b620009ea565b5060208310610133831016604e8410600b8410161715620009c3575081810a620009ea565b620009cf8383620008f1565b8060001904821115620009e657620009e6620008db565b0290505b92915050565b60006200071260ff8416836200093a565b8082028115828204841417620009ea57620009ea620008db565b634e487b7160e01b600052601260045260246000fd5b60008262000a435762000a4362000a1b565b500690565b81810381811115620009ea57620009ea620008db565b60006020828403121562000a7157600080fd5b81516001600160a01b03811681146200071257600080fd5b60008262000a9b5762000a9b62000a1b565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000acb5762000acb620008db565b5060010190565b613b4f8062000ae26000396000f3fe6080604052600436106102a55760003560e01c806375f0a8741161016157806375f0a8741461067157806385141a771461069157806388f82020146106b15780638da5cb5b146106ea5780638e2839ff146106ff57806390a6fdf61461071f578063924de9b71461073f57806395d89b411461075f5780639a65ea261461078c5780639ba5e4d5146107a1578063a12a7d61146107c4578063a457c2d7146107e4578063a8aa1b3114610804578063a9059cbb14610824578063aacebbe314610844578063d257b34f14610864578063d2ce0db214610884578063dd62ed3e1461089a578063e05bdc0d146108e0578063e1b450ad146108f6578063e2f4560514610916578063e517f2b91461092c578063ea2f0b371461094c578063edaa11681461096c578063ee36e3591461098c578063f2fde38b146109a6578063f480fec2146109c6578063f66895a3146109e6578063f887ea4014610a0957600080fd5b806306fdde03146102b1578063095ea7b3146102f55780631714e9b51461032557806318160ddd1461033c5780631d97b7cd1461035b57806323b872dd14610370578063274a533c146103905780632d838119146103a6578063313ce567146103c657806332cb6b0c146103e25780633685d419146103f757806339509351146104175780633e3e0b1214610437578063437823ec1461044c578063441b1d301461046c5780634549b0391461048c57806347c23092146104ac5780634ada218b146104cc57806352390c02146104e6578063531cded9146105065780635342acb41461053e578063652e2f041461057757806366a88d961461058d5780636aa5b37f146105a35780636ddd1713146105b95780636f8608e4146105d857806370a08231146105f9578063715018a614610619578063728f8eea1461062e57600080fd5b366102ac57005b600080fd5b3480156102bd57600080fd5b5060408051808201909152600981526824aaa1a71021b7b4b760b91b60208201525b6040516102ec919061344d565b60405180910390f35b34801561030157600080fd5b506103156103103660046134c0565b610a29565b60405190151581526020016102ec565b34801561033157600080fd5b5061033a610a40565b005b34801561034857600080fd5b50600e545b6040519081526020016102ec565b34801561036757600080fd5b5061033a610bca565b34801561037c57600080fd5b5061031561038b3660046134ec565b610c5c565b34801561039c57600080fd5b5061034d60145481565b3480156103b257600080fd5b5061034d6103c136600461352d565b610d0f565b3480156103d257600080fd5b50604051601281526020016102ec565b3480156103ee57600080fd5b5061034d610d8c565b34801561040357600080fd5b5061033a610412366004613546565b610daa565b34801561042357600080fd5b506103156104323660046134c0565b610f5f565b34801561044357600080fd5b5061033a610f96565b34801561045857600080fd5b5061033a610467366004613546565b610ffd565b34801561047857600080fd5b5061033a61048736600461352d565b611050565b34801561049857600080fd5b5061034d6104a736600461357c565b6110f7565b3480156104b857600080fd5b5061033a6104c73660046134ec565b611187565b3480156104d857600080fd5b506007546103159060ff1681565b3480156104f257600080fd5b5061033a610501366004613546565b6112a6565b34801561051257600080fd5b50601854610526906001600160a01b031681565b6040516001600160a01b0390911681526020016102ec565b34801561054a57600080fd5b50610315610559366004613546565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561058357600080fd5b5061034d60125481565b34801561059957600080fd5b5061034d60135481565b3480156105af57600080fd5b5061034d60115481565b3480156105c557600080fd5b5060075461031590610100900460ff1681565b3480156105e457600080fd5b5060185461031590600160a01b900460ff1681565b34801561060557600080fd5b5061034d610614366004613546565b6113fc565b34801561062557600080fd5b5061033a61145b565b34801561063a57600080fd5b50601a54601b54601c54601d546106519392919084565b6040805194855260208501939093529183015260608201526080016102ec565b34801561067d57600080fd5b50601754610526906001600160a01b031681565b34801561069d57600080fd5b50601654610526906001600160a01b031681565b3480156106bd57600080fd5b506103156106cc366004613546565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106f657600080fd5b50610526611496565b34801561070b57600080fd5b5061033a61071a3660046135c2565b6114a5565b34801561072b57600080fd5b5061033a61073a366004613546565b611540565b34801561074b57600080fd5b5061033a61075a366004613699565b6115b7565b34801561076b57600080fd5b5060408051808201909152600481526324aaa1a760e11b60208201526102df565b34801561079857600080fd5b5061033a611600565b3480156107ad57600080fd5b506026546027546028546029546106519392919084565b3480156107d057600080fd5b5061033a6107df3660046136b6565b61169c565b3480156107f057600080fd5b506103156107ff3660046134c0565b61176c565b34801561081057600080fd5b50600d54610526906001600160a01b031681565b34801561083057600080fd5b5061031561083f3660046134c0565b611807565b34801561085057600080fd5b5061033a61085f366004613546565b611814565b34801561087057600080fd5b5061033a61087f36600461352d565b61188b565b34801561089057600080fd5b5061034d600b5481565b3480156108a657600080fd5b5061034d6108b53660046136e8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108ec57600080fd5b5061034d60195481565b34801561090257600080fd5b5061033a610911366004613716565b61194b565b34801561092257600080fd5b5061034d60105481565b34801561093857600080fd5b5061033a610947366004613742565b611b21565b34801561095857600080fd5b5061033a610967366004613546565b611bd2565b34801561097857600080fd5b5061033a61098736600461352d565b611c22565b34801561099857600080fd5b50600a546103159060ff1681565b3480156109b257600080fd5b5061033a6109c1366004613546565b611d15565b3480156109d257600080fd5b5061033a6109e13660046136b6565b611db5565b3480156109f257600080fd5b50601e54601f546020546021546106519392919084565b348015610a1557600080fd5b50600c54610526906001600160a01b031681565b6000610a36338484611e86565b5060015b92915050565b33610a49611496565b6001600160a01b031614610a785760405162461bcd60e51b8152600401610a6f90613760565b60405180910390fd5b601854600160a01b900460ff16610aa15760405162461bcd60e51b8152600401610a6f90613795565b610aad6012600a6138c0565b610abc906402540be4006138cf565b600e5410610b015760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610a6f565b6019544311610b485760405162461bcd60e51b8152602060048201526013602482015272109b1bd8dac81b9bdd081e595d081b5a5b9959606a1b6044820152606401610a6f565b600060195443610b5891906138e6565b90506000610b6f826801bc16d674ec8000006138cf565b90506000600e546012600a610b8491906138c0565b610b93906402540be4006138cf565b610b9d91906138e6565b905080821115610bab578091505b601754610bc1906001600160a01b031683611faa565b50504360195550565b33610bd3611496565b6001600160a01b031614610bf95760405162461bcd60e51b8152600401610a6f90613760565b60075460ff1615610c475760405162461bcd60e51b815260206004820152601860248201527743616e6e6f742072652d656e61626c652074726164696e6760401b6044820152606401610a6f565b6007805461ffff191661010117905543601455565b6000610c69848484612059565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f42455032303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a6f565b610d028533610cfd86856138e6565b611e86565b60019150505b9392505050565b6000600f54821115610d765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a6f565b6000610d806126bb565b9050610d0881846138f9565b610d986012600a6138c0565b610da7906402540be4006138cf565b81565b33610db3611496565b6001600160a01b031614610dd95760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03811660009081526005602052604090205460ff16610e3b5760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610a6f565b60005b600654811015610f5b57816001600160a01b031660068281548110610e6557610e6561391b565b6000918252602090912001546001600160a01b031603610f495760068054610e8f906001906138e6565b81548110610e9f57610e9f61391b565b600091825260209091200154600680546001600160a01b039092169183908110610ecb57610ecb61391b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610f2357610f23613931565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f5381613947565b915050610e3e565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a36918590610cfd908690613960565b33610f9f611496565b6001600160a01b031614610fc55760405162461bcd60e51b8152600401610a6f90613760565b601854600160a01b900460ff16610fee5760405162461bcd60e51b8152600401610a6f90613795565b6018805460ff60a01b19169055565b33611006611496565b6001600160a01b03161461102c5760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b33611059611496565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610a6f90613760565b804710156110ca5760405162461bcd60e51b8152602060048201526018602482015277696e73756666696369656e7420424e422062616c616e636560401b6044820152606401610a6f565b604051339082156108fc029083906000818181858888f19350505050158015610f5b573d6000803e3d6000fd5b6000600e5483111561114b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a6f565b8161116a5760006111608460016000806126de565b519150610a3a9050565b600061117a8460016000806126de565b602001519150610a3a9050565b33611190611496565b6001600160a01b0316146111b65760405162461bcd60e51b8152600401610a6f90613760565b306001600160a01b0384160361122d5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610a6f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613973565b50505050565b336112af611496565b6001600160a01b0316146112d55760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03811660009081526005602052604090205460ff161561133c5760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b6044820152606401610a6f565b6001600160a01b03811660009081526001602052604090205415611396576001600160a01b03811660009081526001602052604090205461137c90610d0f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561143957506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a3a90610d0f565b33611464611496565b6001600160a01b03161461148a5760405162461bcd60e51b8152600401610a6f90613760565b611494600061273d565b565b6000546001600160a01b031690565b336114ae611496565b6001600160a01b0316146114d45760405162461bcd60e51b8152600401610a6f90613760565b60005b825181101561153b5781600460008584815181106114f7576114f761391b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061153381613947565b9150506114d7565b505050565b33611549611496565b6001600160a01b03161461156f5760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b0381166115955760405162461bcd60e51b8152600401610a6f90613990565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b336115c0611496565b6001600160a01b0316146115e65760405162461bcd60e51b8152600401610a6f90613760565b600780549115156101000261ff0019909216919091179055565b33611609611496565b6001600160a01b03161461162f5760405162461bcd60e51b8152600401610a6f90613760565b601854600160a01b900460ff16156116835760405162461bcd60e51b8152602060048201526017602482015276135a5b9d1a5b99c8185b1c9958591e481cdd185c9d1959604a1b6044820152606401610a6f565b6018805460ff60a01b1916600160a01b17905543601955565b336116a5611496565b6001600160a01b0316146116cb5760405162461bcd60e51b8152600401610a6f90613760565b600581836116d98688613960565b6116e39190613960565b6116ed9190613960565b111561170b5760405162461bcd60e51b8152600401610a6f906139d2565b6040805160808101825285815260208101859052808201849052606001829052601a859055601b849055601c839055601d829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117ee5760405162461bcd60e51b815260206004820152602560248201527f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6f565b6117fd3385610cfd86856138e6565b5060019392505050565b6000610a36338484612059565b3361181d611496565b6001600160a01b0316146118435760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b0381166118695760405162461bcd60e51b8152600401610a6f90613990565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b33611894611496565b6001600160a01b0316146118ba5760405162461bcd60e51b8152600401610a6f90613760565b6298968081111561192f5760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527820686967686572207468616e203125206f6620746f6b656e7360381b6064820152608401610a6f565b61193b6012600a6138c0565b61194590826138cf565b60105550565b33611954611496565b6001600160a01b03161461197a5760405162461bcd60e51b8152600401610a6f90613760565b620f42408310156119e95760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152727468616e20302e3125206f6620746f6b656e7360681b6064820152608401610a6f565b620f4240821015611a5a5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015274207468616e20302e3125206f6620746f6b656e732560581b6064820152608401610a6f565b62989680811015611aca5760405162461bcd60e51b815260206004820152603460248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152736572207468616e203125206f6620746f6b656e7360601b6064820152608401610a6f565b611ad66012600a6138c0565b611ae090846138cf565b601155611aef6012600a6138c0565b611af990836138cf565b601255611b04601290565b611b0f90600a6138c0565b611b1990826138cf565b601355505050565b33611b2a611496565b6001600160a01b031614611b505760405162461bcd60e51b8152600401610a6f90613760565b603c811115611bb05760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610a6f565b611bbb8160016138cf565b600b5550600a805460ff1916911515919091179055565b33611bdb611496565b6001600160a01b031614611c015760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33611c2b611496565b6001600160a01b031614611c515760405162461bcd60e51b8152600401610a6f90613760565b60075460ff1615611cb25760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610a6f565b60058110611d105760405162461bcd60e51b815260206004820152602560248201527f446561646c696e652073686f756c64206265206c657373207468616e203520426044820152646c6f636b7360d81b6064820152608401610a6f565b601555565b33611d1e611496565b6001600160a01b031614611d445760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b038116611da95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6f565b611db28161273d565b50565b33611dbe611496565b6001600160a01b031614611de45760405162461bcd60e51b8152600401610a6f90613760565b60058183611df28688613960565b611dfc9190613960565b611e069190613960565b1115611e245760405162461bcd60e51b8152600401610a6f906139d2565b6040805160808101825285815260208082018690528183018590526060909101839052601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b6001600160a01b038316611ee85760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6f565b6001600160a01b038216611f495760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166120005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a6f565b80600e60008282546120129190613960565b90915550506001600160a01b038216600081815260096020908152604080832080548601905551848152600080516020613afa833981519152910160405180910390a35050565b6001600160a01b0383166120bd5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6f565b6001600160a01b03821661211f5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6f565b600081116121815760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a6f565b61218a836113fc565b8111156121f35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a6f565b6001600160a01b03831660009081526004602052604090205460ff1615801561223557506001600160a01b03821660009081526004602052604090205460ff16155b156122815760075460ff166122815760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610a6f565b600d546001600160a01b0384811691161480156122b757506001600160a01b03821660009081526004602052604090205460ff16155b80156122cc575060075462010000900460ff16155b15612358576011548111156123235760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610a6f565b60135481612330846113fc565b61233a9190613960565b11156123585760405162461bcd60e51b8152600401610a6f90613a08565b600d546001600160a01b0384811691161480159061238f57506001600160a01b03821660009081526004602052604090205460ff16155b80156123b457506001600160a01b03831660009081526004602052604090205460ff16155b80156123c9575060075462010000900460ff16155b156124fc576012548111156124205760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610a6f565b600d546001600160a01b0383811691161461246a5760135481612442846113fc565b61244c9190613960565b111561246a5760405162461bcd60e51b8152600401610a6f90613a08565b600a5460ff16156124fc576001600160a01b03831660009081526008602052604081205461249890426138e6565b9050600b548110156124df5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610a6f565b506001600160a01b03831660009081526008602052604090204290555b600060105461250a306113fc565b600754911115915062010000900460ff1615801561252f5750600754610100900460ff165b80156125385750805b80156125525750600d546001600160a01b03858116911614155b801561257757506001600160a01b03841660009081526004602052604090205460ff16155b801561259c57506001600160a01b03831660009081526004602052604090205460ff16155b1561262a57600d546001600160a01b03908116908416036125f45760105460408051608081018252601e548152601f54602080830191909152549181019190915260215460608201526125ef919061278d565b61262a565b60105460408051608081018252601a548152601b546020820152601c5491810191909152601d54606082015261262a919061278d565b60075460019060009062010000900460ff168061265f57506001600160a01b03861660009081526004602052604090205460ff165b8061268257506001600160a01b03851660009081526004602052604090205460ff165b1561268c57600091505b600d546001600160a01b03908116908616036126a6575060015b6126b386868685856128f6565b505050505050565b60008060006126c8612bff565b90925090506126d781836138f9565b9250505090565b6126e66133f3565b6126f285858585612d82565b90506127078186866127026126bb565b612f33565b6080860152606085015260408401526020830152815261272f818561272a6126bb565b612fe2565b60a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805462ff0000191662010000179055606081015160208201516040830151600092916127ba91613960565b6127c49190613960565b6127cf9060026138cf565b9050806000036127df57506128e6565b6000818360400151856127f291906138cf565b6127fc91906138f9565b9050600061280a82866138e6565b90504761281682613002565b600061282282476138e6565b9050600086604001518661283691906138e6565b61284090836138f9565b9050600087604001518261285491906138cf565b90508015612866576128668682613154565b60208801516000906128798460026138cf565b61288391906138cf565b905080156128a1576017546128a1906001600160a01b031682613208565b60608901516000906128b48560026138cf565b6128be91906138cf565b905080156128dc576018546128dc906001600160a01b031682613208565b5050505050505050505b50506007805462ff000019169055565b6001600160a01b03851660009081526004602052604081205460ff1615801561293857506001600160a01b03851660009081526004602052604090205460ff16155b8015612952575060155460145461294f9190613960565b43105b90506000612962858585856126de565b6001600160a01b03881660009081526005602052604090205490915060ff16156129c4576001600160a01b0387166000908152600260205260409020546129aa9086906138e6565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff1615612a275760c08101516001600160a01b038716600090815260026020526040902054612a0d9190613960565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b038816600090815260016020526040902054612a4c91906138e6565b6001600160a01b0380891660009081526001602090815260408083209490945584015191891681529190912054612a839190613960565b6001600160a01b0387166000908152600160205260409081902091909155810151151580612ab5575060008160e00151115b15612acc57612acc81604001518260e0015161331e565b600081608001511180612ae457506000816101200151115b15612b5757612afc8160800151826101200151613353565b306001600160a01b0316876001600160a01b0316600080516020613afa833981519152836101400151846101000151856101200151612b3b9190613960565b612b459190613960565b60405190815260200160405180910390a35b600081606001511180612b6f57506000816101000151115b15612b8757612b8781606001518261010001516133c9565b60008160a001511180612b9f57506000816101400151115b15612bb757612bb78160a001518261014001516133de565b856001600160a01b0316876001600160a01b0316600080516020613afa8339815191528360c00151604051612bee91815260200190565b60405180910390a350505050505050565b600f54600e546000918291825b600654811015612d5157826001600060068481548110612c2e57612c2e61391b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c995750816002600060068481548110612c7257612c7261391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612caf57600f54600e54945094505050509091565b6001600060068381548110612cc657612cc661391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cf590846138e6565b92506002600060068381548110612d0e57612d0e61391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d3d90836138e6565b915080612d4981613947565b915050612c0c565b50600e54600f54612d6291906138f9565b821015612d7957600f54600e549350935050509091565b90939092509050565b612d8a6133f3565b83612d9b5760c08101859052612735565b612dc66040518060800160405280600081526020016000815260200160008152602001600081525090565b838015612dd1575082155b15612e07575060408051608081018252601e548152601f5460208083019190915254918101919091526021546060820152612e66565b82612e3b575060408051608081018252601a548152601b546020820152601c5491810191909152601d546060820152612e66565b5060408051608081018252602254815260235460208201526024549181019190915260255460608201525b8051606490612e7590886138cf565b612e7f91906138f9565b60e08301526020810151606490612e9690886138cf565b612ea091906138f9565b6101008301526040810151606490612eb890886138cf565b612ec291906138f9565b6101208301526060810151606490612eda90886138cf565b612ee491906138f9565b610140830181905261012083015161010084015160e0850151612f07908a6138e6565b612f1191906138e6565b612f1b91906138e6565b612f2591906138e6565b60c083015250949350505050565b600080808080612f4386896138cf565b945086612f5b57508392506000915081905080612fd7565b858960e00151612f6b91906138cf565b925085896101000151612f7e91906138cf565b915085896101200151612f9191906138cf565b90506000868a6101400151612fa691906138cf565b9050808284612fb5878a6138e6565b612fbf91906138e6565b612fc991906138e6565b612fd391906138e6565b9450505b945094509450945094565b600082612ff157506000610d08565b8184610140015161273591906138cf565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130375761303761391b565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b49190613a3d565b816001815181106130c7576130c761391b565b6001600160a01b039283166020918202929092010152600c546130ed9130911684611e86565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613126908590600090869030904290600401613a5a565b600060405180830381600087803b15801561314057600080fd5b505af11580156126b3573d6000803e3d6000fd5b600c5461316c9030906001600160a01b031684611e86565b600c5460165460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132019190613acb565b5050505050565b804710156132585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a6f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132a5576040519150601f19603f3d011682016040523d82523d6000602084013e6132aa565b606091505b505090508061153b5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610a6f565b81600f600082825461333091906138e6565b90915550506026805482919060009061334a908490613960565b90915550505050565b80602660020160008282546133689190613960565b90915550503060009081526005602052604090205460ff16156133aa5730600090815260026020526040812080548392906133a4908490613960565b90915550505b306000908152600160205260408120805484929061334a908490613960565b80602660010160008282546133689190613960565b80602660030160008282546133689190613960565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561347a5785810183015185820160400152820161345e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611db257600080fd5b80356134bb8161349b565b919050565b600080604083850312156134d357600080fd5b82356134de8161349b565b946020939093013593505050565b60008060006060848603121561350157600080fd5b833561350c8161349b565b9250602084013561351c8161349b565b929592945050506040919091013590565b60006020828403121561353f57600080fd5b5035919050565b60006020828403121561355857600080fd5b8135610d088161349b565b8015158114611db257600080fd5b80356134bb81613563565b6000806040838503121561358f57600080fd5b8235915060208301356135a181613563565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156135d557600080fd5b823567ffffffffffffffff808211156135ed57600080fd5b818501915085601f83011261360157600080fd5b8135602082821115613615576136156135ac565b8160051b604051601f19603f8301168101818110868211171561363a5761363a6135ac565b60405292835281830193508481018201928984111561365857600080fd5b948201945b8386101561367d5761366e866134b0565b8552948201949382019361365d565b965061368c9050878201613571565b9450505050509250929050565b6000602082840312156136ab57600080fd5b8135610d0881613563565b600080600080608085870312156136cc57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156136fb57600080fd5b82356137068161349b565b915060208301356135a18161349b565b60008060006060848603121561372b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561375557600080fd5b82356134de81613563565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260179082015276135a5b9d1a5b99c81b9bdd081e595d081cdd185c9d1959604a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156138175781600019048211156137fd576137fd6137c6565b8085161561380a57918102915b93841c93908002906137e1565b509250929050565b60008261382e57506001610a3a565b8161383b57506000610a3a565b8160018114613851576002811461385b57613877565b6001915050610a3a565b60ff84111561386c5761386c6137c6565b50506001821b610a3a565b5060208310610133831016604e8410600b841016171561389a575081810a610a3a565b6138a483836137dc565b80600019048211156138b8576138b86137c6565b029392505050565b6000610d0860ff84168361381f565b8082028115828204841417610a3a57610a3a6137c6565b81810381811115610a3a57610a3a6137c6565b60008261391657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613959576139596137c6565b5060010190565b80820180821115610a3a57610a3a6137c6565b60006020828403121561398557600080fd5b8151610d0881613563565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601c908201527b4d757374206b6565702066656573206174203525206f72206c65737360201b604082015260600190565b6020808252818101527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604082015260600190565b600060208284031215613a4f57600080fd5b8151610d088161349b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613aaa5784516001600160a01b031683529383019391830191600101613a85565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ae057600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204807f97eeba553ac45837263e2102a2807abf5807ef846f39bb2baee02c88ef264736f6c634300081200330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102a55760003560e01c806375f0a8741161016157806375f0a8741461067157806385141a771461069157806388f82020146106b15780638da5cb5b146106ea5780638e2839ff146106ff57806390a6fdf61461071f578063924de9b71461073f57806395d89b411461075f5780639a65ea261461078c5780639ba5e4d5146107a1578063a12a7d61146107c4578063a457c2d7146107e4578063a8aa1b3114610804578063a9059cbb14610824578063aacebbe314610844578063d257b34f14610864578063d2ce0db214610884578063dd62ed3e1461089a578063e05bdc0d146108e0578063e1b450ad146108f6578063e2f4560514610916578063e517f2b91461092c578063ea2f0b371461094c578063edaa11681461096c578063ee36e3591461098c578063f2fde38b146109a6578063f480fec2146109c6578063f66895a3146109e6578063f887ea4014610a0957600080fd5b806306fdde03146102b1578063095ea7b3146102f55780631714e9b51461032557806318160ddd1461033c5780631d97b7cd1461035b57806323b872dd14610370578063274a533c146103905780632d838119146103a6578063313ce567146103c657806332cb6b0c146103e25780633685d419146103f757806339509351146104175780633e3e0b1214610437578063437823ec1461044c578063441b1d301461046c5780634549b0391461048c57806347c23092146104ac5780634ada218b146104cc57806352390c02146104e6578063531cded9146105065780635342acb41461053e578063652e2f041461057757806366a88d961461058d5780636aa5b37f146105a35780636ddd1713146105b95780636f8608e4146105d857806370a08231146105f9578063715018a614610619578063728f8eea1461062e57600080fd5b366102ac57005b600080fd5b3480156102bd57600080fd5b5060408051808201909152600981526824aaa1a71021b7b4b760b91b60208201525b6040516102ec919061344d565b60405180910390f35b34801561030157600080fd5b506103156103103660046134c0565b610a29565b60405190151581526020016102ec565b34801561033157600080fd5b5061033a610a40565b005b34801561034857600080fd5b50600e545b6040519081526020016102ec565b34801561036757600080fd5b5061033a610bca565b34801561037c57600080fd5b5061031561038b3660046134ec565b610c5c565b34801561039c57600080fd5b5061034d60145481565b3480156103b257600080fd5b5061034d6103c136600461352d565b610d0f565b3480156103d257600080fd5b50604051601281526020016102ec565b3480156103ee57600080fd5b5061034d610d8c565b34801561040357600080fd5b5061033a610412366004613546565b610daa565b34801561042357600080fd5b506103156104323660046134c0565b610f5f565b34801561044357600080fd5b5061033a610f96565b34801561045857600080fd5b5061033a610467366004613546565b610ffd565b34801561047857600080fd5b5061033a61048736600461352d565b611050565b34801561049857600080fd5b5061034d6104a736600461357c565b6110f7565b3480156104b857600080fd5b5061033a6104c73660046134ec565b611187565b3480156104d857600080fd5b506007546103159060ff1681565b3480156104f257600080fd5b5061033a610501366004613546565b6112a6565b34801561051257600080fd5b50601854610526906001600160a01b031681565b6040516001600160a01b0390911681526020016102ec565b34801561054a57600080fd5b50610315610559366004613546565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561058357600080fd5b5061034d60125481565b34801561059957600080fd5b5061034d60135481565b3480156105af57600080fd5b5061034d60115481565b3480156105c557600080fd5b5060075461031590610100900460ff1681565b3480156105e457600080fd5b5060185461031590600160a01b900460ff1681565b34801561060557600080fd5b5061034d610614366004613546565b6113fc565b34801561062557600080fd5b5061033a61145b565b34801561063a57600080fd5b50601a54601b54601c54601d546106519392919084565b6040805194855260208501939093529183015260608201526080016102ec565b34801561067d57600080fd5b50601754610526906001600160a01b031681565b34801561069d57600080fd5b50601654610526906001600160a01b031681565b3480156106bd57600080fd5b506103156106cc366004613546565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106f657600080fd5b50610526611496565b34801561070b57600080fd5b5061033a61071a3660046135c2565b6114a5565b34801561072b57600080fd5b5061033a61073a366004613546565b611540565b34801561074b57600080fd5b5061033a61075a366004613699565b6115b7565b34801561076b57600080fd5b5060408051808201909152600481526324aaa1a760e11b60208201526102df565b34801561079857600080fd5b5061033a611600565b3480156107ad57600080fd5b506026546027546028546029546106519392919084565b3480156107d057600080fd5b5061033a6107df3660046136b6565b61169c565b3480156107f057600080fd5b506103156107ff3660046134c0565b61176c565b34801561081057600080fd5b50600d54610526906001600160a01b031681565b34801561083057600080fd5b5061031561083f3660046134c0565b611807565b34801561085057600080fd5b5061033a61085f366004613546565b611814565b34801561087057600080fd5b5061033a61087f36600461352d565b61188b565b34801561089057600080fd5b5061034d600b5481565b3480156108a657600080fd5b5061034d6108b53660046136e8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108ec57600080fd5b5061034d60195481565b34801561090257600080fd5b5061033a610911366004613716565b61194b565b34801561092257600080fd5b5061034d60105481565b34801561093857600080fd5b5061033a610947366004613742565b611b21565b34801561095857600080fd5b5061033a610967366004613546565b611bd2565b34801561097857600080fd5b5061033a61098736600461352d565b611c22565b34801561099857600080fd5b50600a546103159060ff1681565b3480156109b257600080fd5b5061033a6109c1366004613546565b611d15565b3480156109d257600080fd5b5061033a6109e13660046136b6565b611db5565b3480156109f257600080fd5b50601e54601f546020546021546106519392919084565b348015610a1557600080fd5b50600c54610526906001600160a01b031681565b6000610a36338484611e86565b5060015b92915050565b33610a49611496565b6001600160a01b031614610a785760405162461bcd60e51b8152600401610a6f90613760565b60405180910390fd5b601854600160a01b900460ff16610aa15760405162461bcd60e51b8152600401610a6f90613795565b610aad6012600a6138c0565b610abc906402540be4006138cf565b600e5410610b015760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610a6f565b6019544311610b485760405162461bcd60e51b8152602060048201526013602482015272109b1bd8dac81b9bdd081e595d081b5a5b9959606a1b6044820152606401610a6f565b600060195443610b5891906138e6565b90506000610b6f826801bc16d674ec8000006138cf565b90506000600e546012600a610b8491906138c0565b610b93906402540be4006138cf565b610b9d91906138e6565b905080821115610bab578091505b601754610bc1906001600160a01b031683611faa565b50504360195550565b33610bd3611496565b6001600160a01b031614610bf95760405162461bcd60e51b8152600401610a6f90613760565b60075460ff1615610c475760405162461bcd60e51b815260206004820152601860248201527743616e6e6f742072652d656e61626c652074726164696e6760401b6044820152606401610a6f565b6007805461ffff191661010117905543601455565b6000610c69848484612059565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f42455032303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a6f565b610d028533610cfd86856138e6565b611e86565b60019150505b9392505050565b6000600f54821115610d765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a6f565b6000610d806126bb565b9050610d0881846138f9565b610d986012600a6138c0565b610da7906402540be4006138cf565b81565b33610db3611496565b6001600160a01b031614610dd95760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03811660009081526005602052604090205460ff16610e3b5760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610a6f565b60005b600654811015610f5b57816001600160a01b031660068281548110610e6557610e6561391b565b6000918252602090912001546001600160a01b031603610f495760068054610e8f906001906138e6565b81548110610e9f57610e9f61391b565b600091825260209091200154600680546001600160a01b039092169183908110610ecb57610ecb61391b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610f2357610f23613931565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f5381613947565b915050610e3e565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a36918590610cfd908690613960565b33610f9f611496565b6001600160a01b031614610fc55760405162461bcd60e51b8152600401610a6f90613760565b601854600160a01b900460ff16610fee5760405162461bcd60e51b8152600401610a6f90613795565b6018805460ff60a01b19169055565b33611006611496565b6001600160a01b03161461102c5760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b33611059611496565b6001600160a01b03161461107f5760405162461bcd60e51b8152600401610a6f90613760565b804710156110ca5760405162461bcd60e51b8152602060048201526018602482015277696e73756666696369656e7420424e422062616c616e636560401b6044820152606401610a6f565b604051339082156108fc029083906000818181858888f19350505050158015610f5b573d6000803e3d6000fd5b6000600e5483111561114b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a6f565b8161116a5760006111608460016000806126de565b519150610a3a9050565b600061117a8460016000806126de565b602001519150610a3a9050565b33611190611496565b6001600160a01b0316146111b65760405162461bcd60e51b8152600401610a6f90613760565b306001600160a01b0384160361122d5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610a6f565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613973565b50505050565b336112af611496565b6001600160a01b0316146112d55760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03811660009081526005602052604090205460ff161561133c5760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b6044820152606401610a6f565b6001600160a01b03811660009081526001602052604090205415611396576001600160a01b03811660009081526001602052604090205461137c90610d0f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561143957506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a3a90610d0f565b33611464611496565b6001600160a01b03161461148a5760405162461bcd60e51b8152600401610a6f90613760565b611494600061273d565b565b6000546001600160a01b031690565b336114ae611496565b6001600160a01b0316146114d45760405162461bcd60e51b8152600401610a6f90613760565b60005b825181101561153b5781600460008584815181106114f7576114f761391b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061153381613947565b9150506114d7565b505050565b33611549611496565b6001600160a01b03161461156f5760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b0381166115955760405162461bcd60e51b8152600401610a6f90613990565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b336115c0611496565b6001600160a01b0316146115e65760405162461bcd60e51b8152600401610a6f90613760565b600780549115156101000261ff0019909216919091179055565b33611609611496565b6001600160a01b03161461162f5760405162461bcd60e51b8152600401610a6f90613760565b601854600160a01b900460ff16156116835760405162461bcd60e51b8152602060048201526017602482015276135a5b9d1a5b99c8185b1c9958591e481cdd185c9d1959604a1b6044820152606401610a6f565b6018805460ff60a01b1916600160a01b17905543601955565b336116a5611496565b6001600160a01b0316146116cb5760405162461bcd60e51b8152600401610a6f90613760565b600581836116d98688613960565b6116e39190613960565b6116ed9190613960565b111561170b5760405162461bcd60e51b8152600401610a6f906139d2565b6040805160808101825285815260208101859052808201849052606001829052601a859055601b849055601c839055601d829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117ee5760405162461bcd60e51b815260206004820152602560248201527f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6f565b6117fd3385610cfd86856138e6565b5060019392505050565b6000610a36338484612059565b3361181d611496565b6001600160a01b0316146118435760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b0381166118695760405162461bcd60e51b8152600401610a6f90613990565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b33611894611496565b6001600160a01b0316146118ba5760405162461bcd60e51b8152600401610a6f90613760565b6298968081111561192f5760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527820686967686572207468616e203125206f6620746f6b656e7360381b6064820152608401610a6f565b61193b6012600a6138c0565b61194590826138cf565b60105550565b33611954611496565b6001600160a01b03161461197a5760405162461bcd60e51b8152600401610a6f90613760565b620f42408310156119e95760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152727468616e20302e3125206f6620746f6b656e7360681b6064820152608401610a6f565b620f4240821015611a5a5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015274207468616e20302e3125206f6620746f6b656e732560581b6064820152608401610a6f565b62989680811015611aca5760405162461bcd60e51b815260206004820152603460248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152736572207468616e203125206f6620746f6b656e7360601b6064820152608401610a6f565b611ad66012600a6138c0565b611ae090846138cf565b601155611aef6012600a6138c0565b611af990836138cf565b601255611b04601290565b611b0f90600a6138c0565b611b1990826138cf565b601355505050565b33611b2a611496565b6001600160a01b031614611b505760405162461bcd60e51b8152600401610a6f90613760565b603c811115611bb05760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610a6f565b611bbb8160016138cf565b600b5550600a805460ff1916911515919091179055565b33611bdb611496565b6001600160a01b031614611c015760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33611c2b611496565b6001600160a01b031614611c515760405162461bcd60e51b8152600401610a6f90613760565b60075460ff1615611cb25760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610a6f565b60058110611d105760405162461bcd60e51b815260206004820152602560248201527f446561646c696e652073686f756c64206265206c657373207468616e203520426044820152646c6f636b7360d81b6064820152608401610a6f565b601555565b33611d1e611496565b6001600160a01b031614611d445760405162461bcd60e51b8152600401610a6f90613760565b6001600160a01b038116611da95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6f565b611db28161273d565b50565b33611dbe611496565b6001600160a01b031614611de45760405162461bcd60e51b8152600401610a6f90613760565b60058183611df28688613960565b611dfc9190613960565b611e069190613960565b1115611e245760405162461bcd60e51b8152600401610a6f906139d2565b6040805160808101825285815260208082018690528183018590526060909101839052601e869055601f8590558390556021829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b6001600160a01b038316611ee85760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6f565b6001600160a01b038216611f495760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166120005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a6f565b80600e60008282546120129190613960565b90915550506001600160a01b038216600081815260096020908152604080832080548601905551848152600080516020613afa833981519152910160405180910390a35050565b6001600160a01b0383166120bd5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6f565b6001600160a01b03821661211f5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6f565b600081116121815760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a6f565b61218a836113fc565b8111156121f35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a6f565b6001600160a01b03831660009081526004602052604090205460ff1615801561223557506001600160a01b03821660009081526004602052604090205460ff16155b156122815760075460ff166122815760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610a6f565b600d546001600160a01b0384811691161480156122b757506001600160a01b03821660009081526004602052604090205460ff16155b80156122cc575060075462010000900460ff16155b15612358576011548111156123235760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610a6f565b60135481612330846113fc565b61233a9190613960565b11156123585760405162461bcd60e51b8152600401610a6f90613a08565b600d546001600160a01b0384811691161480159061238f57506001600160a01b03821660009081526004602052604090205460ff16155b80156123b457506001600160a01b03831660009081526004602052604090205460ff16155b80156123c9575060075462010000900460ff16155b156124fc576012548111156124205760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610a6f565b600d546001600160a01b0383811691161461246a5760135481612442846113fc565b61244c9190613960565b111561246a5760405162461bcd60e51b8152600401610a6f90613a08565b600a5460ff16156124fc576001600160a01b03831660009081526008602052604081205461249890426138e6565b9050600b548110156124df5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610a6f565b506001600160a01b03831660009081526008602052604090204290555b600060105461250a306113fc565b600754911115915062010000900460ff1615801561252f5750600754610100900460ff165b80156125385750805b80156125525750600d546001600160a01b03858116911614155b801561257757506001600160a01b03841660009081526004602052604090205460ff16155b801561259c57506001600160a01b03831660009081526004602052604090205460ff16155b1561262a57600d546001600160a01b03908116908416036125f45760105460408051608081018252601e548152601f54602080830191909152549181019190915260215460608201526125ef919061278d565b61262a565b60105460408051608081018252601a548152601b546020820152601c5491810191909152601d54606082015261262a919061278d565b60075460019060009062010000900460ff168061265f57506001600160a01b03861660009081526004602052604090205460ff165b8061268257506001600160a01b03851660009081526004602052604090205460ff165b1561268c57600091505b600d546001600160a01b03908116908616036126a6575060015b6126b386868685856128f6565b505050505050565b60008060006126c8612bff565b90925090506126d781836138f9565b9250505090565b6126e66133f3565b6126f285858585612d82565b90506127078186866127026126bb565b612f33565b6080860152606085015260408401526020830152815261272f818561272a6126bb565b612fe2565b60a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805462ff0000191662010000179055606081015160208201516040830151600092916127ba91613960565b6127c49190613960565b6127cf9060026138cf565b9050806000036127df57506128e6565b6000818360400151856127f291906138cf565b6127fc91906138f9565b9050600061280a82866138e6565b90504761281682613002565b600061282282476138e6565b9050600086604001518661283691906138e6565b61284090836138f9565b9050600087604001518261285491906138cf565b90508015612866576128668682613154565b60208801516000906128798460026138cf565b61288391906138cf565b905080156128a1576017546128a1906001600160a01b031682613208565b60608901516000906128b48560026138cf565b6128be91906138cf565b905080156128dc576018546128dc906001600160a01b031682613208565b5050505050505050505b50506007805462ff000019169055565b6001600160a01b03851660009081526004602052604081205460ff1615801561293857506001600160a01b03851660009081526004602052604090205460ff16155b8015612952575060155460145461294f9190613960565b43105b90506000612962858585856126de565b6001600160a01b03881660009081526005602052604090205490915060ff16156129c4576001600160a01b0387166000908152600260205260409020546129aa9086906138e6565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff1615612a275760c08101516001600160a01b038716600090815260026020526040902054612a0d9190613960565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b038816600090815260016020526040902054612a4c91906138e6565b6001600160a01b0380891660009081526001602090815260408083209490945584015191891681529190912054612a839190613960565b6001600160a01b0387166000908152600160205260409081902091909155810151151580612ab5575060008160e00151115b15612acc57612acc81604001518260e0015161331e565b600081608001511180612ae457506000816101200151115b15612b5757612afc8160800151826101200151613353565b306001600160a01b0316876001600160a01b0316600080516020613afa833981519152836101400151846101000151856101200151612b3b9190613960565b612b459190613960565b60405190815260200160405180910390a35b600081606001511180612b6f57506000816101000151115b15612b8757612b8781606001518261010001516133c9565b60008160a001511180612b9f57506000816101400151115b15612bb757612bb78160a001518261014001516133de565b856001600160a01b0316876001600160a01b0316600080516020613afa8339815191528360c00151604051612bee91815260200190565b60405180910390a350505050505050565b600f54600e546000918291825b600654811015612d5157826001600060068481548110612c2e57612c2e61391b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c995750816002600060068481548110612c7257612c7261391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612caf57600f54600e54945094505050509091565b6001600060068381548110612cc657612cc661391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cf590846138e6565b92506002600060068381548110612d0e57612d0e61391b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d3d90836138e6565b915080612d4981613947565b915050612c0c565b50600e54600f54612d6291906138f9565b821015612d7957600f54600e549350935050509091565b90939092509050565b612d8a6133f3565b83612d9b5760c08101859052612735565b612dc66040518060800160405280600081526020016000815260200160008152602001600081525090565b838015612dd1575082155b15612e07575060408051608081018252601e548152601f5460208083019190915254918101919091526021546060820152612e66565b82612e3b575060408051608081018252601a548152601b546020820152601c5491810191909152601d546060820152612e66565b5060408051608081018252602254815260235460208201526024549181019190915260255460608201525b8051606490612e7590886138cf565b612e7f91906138f9565b60e08301526020810151606490612e9690886138cf565b612ea091906138f9565b6101008301526040810151606490612eb890886138cf565b612ec291906138f9565b6101208301526060810151606490612eda90886138cf565b612ee491906138f9565b610140830181905261012083015161010084015160e0850151612f07908a6138e6565b612f1191906138e6565b612f1b91906138e6565b612f2591906138e6565b60c083015250949350505050565b600080808080612f4386896138cf565b945086612f5b57508392506000915081905080612fd7565b858960e00151612f6b91906138cf565b925085896101000151612f7e91906138cf565b915085896101200151612f9191906138cf565b90506000868a6101400151612fa691906138cf565b9050808284612fb5878a6138e6565b612fbf91906138e6565b612fc991906138e6565b612fd391906138e6565b9450505b945094509450945094565b600082612ff157506000610d08565b8184610140015161273591906138cf565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130375761303761391b565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b49190613a3d565b816001815181106130c7576130c761391b565b6001600160a01b039283166020918202929092010152600c546130ed9130911684611e86565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613126908590600090869030904290600401613a5a565b600060405180830381600087803b15801561314057600080fd5b505af11580156126b3573d6000803e3d6000fd5b600c5461316c9030906001600160a01b031684611e86565b600c5460165460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132019190613acb565b5050505050565b804710156132585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a6f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132a5576040519150601f19603f3d011682016040523d82523d6000602084013e6132aa565b606091505b505090508061153b5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610a6f565b81600f600082825461333091906138e6565b90915550506026805482919060009061334a908490613960565b90915550505050565b80602660020160008282546133689190613960565b90915550503060009081526005602052604090205460ff16156133aa5730600090815260026020526040812080548392906133a4908490613960565b90915550505b306000908152600160205260408120805484929061334a908490613960565b80602660010160008282546133689190613960565b80602660030160008282546133689190613960565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561347a5785810183015185820160400152820161345e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611db257600080fd5b80356134bb8161349b565b919050565b600080604083850312156134d357600080fd5b82356134de8161349b565b946020939093013593505050565b60008060006060848603121561350157600080fd5b833561350c8161349b565b9250602084013561351c8161349b565b929592945050506040919091013590565b60006020828403121561353f57600080fd5b5035919050565b60006020828403121561355857600080fd5b8135610d088161349b565b8015158114611db257600080fd5b80356134bb81613563565b6000806040838503121561358f57600080fd5b8235915060208301356135a181613563565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156135d557600080fd5b823567ffffffffffffffff808211156135ed57600080fd5b818501915085601f83011261360157600080fd5b8135602082821115613615576136156135ac565b8160051b604051601f19603f8301168101818110868211171561363a5761363a6135ac565b60405292835281830193508481018201928984111561365857600080fd5b948201945b8386101561367d5761366e866134b0565b8552948201949382019361365d565b965061368c9050878201613571565b9450505050509250929050565b6000602082840312156136ab57600080fd5b8135610d0881613563565b600080600080608085870312156136cc57600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156136fb57600080fd5b82356137068161349b565b915060208301356135a18161349b565b60008060006060848603121561372b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561375557600080fd5b82356134de81613563565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260179082015276135a5b9d1a5b99c81b9bdd081e595d081cdd185c9d1959604a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156138175781600019048211156137fd576137fd6137c6565b8085161561380a57918102915b93841c93908002906137e1565b509250929050565b60008261382e57506001610a3a565b8161383b57506000610a3a565b8160018114613851576002811461385b57613877565b6001915050610a3a565b60ff84111561386c5761386c6137c6565b50506001821b610a3a565b5060208310610133831016604e8410600b841016171561389a575081810a610a3a565b6138a483836137dc565b80600019048211156138b8576138b86137c6565b029392505050565b6000610d0860ff84168361381f565b8082028115828204841417610a3a57610a3a6137c6565b81810381811115610a3a57610a3a6137c6565b60008261391657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201613959576139596137c6565b5060010190565b80820180821115610a3a57610a3a6137c6565b60006020828403121561398557600080fd5b8151610d0881613563565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601c908201527b4d757374206b6565702066656573206174203525206f72206c65737360201b604082015260600190565b6020808252818101527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604082015260600190565b600060208284031215613a4f57600080fd5b8151610d088161349b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613aaa5784516001600160a01b031683529383019391830191600101613a85565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ae057600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204807f97eeba553ac45837263e2102a2807abf5807ef846f39bb2baee02c88ef264736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

3388:24457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8662:83;;;;;;;;;;-1:-1:-1;8732:5:0;;;;;;;;;;;;-1:-1:-1;;;8732:5:0;;;;8662:83;;;;;;;:::i;:::-;;;;;;;;9422:161;;;;;;;;;;-1:-1:-1;9422:161:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;9422:161:0;1162:187:1;7696:596:0;;;;;;;;;;;;;:::i;:::-;;8962:95;;;;;;;;;;-1:-1:-1;9042:7:0;;8962:95;;;1500:25:1;;;1488:2;1473:18;8962:95:0;1354:177:1;11488:215:0;;;;;;;;;;;;;:::i;9591:448::-;;;;;;;;;;-1:-1:-1;9591:448:0;;;;;:::i;:::-;;:::i;4577:28::-;;;;;;;;;;;;;;;;11969:250;;;;;;;;;;-1:-1:-1;11969:250:0;;;;;:::i;:::-;;:::i;8848:83::-;;;;;;;;;;-1:-1:-1;8848:83:0;;4195:2;2324:36:1;;2312:2;2297:18;8848:83:0;2182:184:1;4946:57:0;;;;;;;;;;;;;:::i;12633:473::-;;;;;;;;;;-1:-1:-1;12633:473:0;;;;;:::i;:::-;;:::i;10047:207::-;;;;;;;;;;-1:-1:-1;10047:207:0;;;;;:::i;:::-;;:::i;8492:142::-;;;;;;;;;;;;;:::i;13114:111::-;;;;;;;;;;-1:-1:-1;13114:111:0;;;;;:::i;:::-;;:::i;27266:197::-;;;;;;;;;;-1:-1:-1;27266:197:0;;;;;:::i;:::-;;:::i;10963:517::-;;;;;;;;;;-1:-1:-1;10963:517:0;;;;;:::i;:::-;;:::i;27544:261::-;;;;;;;;;;-1:-1:-1;27544:261:0;;;;;:::i;:::-;;:::i;3800:26::-;;;;;;;;;;-1:-1:-1;3800:26:0;;;;;;;;12293:332;;;;;;;;;;-1:-1:-1;12293:332:0;;;;;:::i;:::-;;:::i;4808:79::-;;;;;;;;;;-1:-1:-1;4808:79:0;;;;-1:-1:-1;;;;;4808:79:0;;;;;;-1:-1:-1;;;;;3357:32:1;;;3339:51;;3327:2;3312:18;4808:79:0;3193:203:1;13351:124:0;;;;;;;;;;-1:-1:-1;13351:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;13440:27:0;13416:4;13440:27;;;:18;:27;;;;;;;;;13351:124;4473:43;;;;;;;;;;;;;;;;4523:45;;;;;;;;;;;;;;;;4424:42;;;;;;;;;;;;;;;;3833:23;;;;;;;;;;-1:-1:-1;3833:23:0;;;;;;;;;;;5040:26;;;;;;;;;;-1:-1:-1;5040:26:0;;;;-1:-1:-1;;;5040:26:0;;;;;;9065:198;;;;;;;;;;-1:-1:-1;9065:198:0;;;;;:::i;:::-;;:::i;1702:94::-;;;;;;;;;;;;;:::i;5348:38::-;;;;;;;;;;-1:-1:-1;5348:38:0;;;;;;;;;;;;;;;;;;;3632:25:1;;;3688:2;3673:18;;3666:34;;;;3716:18;;;3709:34;3774:2;3759:18;;3752:34;3619:3;3604:19;5348:38:0;3401:391:1;4726:75:0;;;;;;;;;;-1:-1:-1;4726:75:0;;;;-1:-1:-1;;;;;4726:75:0;;;4649:70;;;;;;;;;;-1:-1:-1;4649:70:0;;;;-1:-1:-1;;;;;4649:70:0;;;10835:120;;;;;;;;;;-1:-1:-1;10835:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;10927:20:0;10903:4;10927:20;;;:11;:20;;;;;;;;;10835:120;1479:87;;;;;;;;;;;;;:::i;25456:212::-;;;;;;;;;;-1:-1:-1;25456:212:0;;;;;:::i;:::-;;:::i;25879:203::-;;;;;;;;;;-1:-1:-1;25879:203:0;;;;;:::i;:::-;;:::i;26556:102::-;;;;;;;;;;-1:-1:-1;26556:102:0;;;;;:::i;:::-;;:::i;8753:87::-;;;;;;;;;;-1:-1:-1;8825:7:0;;;;;;;;;;;;-1:-1:-1;;;8825:7:0;;;;8753:87;;8300:184;;;;;;;;;;;;;:::i;5644:36::-;;;;;;;;;;-1:-1:-1;5644:36:0;;;;;;;;;;;;;;;13483:364;;;;;;;;;;-1:-1:-1;13483:364:0;;;;;:::i;:::-;;:::i;10262:392::-;;;;;;;;;;-1:-1:-1;10262:392:0;;;;;:::i;:::-;;:::i;4132:19::-;;;;;;;;;;-1:-1:-1;4132:19:0;;;;-1:-1:-1;;;;;4132:19:0;;;10662:165;;;;;;;;;;-1:-1:-1;10662:165:0;;;;;:::i;:::-;;:::i;25676:195::-;;;;;;;;;;-1:-1:-1;25676:195:0;;;;;:::i;:::-;;:::i;26323:225::-;;;;;;;;;;-1:-1:-1;26323:225:0;;;;;:::i;:::-;;:::i;4055:40::-;;;;;;;;;;;;;;;;9271:143;;;;;;;;;;-1:-1:-1;9271:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9379:18:0;;;9352:7;9379:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9271:143;5073:30;;;;;;;;;;;;;;;;26666:528;;;;;;;;;;-1:-1:-1;26666:528:0;;;;;:::i;:::-;;:::i;4369:48::-;;;;;;;;;;;;;;;;26090:225;;;;;;;;;;-1:-1:-1;26090:225:0;;;;;:::i;:::-;;:::i;13233:110::-;;;;;;;;;;-1:-1:-1;13233:110:0;;;;;:::i;:::-;;:::i;11711:250::-;;;;;;;;;;-1:-1:-1;11711:250:0;;;;;:::i;:::-;;:::i;4014:34::-;;;;;;;;;;-1:-1:-1;4014:34:0;;;;;;;;1804:192;;;;;;;;;;-1:-1:-1;1804:192:0;;;;;:::i;:::-;;:::i;13855:372::-;;;;;;;;;;-1:-1:-1;13855:372:0;;;;;:::i;:::-;;:::i;5393:42::-;;;;;;;;;;-1:-1:-1;5393:42:0;;;;;;;;;;;;;;;4104:21;;;;;;;;;;-1:-1:-1;4104:21:0;;;;-1:-1:-1;;;;;4104:21:0;;;9422:161;9497:4;9514:39;980:10;9537:7;9546:6;9514:8;:39::i;:::-;-1:-1:-1;9571:4:0;9422:161;;;;;:::o;7696:596::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;;;;;;;;;7755:14:::1;::::0;-1:-1:-1;;;7755:14:0;::::1;;;7747:50;;;;-1:-1:-1::0;;;7747:50:0::1;;;;;;;:::i;:::-;4990:13;4195:2;4990;:13;:::i;:::-;4983:20;::::0;:4:::1;:20;:::i;:::-;7816:7;;:20;7808:51;;;::::0;-1:-1:-1;;;7808:51:0;;9615:2:1;7808:51:0::1;::::0;::::1;9597:21:1::0;9654:2;9634:18;;;9627:30;-1:-1:-1;;;9673:18:1;;;9666:48;9731:18;;7808:51:0::1;9413:342:1::0;7808:51:0::1;7893:15;;7878:12;:30;7870:62;;;::::0;-1:-1:-1;;;7870:62:0;;9962:2:1;7870:62:0::1;::::0;::::1;9944:21:1::0;10001:2;9981:18;;;9974:30;-1:-1:-1;;;10020:18:1;;;10013:49;10079:18;;7870:62:0::1;9760:343:1::0;7870:62:0::1;7945:17;7980:15;;7965:12;:30;;;;:::i;:::-;7945:50:::0;-1:-1:-1;8006:20:0::1;8029:23;7945:50:::0;8042:9:::1;8029:23;:::i;:::-;8006:46;;8063:17;8096:7;;4195:2;4990;:13;;;;:::i;:::-;4983:20;::::0;:4:::1;:20;:::i;:::-;8083;;;;:::i;:::-;8063:40;;8133:9;8118:12;:24;8114:81;;;8174:9;8159:24;;8114:81;8213:15;::::0;8207:36:::1;::::0;-1:-1:-1;;;;;8213:15:0::1;8230:12:::0;8207:5:::1;:36::i;:::-;-1:-1:-1::0;;8272:12:0::1;8254:15;:30:::0;-1:-1:-1;7696:596:0:o;11488:215::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;11552:14:::1;::::0;::::1;;11551:15;11543:52;;;::::0;-1:-1:-1;;;11543:52:0;;10443:2:1;11543:52:0::1;::::0;::::1;10425:21:1::0;10482:2;10462:18;;;10455:30;-1:-1:-1;;;10501:18:1;;;10494:54;10565:18;;11543:52:0::1;10241:348:1::0;11543:52:0::1;11606:14;:21:::0;;-1:-1:-1;;11638:18:0;;;;;11683:12:::1;11667:13;:28:::0;11488:215::o;9591:448::-;9723:4;9740:36;9750:6;9758:9;9769:6;9740:9;:36::i;:::-;-1:-1:-1;;;;;9816:19:0;;9789:24;9816:19;;;:11;:19;;;;;;;;980:10;9816:33;;;;;;;;9868:26;;;;9860:79;;;;-1:-1:-1;;;9860:79:0;;10796:2:1;9860:79:0;;;10778:21:1;10835:2;10815:18;;;10808:30;10874:34;10854:18;;;10847:62;-1:-1:-1;;;10925:18:1;;;10918:38;10973:19;;9860:79:0;10594:404:1;9860:79:0;9950:57;9959:6;980:10;9981:25;10000:6;9981:16;:25;:::i;:::-;9950:8;:57::i;:::-;10027:4;10020:11;;;9591:448;;;;;;:::o;11969:250::-;12036:7;12075;;12064;:18;;12056:73;;;;-1:-1:-1;;;12056:73:0;;11205:2:1;12056:73:0;;;11187:21:1;11244:2;11224:18;;;11217:30;11283:34;11263:18;;;11256:62;-1:-1:-1;;;11334:18:1;;;11327:40;11384:19;;12056:73:0;11003:406:1;12056:73:0;12140:19;12162:10;:8;:10::i;:::-;12140:32;-1:-1:-1;12190:21:0;12140:32;12190:7;:21;:::i;4946:57::-;4990:13;4195:2;4990;:13;:::i;:::-;4983:20;;:4;:20;:::i;:::-;4946:57;:::o;12633:473::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12713:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12705:56;;;::::0;-1:-1:-1;;;12705:56:0;;11838:2:1;12705:56:0::1;::::0;::::1;11820:21:1::0;11877:2;11857:18;;;11850:30;-1:-1:-1;;;11896:18:1;;;11889:53;11959:18;;12705:56:0::1;11636:347:1::0;12705:56:0::1;12777:9;12772:327;12796:9;:16:::0;12792:20;::::1;12772:327;;;12854:7;-1:-1:-1::0;;;;;12838:23:0::1;:9;12848:1;12838:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;12838:12:0::1;:23:::0;12834:254:::1;;12897:9;12907:16:::0;;:20:::1;::::0;12926:1:::1;::::0;12907:20:::1;:::i;:::-;12897:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;12882:9:::1;:12:::0;;-1:-1:-1;;;;;12897:31:0;;::::1;::::0;12892:1;;12882:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;12882:46:0::1;-1:-1:-1::0;;;;;12882:46:0;;::::1;;::::0;;12947:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;12986:11:::1;:20:::0;;;;:28;;-1:-1:-1;;12986:28:0::1;::::0;;13033:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;13033:15:0;;;;;-1:-1:-1;;;;;;13033:15:0::1;::::0;;;;;12772:327:::1;12633:473:::0;:::o;12834:254::-:1;12814:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12772:327;;;;12633:473:::0;:::o;10047:207::-;980:10;10127:4;10176:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10176:34:0;;;;;;;;;;10127:4;;10144:80;;10167:7;;10176:47;;10213:10;;10176:47;:::i;8492:142::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;8551:14:::1;::::0;-1:-1:-1;;;8551:14:0;::::1;;;8543:50;;;;-1:-1:-1::0;;;8543:50:0::1;;;;;;;:::i;:::-;8604:14;:22:::0;;-1:-1:-1;;;;8604:22:0::1;::::0;;8492:142::o;13114:111::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13183:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;13183:34:0::1;13213:4;13183:34;::::0;;13114:111::o;27266:197::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;27367:9:::1;27342:21;:34;;27334:71;;;::::0;-1:-1:-1;;;27334:71:0;;12724:2:1;27334:71:0::1;::::0;::::1;12706:21:1::0;12763:2;12743:18;;;12736:30;-1:-1:-1;;;12782:18:1;;;12775:54;12846:18;;27334:71:0::1;12522:348:1::0;27334:71:0::1;27416:39;::::0;27424:10:::1;::::0;27416:39;::::1;;;::::0;27445:9;;27416:39:::1;::::0;;;27445:9;27424:10;27416:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;10963:517:::0;11081:7;11125;;11114;:18;;11106:62;;;;-1:-1:-1;;;11106:62:0;;13077:2:1;11106:62:0;;;13059:21:1;13116:2;13096:18;;;13089:30;13155:33;13135:18;;;13128:61;13206:18;;11106:62:0;12875:355:1;11106:62:0;11184:17;11179:294;;11218:28;11249:39;11260:7;11269:4;11275:5;11282;11249:10;:39::i;:::-;11310:9;;-1:-1:-1;11303:16:0;;-1:-1:-1;11303:16:0;11179:294;11352:28;11383:39;11394:7;11403:4;11409:5;11416;11383:10;:39::i;:::-;11444:17;;;;-1:-1:-1;11437:24:0;;-1:-1:-1;11437:24:0;27544:261;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;27681:4:::1;-1:-1:-1::0;;;;;27659:27:0;::::1;::::0;27651:94:::1;;;::::0;-1:-1:-1;;;27651:94:0;;13437:2:1;27651:94:0::1;::::0;::::1;13419:21:1::0;13476:2;13456:18;;;13449:30;13515:34;13495:18;;;13488:62;-1:-1:-1;;;13566:18:1;;;13559:52;13628:19;;27651:94:0::1;13235:418:1::0;27651:94:0::1;27756:41;::::0;-1:-1:-1;;;27756:41:0;;-1:-1:-1;;;;;13850:32:1;;;27756:41:0::1;::::0;::::1;13832:51:1::0;13899:18;;;13892:34;;;27756:27:0;::::1;::::0;::::1;::::0;13805:18:1;;27756:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27544:261:::0;;;:::o;12293:332::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12374:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12373:21;12365:61;;;::::0;-1:-1:-1;;;12365:61:0;;14389:2:1;12365:61:0::1;::::0;::::1;14371:21:1::0;14428:2;14408:18;;;14401:30;-1:-1:-1;;;14447:18:1;;;14440:57;14514:18;;12365:61:0::1;14187:351:1::0;12365:61:0::1;-1:-1:-1::0;;;;;12441:16:0;::::1;12460:1;12441:16:::0;;;:7:::1;:16;::::0;;;;;:20;12437:109:::1;;-1:-1:-1::0;;;;;12517:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;12497:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;12478:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;12437:109:::1;-1:-1:-1::0;;;;;12556:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12556:27:0::1;12579:4;12556:27:::0;;::::1;::::0;;;12594:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12594:23:0::1;::::0;;::::1;::::0;;12293:332::o;9065:198::-;-1:-1:-1;;;;;9155:20:0;;9131:7;9155:20;;;:11;:20;;;;;;;;9151:49;;;-1:-1:-1;;;;;;9184:16:0;;;;;:7;:16;;;;;;;9065:198::o;9151:49::-;-1:-1:-1;;;;;9238:16:0;;;;;;:7;:16;;;;;;9218:37;;:19;:37::i;1702:94::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;1767:21:::1;1785:1;1767:9;:21::i;:::-;1702:94::o:0;1479:87::-;1525:7;1552:6;-1:-1:-1;;;;;1552:6:0;;1479:87::o;25456:212::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;25554:9:::1;25549:112;25573:8;:15;25569:1;:19;25549:112;;;25644:5;25610:18;:31;25629:8;25638:1;25629:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25610:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25610:31:0;:39;;-1:-1:-1;;25610:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25590:3;::::1;::::0;::::1;:::i;:::-;;;;25549:112;;;;25456:212:::0;;:::o;25879:203::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25971:23:0;::::1;25963:69;;;;-1:-1:-1::0;;;25963:69:0::1;;;;;;;:::i;:::-;26043:19;:31:::0;;-1:-1:-1;;;;;;26043:31:0::1;-1:-1:-1::0;;;;;26043:31:0;;;::::1;::::0;;;::::1;::::0;;25879:203::o;26556:102::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;26628:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;26628:22:0;;::::1;::::0;;;::::1;::::0;;26556:102::o;8300:184::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;8361:14:::1;::::0;-1:-1:-1;;;8361:14:0;::::1;;;8360:15;8352:51;;;::::0;-1:-1:-1;;;8352:51:0;;15148:2:1;8352:51:0::1;::::0;::::1;15130:21:1::0;15187:2;15167:18;;;15160:30;-1:-1:-1;;;15206:18:1;;;15199:53;15269:18;;8352:51:0::1;14946:347:1::0;8352:51:0::1;8414:14;:21:::0;;-1:-1:-1;;;;8414:21:0::1;-1:-1:-1::0;;;8414:21:0::1;::::0;;8464:12:::1;8446:15;:30:::0;8300:184::o;13483:364::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;13708:1:::1;13690:12:::0;13677:10;13657:17:::1;13664:10:::0;13657:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:45;;;;:::i;:::-;13656:53;;13648:94;;;;-1:-1:-1::0;;;13648:94:0::1;;;;;;;:::i;:::-;13761:49;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;13753:5:::1;:57:::0;;;;;;;;;;;;;;;13826:13;::::1;::::0;-1:-1:-1;;13826:13:0::1;13483:364:::0;;;;:::o;10262:392::-;980:10;10365:4;10414:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10414:34:0;;;;;;;;;;10467:35;;;;10459:85;;;;-1:-1:-1;;;10459:85:0;;15857:2:1;10459:85:0;;;15839:21:1;15896:2;15876:18;;;15869:30;15935:34;15915:18;;;15908:62;-1:-1:-1;;;15986:18:1;;;15979:35;16031:19;;10459:85:0;15655:401:1;10459:85:0;10555:67;980:10;10578:7;10587:34;10606:15;10587:16;:34;:::i;10555:67::-;-1:-1:-1;10642:4:0;;10262:392;-1:-1:-1;;;10262:392:0:o;10662:165::-;10740:4;10757:40;10767:10;10779:9;10790:6;10757:9;:40::i;25676:195::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25764:23:0;::::1;25756:69;;;;-1:-1:-1::0;;;25756:69:0::1;;;;;;;:::i;:::-;25836:15;:27:::0;;-1:-1:-1;;;;;;25836:27:0::1;-1:-1:-1::0;;;;;25836:27:0;;;::::1;::::0;;;::::1;::::0;;25676:195::o;26323:225::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;26421:3:::1;26411:6;:13;;26403:83;;;::::0;-1:-1:-1;;;26403:83:0;;16263:2:1;26403:83:0::1;::::0;::::1;16245:21:1::0;16302:2;16282:18;;;16275:30;16341:34;16321:18;;;16314:62;-1:-1:-1;;;16392:18:1;;;16385:55;16457:19;;26403:83:0::1;16061:421:1::0;26403:83:0::1;26527:13;4195:2;26527;:13;:::i;:::-;26518:22;::::0;:6;:22:::1;:::i;:::-;26497:18;:43:::0;-1:-1:-1;26323:225:0:o;26666:528::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;26792:3:::1;26782:6;:13;;26774:77;;;::::0;-1:-1:-1;;;26774:77:0;;16689:2:1;26774:77:0::1;::::0;::::1;16671:21:1::0;16728:2;16708:18;;;16701:30;16767:34;16747:18;;;16740:62;-1:-1:-1;;;16818:18:1;;;16811:49;16877:19;;26774:77:0::1;16487:415:1::0;26774:77:0::1;26881:3;26870:7;:14;;26862:80;;;::::0;-1:-1:-1;;;26862:80:0;;17109:2:1;26862:80:0::1;::::0;::::1;17091:21:1::0;17148:2;17128:18;;;17121:30;17187:34;17167:18;;;17160:62;-1:-1:-1;;;17238:18:1;;;17231:51;17299:19;;26862:80:0::1;16907:417:1::0;26862:80:0::1;26974:3;26961:9;:16;;26953:81;;;::::0;-1:-1:-1;;;26953:81:0;;17531:2:1;26953:81:0::1;::::0;::::1;17513:21:1::0;17570:2;17550:18;;;17543:30;17609:34;17589:18;;;17582:62;-1:-1:-1;;;17660:18:1;;;17653:50;17720:19;;26953:81:0::1;17329:416:1::0;26953:81:0::1;27068:14;4195:2:::0;27068::::1;:14;:::i;:::-;27059:23;::::0;:6;:23:::1;:::i;:::-;27045:11;:37:::0;27118:14:::1;4195:2:::0;27118::::1;:14;:::i;:::-;27108:24;::::0;:7;:24:::1;:::i;:::-;27093:12;:39:::0;27176:10:::1;4195:2:::0;;8848:83;27176:10:::1;27172:14;::::0;:2:::1;:14;:::i;:::-;27160:26;::::0;:9;:26:::1;:::i;:::-;27143:14;:43:::0;-1:-1:-1;;;26666:528:0:o;26090:225::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;26186:2:::1;26178:4;:10;;26170:61;;;::::0;-1:-1:-1;;;26170:61:0;;17952:2:1;26170:61:0::1;::::0;::::1;17934:21:1::0;17991:2;17971:18;;;17964:30;18030:34;18010:18;;;18003:62;-1:-1:-1;;;18081:18:1;;;18074:36;18127:19;;26170:61:0::1;17750:402:1::0;26170:61:0::1;26257:16;:4:::0;26264:9:::1;26257:16;:::i;:::-;26242:12;:31:::0;-1:-1:-1;26284:15:0::1;:23:::0;;-1:-1:-1;;26284:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26090:225::o;13233:110::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13300:27:0::1;13330:5;13300:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;13300:35:0::1;::::0;;13233:110::o;11711:250::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;11793:14:::1;::::0;::::1;;11792:15;11784:65;;;::::0;-1:-1:-1;;;11784:65:0;;18359:2:1;11784:65:0::1;::::0;::::1;18341:21:1::0;18398:2;18378:18;;;18371:30;18437:34;18417:18;;;18410:62;-1:-1:-1;;;18488:18:1;;;18481:35;18533:19;;11784:65:0::1;18157:401:1::0;11784:65:0::1;11880:1;11868:9;:13;11860:62;;;::::0;-1:-1:-1;;;11860:62:0;;18765:2:1;11860:62:0::1;::::0;::::1;18747:21:1::0;18804:2;18784:18;;;18777:30;18843:34;18823:18;;;18816:62;-1:-1:-1;;;18894:18:1;;;18887:35;18939:19;;11860:62:0::1;18563:401:1::0;11860:62:0::1;11933:8;:20:::0;11711:250::o;1804:192::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1893:22:0;::::1;1885:73;;;::::0;-1:-1:-1;;;1885:73:0;;19171:2:1;1885:73:0::1;::::0;::::1;19153:21:1::0;19210:2;19190:18;;;19183:30;19249:34;19229:18;;;19222:62;-1:-1:-1;;;19300:18:1;;;19293:36;19346:19;;1885:73:0::1;18969:402:1::0;1885:73:0::1;1969:19;1979:8;1969:9;:19::i;:::-;1804:192:::0;:::o;13855:372::-;980:10;1614:7;:5;:7::i;:::-;-1:-1:-1;;;;;1614:23:0;;1606:68;;;;-1:-1:-1;;;1606:68:0;;;;;;;:::i;:::-;14084:1:::1;14066:12:::0;14053:10;14033:17:::1;14040:10:::0;14033:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:45;;;;:::i;:::-;14032:53;;14024:94;;;;-1:-1:-1::0;;;14024:94:0::1;;;;;;;:::i;:::-;14141:49;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;14129:9:::1;:61:::0;;;;;;;;;;;;;;14206:13;::::1;::::0;-1:-1:-1;;14206:13:0::1;13855:372:::0;;;;:::o;18866:369::-;-1:-1:-1;;;;;18993:19:0;;18985:68;;;;-1:-1:-1;;;18985:68:0;;19578:2:1;18985:68:0;;;19560:21:1;19617:2;19597:18;;;19590:30;19656:34;19636:18;;;19629:62;-1:-1:-1;;;19707:18:1;;;19700:34;19751:19;;18985:68:0;19376:400:1;18985:68:0;-1:-1:-1;;;;;19072:21:0;;19064:68;;;;-1:-1:-1;;;19064:68:0;;19983:2:1;19064:68:0;;;19965:21:1;20022:2;20002:18;;;19995:30;20061:34;20041:18;;;20034:62;-1:-1:-1;;;20112:18:1;;;20105:32;20154:19;;19064:68:0;19781:398:1;19064:68:0;-1:-1:-1;;;;;19143:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19195:32;;1500:25:1;;;19195:32:0;;1473:18:1;19195:32:0;;;;;;;18866:369;;;:::o;6994:432::-;-1:-1:-1;;;;;7078:21:0;;7070:65;;;;-1:-1:-1;;;7070:65:0;;20386:2:1;7070:65:0;;;20368:21:1;20425:2;20405:18;;;20398:30;20464:33;20444:18;;;20437:61;20515:18;;7070:65:0;20184:355:1;7070:65:0;7221:6;7210:7;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7265:18:0;;;;;;:9;:18;;;;;;;;:28;;;;;;7320:37;1500:25:1;;;-1:-1:-1;;;;;;;;;;;7320:37:0;1473:18:1;7320:37:0;;;;;;;12772:327:::1;12633:473:::0;:::o;19243:2293::-;-1:-1:-1;;;;;19365:18:0;;19357:68;;;;-1:-1:-1;;;19357:68:0;;20746:2:1;19357:68:0;;;20728:21:1;20785:2;20765:18;;;20758:30;20824:34;20804:18;;;20797:62;-1:-1:-1;;;20875:18:1;;;20868:35;20920:19;;19357:68:0;20544:401:1;19357:68:0;-1:-1:-1;;;;;19444:16:0;;19436:64;;;;-1:-1:-1;;;19436:64:0;;21152:2:1;19436:64:0;;;21134:21:1;21191:2;21171:18;;;21164:30;21230:34;21210:18;;;21203:62;-1:-1:-1;;;21281:18:1;;;21274:33;21324:19;;19436:64:0;20950:399:1;19436:64:0;19528:1;19519:6;:10;19511:64;;;;-1:-1:-1;;;19511:64:0;;21556:2:1;19511:64:0;;;21538:21:1;21595:2;21575:18;;;21568:30;21634:34;21614:18;;;21607:62;-1:-1:-1;;;21685:18:1;;;21678:39;21734:19;;19511:64:0;21354:405:1;19511:64:0;19618:15;19628:4;19618:9;:15::i;:::-;19608:6;:25;;19586:124;;;;-1:-1:-1;;;19586:124:0;;21966:2:1;19586:124:0;;;21948:21:1;22005:2;21985:18;;;21978:30;22044:34;22024:18;;;22017:62;-1:-1:-1;;;22095:18:1;;;22088:47;22152:19;;19586:124:0;21764:413:1;19586:124:0;-1:-1:-1;;;;;19728:24:0;;;;;;:18;:24;;;;;;;;19727:25;:52;;;;-1:-1:-1;;;;;;19757:22:0;;;;;;:18;:22;;;;;;;;19756:23;19727:52;19723:130;;;19804:14;;;;19796:45;;;;-1:-1:-1;;;19796:45:0;;22384:2:1;19796:45:0;;;22366:21:1;22423:2;22403:18;;;22396:30;-1:-1:-1;;;22442:18:1;;;22435:48;22500:18;;19796:45:0;22182:342:1;19796:45:0;19877:4;;-1:-1:-1;;;;;19869:12:0;;;19877:4;;19869:12;:39;;;;-1:-1:-1;;;;;;19886:22:0;;;;;;:18;:22;;;;;;;;19885:23;19869:39;:52;;;;-1:-1:-1;19913:8:0;;;;;;;19912:9;19869:52;19865:297;;;19956:11;;19946:6;:21;;19938:63;;;;-1:-1:-1;;;19938:63:0;;22731:2:1;19938:63:0;;;22713:21:1;22770:2;22750:18;;;22743:30;22809:31;22789:18;;;22782:59;22858:18;;19938:63:0;22529:353:1;19938:63:0;20068:14;;20058:6;20042:13;20052:2;20042:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20016:134;;;;-1:-1:-1;;;20016:134:0;;;;;;;:::i;:::-;20200:4;;-1:-1:-1;;;;;20192:12:0;;;20200:4;;20192:12;;;;:39;;-1:-1:-1;;;;;;20209:22:0;;;;;;:18;:22;;;;;;;;20208:23;20192:39;:68;;;;-1:-1:-1;;;;;;20236:24:0;;;;;;:18;:24;;;;;;;;20235:25;20192:68;:81;;;;-1:-1:-1;20265:8:0;;;;;;;20264:9;20192:81;20174:664;;;20318:12;;20308:6;:22;;20300:65;;;;-1:-1:-1;;;20300:65:0;;23450:2:1;20300:65:0;;;23432:21:1;23489:2;23469:18;;;23462:30;23528:32;23508:18;;;23501:60;23578:18;;20300:65:0;23248:354:1;20300:65:0;20390:4;;-1:-1:-1;;;;;20384:10:0;;;20390:4;;20384:10;20380:197;;20471:14;;20461:6;20445:13;20455:2;20445:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20415:146;;;;-1:-1:-1;;;20415:146:0;;;;;;;:::i;:::-;20595:15;;;;20591:236;;;-1:-1:-1;;;;;20670:15:0;;20631:18;20670:15;;;:9;:15;;;;;;20652:33;;:15;:33;:::i;:::-;20631:54;;20726:12;;20712:10;:26;;20704:55;;;;-1:-1:-1;;;20704:55:0;;23809:2:1;20704:55:0;;;23791:21:1;23848:2;23828:18;;;23821:30;-1:-1:-1;;;23867:18:1;;;23860:46;23923:18;;20704:55:0;23607:340:1;20704:55:0;-1:-1:-1;;;;;;20778:15:0;;;;;;:9;:15;;;;;20796;20778:33;;20591:236;20850:12;20893:18;;20865:24;20883:4;20865:9;:24::i;:::-;20941:8;;-1:-1:-1;;20865:46:0;;-1:-1:-1;20941:8:0;;;;;20940:9;:37;;;;-1:-1:-1;20966:11:0;;;;;;;20940:37;:61;;;;;20994:7;20940:61;:90;;;;-1:-1:-1;21026:4:0;;-1:-1:-1;;;;;21018:12:0;;;21026:4;;21018:12;;20940:90;:132;;;;-1:-1:-1;;;;;;21048:24:0;;;;;;:18;:24;;;;;;;;21047:25;20940:132;:172;;;;-1:-1:-1;;;;;;21090:22:0;;;;;;:18;:22;;;;;;;;21089:23;20940:172;20922:351;;;21149:4;;-1:-1:-1;;;;;21149:4:0;;;21143:10;;;;21139:122;;21170:18;;21155:45;;;;;;;;21190:9;21155:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21170:18;21155:14;:45::i;:::-;21139:122;;;21235:18;;21220:41;;;;;;;;21255:5;21220:41;;;;;;;;;;;;;;;;;;;;;;;;;;21235:18;21220:14;:41::i;:::-;21347:8;;21298:4;;21283:12;;21347:8;;;;;;:36;;-1:-1:-1;;;;;;21359:24:0;;;;;;:18;:24;;;;;;;;21347:36;:62;;;-1:-1:-1;;;;;;21387:22:0;;;;;;:18;:22;;;;;;;;21347:62;21343:83;;;21421:5;21411:15;;21343:83;21447:4;;-1:-1:-1;;;;;21447:4:0;;;21441:10;;;;21437:29;;-1:-1:-1;21462:4:0;21437:29;21479:49;21494:4;21500:2;21504:6;21512:7;21521:6;21479:14;:49::i;:::-;19346:2190;;;19243:2293;;;:::o;18125:161::-;18167:7;18188:15;18205;18224:19;:17;:19::i;:::-;18187:56;;-1:-1:-1;18187:56:0;-1:-1:-1;18261:17:0;18187:56;;18261:17;:::i;:::-;18254:24;;;;18125:161;:::o;15246:678::-;15394:36;;:::i;:::-;15455:51;15467:7;15476;15485:6;15493:12;15455:11;:51::i;:::-;15443:63;;15702:53;15715:9;15726:7;15735;15744:10;:8;:10::i;:::-;15702:12;:53::i;:::-;15668:20;;;15517:238;15633:20;;;15517:238;15604:14;;;15517:238;15564:25;;;15517:238;;;15793:94;15532:9;15844:7;15866:10;:8;:10::i;:::-;15793:12;:94::i;:::-;15767:22;;;15766:121;15246:678;;;;;;;:::o;2004:173::-;2060:16;2079:6;;-1:-1:-1;;;;;2096:17:0;;;-1:-1:-1;;;;;;2096:17:0;;;;;;2129:40;;2079:6;;;;;;;2129:40;;2060:16;2129:40;2049:128;2004:173;:::o;23082:1296::-;6176:8;:15;;-1:-1:-1;;6176:15:0;;;;;23264:16:::1;::::0;::::1;::::0;23234:14:::1;::::0;::::1;::::0;23204::::1;::::0;::::1;::::0;6176:15;;23264:16;23204:44:::1;::::0;::::1;:::i;:::-;:76;;;;:::i;:::-;23203:82;::::0;23284:1:::1;23203:82;:::i;:::-;23181:104;;23302:11;23317:1;23302:16:::0;23298:54:::1;;23334:7;;;23298:54;23364:32;23436:11;23418:4;:14;;;23400:15;:32;;;;:::i;:::-;23399:48;;;;:::i;:::-;23364:83:::0;-1:-1:-1;23458:14:0::1;23475:42;23364:83:::0;23475:15;:42:::1;:::i;:::-;23458:59:::0;-1:-1:-1;23555:21:0::1;23589:24;23458:59:::0;23589:16:::1;:24::i;:::-;23626:20;23649:38;23673:14:::0;23649:21:::1;:38;:::i;:::-;23626:61;;23698:19;23750:4;:14;;;23736:11;:28;;;;:::i;:::-;23720:45;::::0;:12;:45:::1;:::i;:::-;23698:67;;23776:29;23822:4;:14;;;23808:11;:28;;;;:::i;:::-;23776:60:::0;-1:-1:-1;23853:25:0;;23849:160:::1;;23936:61;23949:24;23975:21;23936:12;:61::i;:::-;24062:14;::::0;::::1;::::0;24021:20:::1;::::0;24044:15:::1;:11:::0;24058:1:::1;24044:15;:::i;:::-;:32;;;;:::i;:::-;24021:55:::0;-1:-1:-1;24091:16:0;;24087:97:::1;;24132:15;::::0;24124:48:::1;::::0;-1:-1:-1;;;;;24132:15:0::1;24159:12:::0;24124:34:::1;:48::i;:::-;24239:16;::::0;::::1;::::0;24196:22:::1;::::0;24221:15:::1;:11:::0;24235:1:::1;24221:15;:::i;:::-;:34;;;;:::i;:::-;24196:59:::0;-1:-1:-1;24270:18:0;;24266:105:::1;;24313:19;::::0;24305:54:::1;::::0;-1:-1:-1;;;;;24313:19:0::1;24344:14:::0;24305:38:::1;:54::i;:::-;23170:1208;;;;;;;;;6202:1;-1:-1:-1::0;;6214:8:0;:16;;-1:-1:-1;;6214:16:0;;;23082:1296::o;21617:1457::-;-1:-1:-1;;;;;21812:26:0;;21791:17;21812:26;;;:18;:26;;;;;;;;21811:27;:74;;;;-1:-1:-1;;;;;;21856:29:0;;;;;;:18;:29;;;;;;;;21855:30;21811:74;:130;;;;;21933:8;;21917:13;;:24;;;;:::i;:::-;21902:12;:39;21811:130;21791:150;;21954:28;21985:50;21996:7;22005;22014:6;22022:12;21985:10;:50::i;:::-;-1:-1:-1;;;;;22052:19:0;;;;;;:11;:19;;;;;;21954:81;;-1:-1:-1;22052:19:0;;22048:124;;;-1:-1:-1;;;;;22135:15:0;;;;;;:7;:15;;;;;;:25;;22153:7;;22135:25;:::i;:::-;-1:-1:-1;;;;;22117:15:0;;;;;;:7;:15;;;;;:43;22048:124;-1:-1:-1;;;;;22186:22:0;;;;;;:11;:22;;;;;;;;22182:141;;;22294:17;;;;-1:-1:-1;;;;;22273:18:0;;;;;;:7;:18;;;;;;:38;;22294:17;22273:38;:::i;:::-;-1:-1:-1;;;;;22252:18:0;;;;;;:7;:18;;;;;:59;22182:141;22371:9;;-1:-1:-1;;;;;22353:15:0;;22371:9;22353:15;;;:7;:15;;;;;;:27;;22371:9;22353:27;:::i;:::-;-1:-1:-1;;;;;22335:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;22433:17;;;22412:18;;;;;;;;;;:38;;22433:17;22412:38;:::i;:::-;-1:-1:-1;;;;;22391:18:0;;;;;;:7;:18;;;;;;;:59;;;;22467:6;;;:10;;;:24;;;22490:1;22481;:6;;;:10;22467:24;22463:57;;;22493:27;22505:1;:6;;;22513:1;:6;;;22493:11;:27::i;:::-;22550:1;22535;:12;;;:16;:36;;;;22570:1;22555;:12;;;:16;22535:36;22531:274;;;22588:42;22603:1;:12;;;22617:1;:12;;;22588:14;:42::i;:::-;22710:4;-1:-1:-1;;;;;22650:143:0;22677:6;-1:-1:-1;;;;;22650:143:0;-1:-1:-1;;;;;;;;;;;22764:1:0;:14;;;22749:1;:12;;;22734:1;:12;;;:27;;;;:::i;:::-;:44;;;;:::i;:::-;22650:143;;1500:25:1;;;1488:2;1473:18;22650:143:0;;;;;;;22531:274;22834:1;22819;:12;;;:16;:36;;;;22854:1;22839;:12;;;:16;22819:36;22815:84;;;22857:42;22872:1;:12;;;22886:1;:12;;;22857:14;:42::i;:::-;22931:1;22914;:14;;;:18;:40;;;;22953:1;22936;:14;;;:18;22914:40;22910:94;;;22956:48;22973:1;:14;;;22989:1;:14;;;22956:16;:48::i;:::-;23037:9;-1:-1:-1;;;;;23020:46:0;23029:6;-1:-1:-1;;;;;23020:46:0;-1:-1:-1;;;;;;;;;;;23048:1:0;:17;;;23020:46;;;;1500:25:1;;1488:2;1473:18;;1354:177;23020:46:0;;;;;;;;21780:1294;;21617:1457;;;;;:::o;18294:564::-;18392:7;;18428;;18345;;;;;18446:300;18470:9;:16;18466:20;;18446:300;;;18536:7;18512;:21;18520:9;18530:1;18520:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18520:12:0;18512:21;;;;;;;;;;;;;:31;;:66;;;18571:7;18547;:21;18555:9;18565:1;18555:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18555:12:0;18547:21;;;;;;;;;;;;;:31;18512:66;18508:114;;;18605:7;;18614;;18597:25;;;;;;;18294:564;;:::o;18508:114::-;18657:7;:21;18665:9;18675:1;18665:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18665:12:0;18657:21;;;;;;;;;;;;;18647:31;;:7;:31;:::i;:::-;18637:41;;18713:7;:21;18721:9;18731:1;18721:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;18721:12:0;18713:21;;;;;;;;;;;;;18703:31;;:7;:31;:::i;:::-;18693:41;-1:-1:-1;18488:3:0;;;;:::i;:::-;;;;18446:300;;;;18780:7;;18770;;:17;;;;:::i;:::-;18760:7;:27;18756:58;;;18797:7;;18806;;18789:25;;;;;;18294:564;;:::o;18756:58::-;18833:7;;18842;;-1:-1:-1;18294:564:0;-1:-1:-1;18294:564:0:o;15932:855::-;16081:28;;:::i;:::-;16127:7;16122:91;;16151:17;;;:27;;;16193:8;;16122:91;16223:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16223:17:0;16255:6;:23;;;;;16266:12;16265:13;16255:23;16251:124;;;-1:-1:-1;16280:16:0;;;;;;;;16287:9;16280:16;;;;;;;;;;;;;;;;;;;;;;;;;;;16251:124;;;16317:12;16312:63;;-1:-1:-1;16331:12:0;;;;;;;;16338:5;16331:12;;;;;;;;;;;;;;;;;;;;;;;;16312:63;;;-1:-1:-1;16359:16:0;;;;;;;;16366:9;16359:16;;;;;;;;;;;;;;;;;;;;;;;;16312:63;16408:8;;16420:3;;16398:18;;:7;:18;:::i;:::-;16397:26;;;;:::i;:::-;16388:6;;;:35;16460:14;;;;16478:3;;16450:24;;:7;:24;:::i;:::-;16449:32;;;;:::i;:::-;16434:12;;;:47;16518:14;;;;16536:3;;16508:24;;:7;:24;:::i;:::-;16507:32;;;;:::i;:::-;16492:12;;;:47;16578:16;;;;16598:3;;16568:26;;:7;:26;:::i;:::-;16567:34;;;;:::i;:::-;16550:14;;;:51;;;16718:12;;;;16690;;;;16668:6;;;;16645:29;;:7;:29;:::i;:::-;:57;;;;:::i;:::-;:85;;;;:::i;:::-;:115;;;;:::i;:::-;16612:17;;;:148;-1:-1:-1;15932:855:0;;;;;;:::o;16795:936::-;17005:15;;;;;17189:21;17199:11;17189:7;:21;:::i;:::-;17179:31;;17228:7;17223:75;;-1:-1:-1;17260:7:0;;-1:-1:-1;17278:1:0;;-1:-1:-1;17278:1:0;;-1:-1:-1;17278:1:0;17252:34;;17223:75;17326:11;17317:1;:6;;;:20;;;;:::i;:::-;17310:27;;17376:11;17361:1;:12;;;:26;;;;:::i;:::-;17348:39;;17426:11;17411:1;:12;;;:26;;;;:::i;:::-;17398:39;;17448:20;17488:11;17471:1;:14;;;:28;;;;:::i;:::-;17448:51;-1:-1:-1;17448:51:0;17610:10;17584;17541:27;17564:4;17541:7;:27;:::i;:::-;:53;;;;:::i;:::-;:79;;;;:::i;:::-;:107;;;;:::i;:::-;17510:138;;17660:63;16795:936;;;;;;;;;;:::o;17739:378::-;17923:20;17976:7;17971:51;;-1:-1:-1;18008:1:0;18000:10;;17971:51;18066:11;18049:1;:14;;;:28;;;;:::i;24894:554::-;25036:16;;;25050:1;25036:16;;;;;;;;25012:21;;25036:16;;;;;;;;;;-1:-1:-1;25036:16:0;25012:40;;25081:4;25063;25068:1;25063:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25063:23:0;;;:7;;;;;;;;;;:23;;;;25107:6;;:13;;;-1:-1:-1;;;25107:13:0;;;;:6;;;;;:11;;:13;;;;;25063:7;;25107:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25097:4;25102:1;25097:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25097:23:0;;;:7;;;;;;;;;:23;25165:6;;25133:53;;25150:4;;25165:6;25174:11;25133:8;:53::i;:::-;25225:6;;:215;;-1:-1:-1;;;25225:215:0;;-1:-1:-1;;;;;25225:6:0;;;;:57;;:215;;25297:11;;25225:6;;25367:4;;25394;;25414:15;;25225:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24386:500;24566:6;;24534:53;;24551:4;;-1:-1:-1;;;;;24566:6:0;24575:11;24534:8;:53::i;:::-;24630:6;;24827:10;;24630:248;;-1:-1:-1;;;24630:248:0;;24695:4;24630:248;;;25534:34:1;25584:18;;;25577:34;;;24630:6:0;25627:18:1;;;25620:34;;;25670:18;;;25663:34;-1:-1:-1;;;;;24827:10:0;;;25713:19:1;;;25706:44;24852:15:0;25766:19:1;;;25759:35;24630:6:0;;;:22;;24661:9;;25468:19:1;;24630:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24386:500;;:::o;3062:319::-;3177:6;3152:21;:31;;3144:73;;;;-1:-1:-1;;;3144:73:0;;26318:2:1;3144:73:0;;;26300:21:1;26357:2;26337:18;;;26330:30;26396:31;26376:18;;;26369:59;26445:18;;3144:73:0;26116:353:1;3144:73:0;3231:12;3249:9;-1:-1:-1;;;;;3249:14:0;3272:6;3249:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3230:54;;;3303:7;3295:78;;;;-1:-1:-1;;;3295:78:0;;26886:2:1;3295:78:0;;;26868:21:1;26925:2;26905:18;;;26898:30;26964:34;26944:18;;;26937:62;-1:-1:-1;;;27015:18:1;;;27008:56;27081:19;;3295:78:0;26684:422:1;14235:125:0;14314:4;14303:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;14329:11:0;:23;;14348:4;;14329:11;:15;;:23;;14348:4;;14329:23;:::i;:::-;;;;-1:-1:-1;;;;14235:125:0:o;14368:280::-;14476:10;14451:11;:21;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;14523:4:0;14503:26;;;;:11;:26;;;;;;;;14499:95;;;14562:4;14546:22;;;;:7;:22;;;;;:36;;14572:10;;14546:22;:36;;14572:10;;14546:36;:::i;:::-;;;;-1:-1:-1;;14499:95:0;14620:4;14604:22;;;;:7;:22;;;;;:36;;14630:10;;14604:22;:36;;14630:10;;14604:36;:::i;14656:280::-;14764:10;14739:11;:21;;;:35;;;;;;;:::i;14944:294::-;15060:12;15033:11;:23;;;:39;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;1997:180::-;2056:6;2109:2;2097:9;2088:7;2084:23;2080:32;2077:52;;;2125:1;2122;2115:12;2077:52;-1:-1:-1;2148:23:1;;1997:180;-1:-1:-1;1997:180:1:o;2371:247::-;2430:6;2483:2;2471:9;2462:7;2458:23;2454:32;2451:52;;;2499:1;2496;2489:12;2451:52;2538:9;2525:23;2557:31;2582:5;2557:31;:::i;2623:118::-;2709:5;2702:13;2695:21;2688:5;2685:32;2675:60;;2731:1;2728;2721:12;2746:128;2811:20;;2840:28;2811:20;2840:28;:::i;2879:309::-;2944:6;2952;3005:2;2993:9;2984:7;2980:23;2976:32;2973:52;;;3021:1;3018;3011:12;2973:52;3057:9;3044:23;3034:33;;3117:2;3106:9;3102:18;3089:32;3130:28;3152:5;3130:28;:::i;:::-;3177:5;3167:15;;;2879:309;;;;;:::o;3797:127::-;3858:10;3853:3;3849:20;3846:1;3839:31;3889:4;3886:1;3879:15;3913:4;3910:1;3903:15;3929:1191;4019:6;4027;4080:2;4068:9;4059:7;4055:23;4051:32;4048:52;;;4096:1;4093;4086:12;4048:52;4136:9;4123:23;4165:18;4206:2;4198:6;4195:14;4192:34;;;4222:1;4219;4212:12;4192:34;4260:6;4249:9;4245:22;4235:32;;4305:7;4298:4;4294:2;4290:13;4286:27;4276:55;;4327:1;4324;4317:12;4276:55;4363:2;4350:16;4385:4;4408:2;4404;4401:10;4398:36;;;4414:18;;:::i;:::-;4460:2;4457:1;4453:10;4492:2;4486:9;4555:2;4551:7;4546:2;4542;4538:11;4534:25;4526:6;4522:38;4610:6;4598:10;4595:22;4590:2;4578:10;4575:18;4572:46;4569:72;;;4621:18;;:::i;:::-;4657:2;4650:22;4707:18;;;4741:15;;;;-1:-1:-1;4783:11:1;;;4779:20;;;4811:19;;;4808:39;;;4843:1;4840;4833:12;4808:39;4867:11;;;;4887:148;4903:6;4898:3;4895:15;4887:148;;;4969:23;4988:3;4969:23;:::i;:::-;4957:36;;4920:12;;;;5013;;;;4887:148;;;5054:6;-1:-1:-1;5079:35:1;;-1:-1:-1;5095:18:1;;;5079:35;:::i;:::-;5069:45;;;;;;3929:1191;;;;;:::o;5125:241::-;5181:6;5234:2;5222:9;5213:7;5209:23;5205:32;5202:52;;;5250:1;5247;5240:12;5202:52;5289:9;5276:23;5308:28;5330:5;5308:28;:::i;5371:385::-;5457:6;5465;5473;5481;5534:3;5522:9;5513:7;5509:23;5505:33;5502:53;;;5551:1;5548;5541:12;5502:53;-1:-1:-1;;5574:23:1;;;5644:2;5629:18;;5616:32;;-1:-1:-1;5695:2:1;5680:18;;5667:32;;5746:2;5731:18;5718:32;;-1:-1:-1;5371:385:1;-1:-1:-1;5371:385:1:o;5761:388::-;5829:6;5837;5890:2;5878:9;5869:7;5865:23;5861:32;5858:52;;;5906:1;5903;5896:12;5858:52;5945:9;5932:23;5964:31;5989:5;5964:31;:::i;:::-;6014:5;-1:-1:-1;6071:2:1;6056:18;;6043:32;6084:33;6043:32;6084:33;:::i;6154:316::-;6231:6;6239;6247;6300:2;6288:9;6279:7;6275:23;6271:32;6268:52;;;6316:1;6313;6306:12;6268:52;-1:-1:-1;;6339:23:1;;;6409:2;6394:18;;6381:32;;-1:-1:-1;6460:2:1;6445:18;;;6432:32;;6154:316;-1:-1:-1;6154:316:1:o;6475:309::-;6540:6;6548;6601:2;6589:9;6580:7;6576:23;6572:32;6569:52;;;6617:1;6614;6607:12;6569:52;6656:9;6643:23;6675:28;6697:5;6675:28;:::i;7012:356::-;7214:2;7196:21;;;7233:18;;;7226:30;7292:34;7287:2;7272:18;;7265:62;7359:2;7344:18;;7012:356::o;7373:347::-;7575:2;7557:21;;;7614:2;7594:18;;;7587:30;-1:-1:-1;;;7648:2:1;7633:18;;7626:53;7711:2;7696:18;;7373:347::o;7725:127::-;7786:10;7781:3;7777:20;7774:1;7767:31;7817:4;7814:1;7807:15;7841:4;7838:1;7831:15;7857:422;7946:1;7989:5;7946:1;8003:270;8024:7;8014:8;8011:21;8003:270;;;8083:4;8079:1;8075:6;8071:17;8065:4;8062:27;8059:53;;;8092:18;;:::i;:::-;8142:7;8132:8;8128:22;8125:55;;;8162:16;;;;8125:55;8241:22;;;;8201:15;;;;8003:270;;;8007:3;7857:422;;;;;:::o;8284:806::-;8333:5;8363:8;8353:80;;-1:-1:-1;8404:1:1;8418:5;;8353:80;8452:4;8442:76;;-1:-1:-1;8489:1:1;8503:5;;8442:76;8534:4;8552:1;8547:59;;;;8620:1;8615:130;;;;8527:218;;8547:59;8577:1;8568:10;;8591:5;;;8615:130;8652:3;8642:8;8639:17;8636:43;;;8659:18;;:::i;:::-;-1:-1:-1;;8715:1:1;8701:16;;8730:5;;8527:218;;8829:2;8819:8;8816:16;8810:3;8804:4;8801:13;8797:36;8791:2;8781:8;8778:16;8773:2;8767:4;8764:12;8760:35;8757:77;8754:159;;;-1:-1:-1;8866:19:1;;;8898:5;;8754:159;8945:34;8970:8;8964:4;8945:34;:::i;:::-;9015:6;9011:1;9007:6;9003:19;8994:7;8991:32;8988:58;;;9026:18;;:::i;:::-;9064:20;;8284:806;-1:-1:-1;;;8284:806:1:o;9095:140::-;9153:5;9182:47;9223:4;9213:8;9209:19;9203:4;9182:47;:::i;9240:168::-;9313:9;;;9344;;9361:15;;;9355:22;;9341:37;9331:71;;9382:18;;:::i;10108:128::-;10175:9;;;10196:11;;;10193:37;;;10210:18;;:::i;11414:217::-;11454:1;11480;11470:132;;11524:10;11519:3;11515:20;11512:1;11505:31;11559:4;11556:1;11549:15;11587:4;11584:1;11577:15;11470:132;-1:-1:-1;11616:9:1;;11414:217::o;11988:127::-;12049:10;12044:3;12040:20;12037:1;12030:31;12080:4;12077:1;12070:15;12104:4;12101:1;12094:15;12120:127;12181:10;12176:3;12172:20;12169:1;12162:31;12212:4;12209:1;12202:15;12236:4;12233:1;12226:15;12252:135;12291:3;12312:17;;;12309:43;;12332:18;;:::i;:::-;-1:-1:-1;12379:1:1;12368:13;;12252:135::o;12392:125::-;12457:9;;;12478:10;;;12475:36;;;12491:18;;:::i;13937:245::-;14004:6;14057:2;14045:9;14036:7;14032:23;14028:32;14025:52;;;14073:1;14070;14063:12;14025:52;14105:9;14099:16;14124:28;14146:5;14124:28;:::i;14543:398::-;14745:2;14727:21;;;14784:2;14764:18;;;14757:30;14823:34;14818:2;14803:18;;14796:62;-1:-1:-1;;;14889:2:1;14874:18;;14867:32;14931:3;14916:19;;14543:398::o;15298:352::-;15500:2;15482:21;;;15539:2;15519:18;;;15512:30;-1:-1:-1;;;15573:2:1;15558:18;;15551:58;15641:2;15626:18;;15298:352::o;22887:356::-;23089:2;23071:21;;;23108:18;;;23101:30;23167:34;23162:2;23147:18;;23140:62;23234:2;23219:18;;22887:356::o;23952:251::-;24022:6;24075:2;24063:9;24054:7;24050:23;24046:32;24043:52;;;24091:1;24088;24081:12;24043:52;24123:9;24117:16;24142:31;24167:5;24142:31;:::i;24208:980::-;24470:4;24518:3;24507:9;24503:19;24549:6;24538:9;24531:25;24575:2;24613:6;24608:2;24597:9;24593:18;24586:34;24656:3;24651:2;24640:9;24636:18;24629:31;24680:6;24715;24709:13;24746:6;24738;24731:22;24784:3;24773:9;24769:19;24762:26;;24823:2;24815:6;24811:15;24797:29;;24844:1;24854:195;24868:6;24865:1;24862:13;24854:195;;;24933:13;;-1:-1:-1;;;;;24929:39:1;24917:52;;25024:15;;;;24989:12;;;;24965:1;24883:9;24854:195;;;-1:-1:-1;;;;;;;25105:32:1;;;;25100:2;25085:18;;25078:60;-1:-1:-1;;;25169:3:1;25154:19;25147:35;25066:3;24208:980;-1:-1:-1;;;24208:980:1:o;25805:306::-;25893:6;25901;25909;25962:2;25950:9;25941:7;25937:23;25933:32;25930:52;;;25978:1;25975;25968:12;25930:52;26007:9;26001:16;25991:26;;26057:2;26046:9;26042:18;26036:25;26026:35;;26101:2;26090:9;26086:18;26080:25;26070:35;;25805:306;;;;;:::o

Swarm Source

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