ETH Price: $3,266.21 (-1.34%)
Gas: 12 Gwei

Token

Kintaro (KINTARO)
 

Overview

Max Total Supply

10,000,000,000 KINTARO

Holders

108

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 KINTARO

Value
$0.00
0x77949de38ee9349c1e4ceef210514d77dd55c0e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Kintaro

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-05
*/

// File: kintarotoken.sol

//Telegram: https://t.me/KintaroToken
//Twitter: https://twitter.com/kintarotoken


pragma solidity ^0.8.0;

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

interface IERC20 {
    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
    );
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

interface IUniswapV2Router {
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// solhint-disable
contract Kintaro is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress =
        payable(0x99bAD48e3455B750c5B8817bA2fBD4d0b2f39528);
    address payable public devAddress =
        payable(0x99bAD48e3455B750c5B8817bA2fBD4d0b2f39528);
    address payable public liquidityAddress =
        payable(0x198B8662Ed18fc590E0e259FD7FCC66db13A05FC);
    address payable public treasuryAddress =
        payable(0x99bAD48e3455B750c5B8817bA2fBD4d0b2f39528);

    address private _owner;

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

    // Anti-whale limits
    bool public limitsInEffect = true;
    mapping(address => bool) public blacklist;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 10_000_000_000 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Kintaro";
    string private constant _symbol = "KINTARO";
    uint8 private constant _decimals = 9;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _teamFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    // Here is where you set the fee breakdown

    uint256 public _buyTaxFee = 1;
    uint256 public _buyLiquidityFee = 2;
    uint256 public _buyTeamFee = 10;

    uint256 public _sellTaxFee = 1;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellTeamFee = 15;

    // These values are % of team fees to distribute (add extra 0: 333 = 33.3%)
    // These combined values must be lower than 1000 (aka 100%)
    // Any leftover goes to marketing address
    uint256 public _percentTeamFundsToDev = 333;
    uint256 public _percentTeamFundsToTreasury = 333;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    uint256 public _liquidityTokensToSwap;
    uint256 public _teamTokensToSwap;

    uint256 public maxTransactionAmount;
    uint256 public maxWalletAmount;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    event SetAutomatedMarketMakerPair(address pair, bool value);

    event ExcludeFromReward(address excludedAddress);

    event IncludeInReward(address includedAddress);

    event ExcludeFromFee(address excludedAddress);

    event IncludeInFee(address includedAddress);

    event SetBuyFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event SetSellFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedTeamAddress(address team);

    event UpdatedLiquidityAddress(address liquidity);

    event OwnerForcedSwapBack(uint256 timestamp);

    event BoughtEarly(address indexed sniper);

    event RemovedSniper(address indexed notsnipersupposedly);

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

    constructor() payable {
        _owner = msg.sender;
        _rOwned[_owner] = (_rTotal / 1000) * 550;
        _rOwned[address(this)] = (_rTotal / 1000) * 450;

        maxTransactionAmount = (_tTotal * 3) / 1000; // 0.3% maxTransactionAmountTxn
        maxWalletAmount = (_tTotal * 5) / 1000; // 0.5% maxWalletAmount
        minimumTokensBeforeSwap = (_tTotal * 5) / 10000; // 0.05% swap tokens amount

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[devAddress] = true;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingAddress, true);
        excludeFromMaxTransaction(liquidityAddress, true);
        excludeFromMaxTransaction(devAddress, true);
        excludeFromMaxTransaction(treasuryAddress, true);

        emit Transfer(address(0), _owner, (_tTotal * 550) / 1000);
        emit Transfer(address(0), address(this), (_tTotal * 450) / 1000);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        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
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

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

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // once enabled, can never be turned off
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
    }

    // send tokens and ETH for liquidity to contract directly, then call this (not required, can still use Uniswap to add liquidity manually, but this ensures everything is excluded properly and makes for a great stealth launch)
    function launch() external onlyOwner returns (bool) {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        enableTrading();
        IUniswapV2Router _uniswapV2Router = IUniswapV2Router(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        addLiquidity(balanceOf(address(this)), address(this).balance);
        transferOwnership(_owner);
        return true;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if (value) {
            excludeFromReward(pair);
        }
        if (!value) {
            includeInReward(pair);
        }
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(
            _excluded.length + 1 <= 50,
            "Cannot exclude more than 50 accounts.  Include a previously excluded address."
        );
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public 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 _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklist[from], "From address blacklist. Contact admin");
        require(!blacklist[to], "To address blacklist. Contact admin");

        if (!tradingActive) {
            require(
                _isExcludedFromFee[from] || _isExcludedFromFee[to],
                "Trading is not active yet."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ) {
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                }

                if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        balanceOf(to) + amount <= maxWalletAmount,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(
            _teamTokensToSwap
        );
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                buyOrSellSwitch = BUY;
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _buyTaxFee;
                    _liquidityFee = _buyLiquidityFee + _buyTeamFee;
                }
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                buyOrSellSwitch = SELL;
                // higher tax if bought in the same block as trading active for 72 hours (sniper protect)
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _sellTaxFee;
                    _liquidityFee = _sellLiquidityFee + _sellTeamFee;
                }
                // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
            }
        }

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

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _teamTokensToSwap;

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_teamTokensToSwap).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);

        uint256 ethForDev = ethForMarketing.mul(_percentTeamFundsToDev).div(
            1000
        );
        uint256 ethForTreasury = ethForMarketing
            .mul(_percentTeamFundsToTreasury)
            .div(1000);
        ethForMarketing -= ethForDev;
        ethForMarketing -= ethForTreasury;

        _liquidityTokensToSwap = 0;
        _teamTokensToSwap = 0;

        (bool success, ) = address(marketingAddress).call{
            value: ethForMarketing
        }("");
        (success, ) = address(devAddress).call{ value: ethForDev }("");
        (success, ) = address(treasuryAddress).call{ value: ethForTreasury }(
            ""
        );

        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(
            amountToSwapForETH,
            ethForLiquidity,
            tokensForLiquidity
        );

        // send leftover to the marketing wallet so it doesn't get stuck on the contract.
        if (address(this).balance > 1e17) {
            (success, ) = address(marketingAddress).call{
                value: address(this).balance
            }("");
        }
    }

    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(
            contractBalance >= _tTotal / 100,
            "Can only swap back if more than 1% of tokens stuck on contract"
        );
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // Add to blacklist
    function addToBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot blacklist 0 address");
        blacklist[account] = true;
    }

    // Remove from blacklist
    function removeFromBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot use 0 address");
        blacklist[account] = false;
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if (buyOrSellSwitch == BUY) {
            _liquidityTokensToSwap +=
                (tLiquidity * _buyLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _buyTeamFee) / _liquidityFee;
        } else if (buyOrSellSwitch == SELL) {
            _liquidityTokensToSwap +=
                (tLiquidity * _sellLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _sellTeamFee) / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setMaxTransactionAmount(uint256 newMaxBuy) external onlyOwner {
        require(newMaxBuy > 0, "Cannot be 0");
        maxTransactionAmount = (_tTotal * newMaxBuy) / 1000;
    }

    function setMaxWallet(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet > 0, "Cannot be 0");
        maxWalletAmount = (_tTotal * newMaxWallet) / 1000;
    }

    function setBuyFee(
        uint256 buyTaxFee,
        uint256 buyLiquidityFee,
        uint256 buyTeamFee
    ) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyTeamFee = buyTeamFee;
        require(
            _buyTaxFee + _buyLiquidityFee + _buyTeamFee <= 100,
            "Must keep buy taxes below 100%"
        );
        emit SetBuyFee(buyTeamFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(
        uint256 sellTaxFee,
        uint256 sellLiquidityFee,
        uint256 sellTeamFee
    ) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellTeamFee = sellTeamFee;
        require(
            _sellTaxFee + _sellLiquidityFee + _sellTeamFee <= 100,
            "Must keep sell taxes below 100%"
        );
        emit SetSellFee(sellTeamFee, sellLiquidityFee, sellTaxFee);
    }

    function setTeamSplit(uint256 treasurySplit, uint256 devSplit)
        external
        onlyOwner
    {
        require(treasurySplit + devSplit < 1000, "Split over 100%");
        _percentTeamFundsToTreasury = treasurySplit;
        _percentTeamFundsToDev = devSplit;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedTeamAddress(_marketingAddress);
    }

    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        require(
            _liquidityAddress != address(0),
            "_liquidityAddress address cannot be 0"
        );
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setDeveloperAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "Cannot be 0 address");
        devAddress = payable(_devAddress);
        _isExcludedFromFee[devAddress] = true;
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "Cannot be 0 address");
        treasuryAddress = payable(_treasuryAddress);
        _isExcludedFromFee[treasuryAddress] = true;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success, ) = address(msg.sender).call{ value: address(this).balance }(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasurySplit","type":"uint256"},{"internalType":"uint256","name":"devSplit","type":"uint256"}],"name":"setTeamSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b03199081167399bad48e3455b750c5b8817ba2fbd4d0b2f395289081179092556004805482168317905560058054821673198b8662ed18fc590e0e259fd7fcc66db13a05fc179055600680549091169091179055600b805460ff1916600117905562000086678ac7230489e800006000196200051e565b620000949060001962000504565b6010556012546013556015546016556001601881905560026019819055600a601a55601b91909155601c55600f601d5561014d601e819055601f55600060208190556029805461ffff60a81b19169055620000ee6200040c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b031916331790556010546200015c906103e890620004cb565b6200016a90610226620004e2565b6007546001600160a01b031660009081526008602052604090205560105462000197906103e890620004cb565b620001a5906101c2620004e2565b306000908152600860205260409020556103e8620001cd678ac7230489e800006003620004e2565b620001d99190620004cb565b6023556103e8620001f4678ac7230489e800006005620004e2565b620002009190620004cb565b6024556127106200021b678ac7230489e800006005620004e2565b620002279190620004cb565b6027556001600d60006200023a62000410565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155600354821684528284208054861682179055600554821684528284208054861682179055600654821684528284208054861682179055600454909116835291208054909216179055620002dd620002d562000410565b60016200041f565b620002ea3060016200041f565b620002f961dead60016200041f565b60035462000312906001600160a01b031660016200041f565b6005546200032b906001600160a01b031660016200041f565b60045462000344906001600160a01b031660016200041f565b6006546200035d906001600160a01b031660016200041f565b6007546001600160a01b0316600060008051602062004cf38339815191526103e862000394678ac7230489e80000610226620004e2565b620003a09190620004cb565b604051620003af9190620004c2565b60405180910390a330600060008051602062004cf38339815191526103e8620003e3678ac7230489e800006101c2620004e2565b620003ef9190620004cb565b604051620003fe9190620004c2565b60405180910390a362000561565b3390565b6000546001600160a01b031690565b620004296200040c565b6000546001600160a01b03908116911614620004625760405162461bcd60e51b815260040162000459906200048d565b60405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b600082620004dd57620004dd6200054b565b500490565b6000816000190483118215151615620004ff57620004ff62000535565b500290565b60008282101562000519576200051962000535565b500390565b6000826200053057620005306200054b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61478280620005716000396000f3fe6080604052600436106104095760003560e01c80636605bfda11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610b16578063efcc52de14610b2b578063f2fde38b14610b40578063f5648a4f14610b60578063f9f92be414610b7557610410565b8063dc44b6a014610aa1578063dcc345f214610ab6578063dd62ed3e14610ad6578063ea2f0b3714610af657610410565b8063c469b6dd116100f2578063c469b6dd14610a2d578063c49b9a8014610a42578063c5f956af14610a62578063c8c8ebe414610a77578063cab0347114610a8c57610410565b8063aa4bde28146109ce578063b18f50b4146109e3578063b62496f5146109f8578063bbc0c74214610a1857610410565b806388f82020116101a65780639a7a23d6116101755780639a7a23d614610944578063a073d37f14610964578063a457c2d714610979578063a5ece94114610999578063a9059cbb146109ae57610410565b806388f82020146108da5780638da5cb5b146108fa578063906e9dd01461090f57806395d89b411461092f57610410565b8063751039fc116101e2578063751039fc146108705780637571336a146108855780638366e79a146108a557806388790a68146108c557610410565b80636605bfda146108065780636eee65d21461082657806370a082311461083b578063715018a61461085b57610410565b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b614610787578063557ed1ba146107a75780635d0044ca146107bc578063602bc62b146107dc57806361cd759f146107f157610410565b806351f205e41461071257806352390c0214610727578063525fa81f146107475780635342acb41461076757610410565b806344337ea1116102e857806344337ea1146106935780634549b039146106b357806349bd5a5e146106d35780634a62bb65146106e85780634a74bb02146106fd57610410565b806339509351146106295780633ad10ef6146106495780634047ea3e1461065e578063437823ec1461067357610410565b80631d865c301161039c57806325519cf21161036b57806325519cf2146105925780632d838119146105b2578063313ce567146105d25780633221c93f146105f45780633685d4191461060957610410565b80631d865c301461051d5780631e293c101461053d578063200a692d1461055d57806323b872dd1461057257610410565b8063119c1840116103d8578063119c1840146104a257806313114a9d146104c45780631694505e146104e657806318160ddd1461050857610410565b806301339c211461041557806306fdde0314610440578063095ea7b31461046257806310d5de531461048257610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a610b95565b6040516104379190613c23565b60405180910390f35b34801561044c57600080fd5b50610455610e4d565b6040516104379190613c2e565b34801561046e57600080fd5b5061042a61047d366004613a6e565b610e6e565b34801561048e57600080fd5b5061042a61049d366004613991565b610e8c565b3480156104ae57600080fd5b506104c26104bd366004613b25565b610ea1565b005b3480156104d057600080fd5b506104d9610f0b565b604051610437919061459d565b3480156104f257600080fd5b506104fb610f11565b6040516104379190613ba1565b34801561051457600080fd5b506104d9610f20565b34801561052957600080fd5b506104c2610538366004613b46565b610f2c565b34801561054957600080fd5b506104c2610558366004613ad1565b610fe5565b34801561056957600080fd5b506104d961105f565b34801561057e57600080fd5b5061042a61058d366004613a01565b611065565b34801561059e57600080fd5b506104c26105ad366004613b46565b6110ec565b3480156105be57600080fd5b506104d96105cd366004613ad1565b611198565b3480156105de57600080fd5b506105e76111db565b604051610437919061462c565b34801561060057600080fd5b506104fb6111e0565b34801561061557600080fd5b506104c2610624366004613991565b6111ef565b34801561063557600080fd5b5061042a610644366004613a6e565b6113ba565b34801561065557600080fd5b506104fb611408565b34801561066a57600080fd5b506104d9611417565b34801561067f57600080fd5b506104c261068e366004613991565b61141d565b34801561069f57600080fd5b506104c26106ae366004613991565b6114b0565b3480156106bf57600080fd5b506104d96106ce366004613b01565b61152f565b3480156106df57600080fd5b506104fb611592565b3480156106f457600080fd5b5061042a6115a1565b34801561070957600080fd5b5061042a6115aa565b34801561071e57600080fd5b506104c26115ba565b34801561073357600080fd5b506104c2610742366004613991565b611665565b34801561075357600080fd5b506104c2610762366004613991565b6117c2565b34801561077357600080fd5b5061042a610782366004613991565b611888565b34801561079357600080fd5b506104c26107a2366004613991565b6118a6565b3480156107b357600080fd5b506104d9611922565b3480156107c857600080fd5b506104c26107d7366004613ad1565b611926565b3480156107e857600080fd5b506104d96119a0565b3480156107fd57600080fd5b506104d96119a6565b34801561081257600080fd5b506104c2610821366004613991565b6119ac565b34801561083257600080fd5b506104d9611a41565b34801561084757600080fd5b506104d9610856366004613991565b611a47565b34801561086757600080fd5b506104c2611aa9565b34801561087c57600080fd5b5061042a611b28565b34801561089157600080fd5b506104c26108a0366004613a41565b611b6f565b3480156108b157600080fd5b5061042a6108c03660046139c9565b611bcf565b3480156108d157600080fd5b506104d9611d99565b3480156108e657600080fd5b5061042a6108f5366004613991565b611d9f565b34801561090657600080fd5b506104fb611dbd565b34801561091b57600080fd5b506104c261092a366004613991565b611dcc565b34801561093b57600080fd5b50610455611ea6565b34801561095057600080fd5b506104c261095f366004613a41565b611ec7565b34801561097057600080fd5b506104d9611f34565b34801561098557600080fd5b5061042a610994366004613a6e565b611f3a565b3480156109a557600080fd5b506104fb611fa2565b3480156109ba57600080fd5b5061042a6109c9366004613a6e565b611fb1565b3480156109da57600080fd5b506104d9611fc5565b3480156109ef57600080fd5b506104d9611fcb565b348015610a0457600080fd5b5061042a610a13366004613991565b611fd1565b348015610a2457600080fd5b5061042a611fe6565b348015610a3957600080fd5b506104d9611ff6565b348015610a4e57600080fd5b506104c2610a5d366004613a99565b611ffc565b348015610a6e57600080fd5b506104fb612078565b348015610a8357600080fd5b506104d9612087565b348015610a9857600080fd5b506104d961208d565b348015610aad57600080fd5b506104d9612093565b348015610ac257600080fd5b506104c2610ad1366004613991565b612099565b348015610ae257600080fd5b506104d9610af13660046139c9565b61212e565b348015610b0257600080fd5b506104c2610b11366004613991565b612159565b348015610b2257600080fd5b506104d96121de565b348015610b3757600080fd5b506104d96121e4565b348015610b4c57600080fd5b506104c2610b5b366004613991565b6121ea565b348015610b6c57600080fd5b506104c26122a0565b348015610b8157600080fd5b5061042a610b90366004613991565b612360565b6000610b9f612375565b6000546001600160a01b03908116911614610bd55760405162461bcd60e51b8152600401610bcc90614297565b60405180910390fd5b602954600160b01b900460ff1615610bff5760405162461bcd60e51b8152600401610bcc906143cb565b610c07612379565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c27816001611b6f565b602880546001600160a01b0319166001600160a01b038381169190911791829055610c5d91309116678ac7230489e800006123d6565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9657600080fd5b505afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce91906139ad565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906139ad565b6040518363ffffffff1660e01b8152600401610d6b929190613bb5565b602060405180830381600087803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906139ad565b602980546001600160a01b0319166001600160a01b039283161790819055610de791166001611b6f565b602954610dfe906001600160a01b0316600161248a565b60004711610e1e5760405162461bcd60e51b8152600401610bcc90613e2a565b610e30610e2a30611a47565b476124e5565b600754610e45906001600160a01b03166121ea565b600191505090565b6040805180820190915260078152664b696e7461726f60c81b602082015290565b6000610e82610e7b612375565b84846123d6565b5060015b92915050565b60256020526000908152604090205460ff1681565b610ea9612375565b6000546001600160a01b03908116911614610ed65760405162461bcd60e51b8152600401610bcc90614297565b6103e8610ee3828461463a565b10610f005760405162461bcd60e51b8152600401610bcc90613e6d565b601f91909155601e55565b60115490565b6028546001600160a01b031681565b678ac7230489e8000090565b610f34612375565b6000546001600160a01b03908116911614610f615760405162461bcd60e51b8152600401610bcc90614297565b601b839055601c829055601d819055606481610f7d848661463a565b610f87919061463a565b1115610fa55760405162461bcd60e51b8152600401610bcc90614031565b7f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3818385604051610fd893929190614616565b60405180910390a1505050565b610fed612375565b6000546001600160a01b0390811691161461101a5760405162461bcd60e51b8152600401610bcc90614297565b6000811161103a5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861104f82678ac7230489e80000614672565b6110599190614652565b60235550565b601b5481565b6000611072848484612596565b6110e28461107e612375565b6110dd85604051806060016040528060288152602001614700602891396001600160a01b038a166000908152600a60205260408120906110bc612375565b6001600160a01b031681526020810191909152604001600020549190612b23565b6123d6565b5060019392505050565b6110f4612375565b6000546001600160a01b039081169116146111215760405162461bcd60e51b8152600401610bcc90614297565b60188390556019829055601a81905560648161113d848661463a565b611147919061463a565b11156111655760405162461bcd60e51b8152600401610bcc90614193565b7f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620818385604051610fd893929190614616565b60006010548211156111bc5760405162461bcd60e51b8152600401610bcc90613d58565b60006111c6612b5d565b90506111d28382612b80565b9150505b919050565b600990565b6005546001600160a01b031681565b6111f7612375565b6000546001600160a01b039081169116146112245760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff1661125c5760405162461bcd60e51b8152600401610bcc90613ffa565b60005b600f548110156113b657816001600160a01b0316600f828154811061129457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113a457600f80546112bf90600190614691565b815481106112dd57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216918390811061131757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061137d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556113b6565b806113ae816146a8565b91505061125f565b5050565b6000610e826113c7612375565b846110dd85600a60006113d8612375565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612bc9565b6004546001600160a01b031681565b60215481565b611425612375565b6000546001600160a01b039081169116146114525760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19166001179055517f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b62906114a5908390613ba1565b60405180910390a150565b6114b8612375565b6000546001600160a01b039081169116146114e55760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661150b5760405162461bcd60e51b8152600401610bcc90614566565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000678ac7230489e800008311156115595760405162461bcd60e51b8152600401610bcc90614117565b8161157857600061156984612bf8565b50939550610e86945050505050565b600061158384612bf8565b50929550610e86945050505050565b6029546001600160a01b031681565b600b5460ff1681565b602954600160a81b900460ff1681565b6115c2612375565b6000546001600160a01b039081169116146115ef5760405162461bcd60e51b8152600401610bcc90614297565b60006115fa30611a47565b905061160f6064678ac7230489e80000614652565b81101561162e5760405162461bcd60e51b8152600401610bcc90613cfb565b611636612c47565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114a5919061459d565b61166d612375565b6000546001600160a01b0390811691161461169a5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff16156116d35760405162461bcd60e51b8152600401610bcc90613f2a565b600f546032906116e490600161463a565b11156117025760405162461bcd60e51b8152600401610bcc90614443565b6001600160a01b0381166000908152600860205260409020541561175c576001600160a01b03811660009081526008602052604090205461174290611198565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6117ca612375565b6000546001600160a01b039081169116146117f75760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661181d5760405162461bcd60e51b8152600401610bcc90614068565b600580546001600160a01b0319166001600160a01b038381169190911791829055166000908152600d602052604090819020805460ff19166001179055517f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f906114a5908390613ba1565b6001600160a01b03166000908152600d602052604090205460ff1690565b6118ae612375565b6000546001600160a01b039081169116146118db5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166119015760405162461bcd60e51b8152600401610bcc906144b6565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b4290565b61192e612375565b6000546001600160a01b0390811691161461195b5760405162461bcd60e51b8152600401610bcc90614297565b6000811161197b5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861199082678ac7230489e80000614672565b61199a9190614652565b60245550565b60025490565b601f5481565b6119b4612375565b6000546001600160a01b039081169116146119e15760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611a075760405162461bcd60e51b8152600401610bcc9061435a565b600680546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b60225481565b6001600160a01b0381166000908152600e602052604081205460ff1615611a8757506001600160a01b0381166000908152600960205260409020546111d6565b6001600160a01b038216600090815260086020526040902054610e8690611198565b611ab1612375565b6000546001600160a01b03908116911614611ade5760405162461bcd60e51b8152600401610bcc90614297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611b32612375565b6000546001600160a01b03908116911614611b5f5760405162461bcd60e51b8152600401610bcc90614297565b50600b805460ff19169055600190565b611b77612375565b6000546001600160a01b03908116911614611ba45760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611bd9612375565b6000546001600160a01b03908116911614611c065760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038316611c2c5760405162461bcd60e51b8152600401610bcc9061421f565b6001600160a01b038316301415611c555760405162461bcd60e51b8152600401610bcc90613cc4565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611c84903090600401613ba1565b60206040518083038186803b158015611c9c57600080fd5b505afa158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd49190613ae9565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90611d059086908590600401613bcf565b602060405180830381600087803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613ab5565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d8a929190613bcf565b60405180910390a15092915050565b601c5481565b6001600160a01b03166000908152600e602052604090205460ff1690565b6000546001600160a01b031690565b611dd4612375565b6000546001600160a01b03908116911614611e015760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611e275760405162461bcd60e51b8152600401610bcc9061414e565b600380546001600160a01b039081166000908152600d6020526040808220805460ff1990811690915584546001600160a01b03191686851617948590559390921681528190208054909216600117909155517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f122000213756906114a5908390613ba1565b6040805180820190915260078152664b494e5441524f60c81b602082015290565b611ecf612375565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b8152600401610bcc90614297565b6029546001600160a01b0383811691161415611f2a5760405162461bcd60e51b8152600401610bcc90613ecd565b6113b6828261248a565b60275490565b6000610e82611f47612375565b846110dd8560405180606001604052806025815260200161472860259139600a6000611f71612375565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b23565b6003546001600160a01b031681565b6000610e82611fbe612375565b8484612596565b60245481565b601e5481565b60266020526000908152604090205460ff1681565b602954600160b01b900460ff1681565b601a5481565b612004612375565b6000546001600160a01b039081169116146120315760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a5908390613c23565b6006546001600160a01b031681565b60235481565b601d5481565b60195481565b6120a1612375565b6000546001600160a01b039081169116146120ce5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166120f45760405162461bcd60e51b8152600401610bcc9061435a565b600480546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b612161612375565b6000546001600160a01b0390811691161461218e5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19169055517f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e906114a5908390613ba1565b60205481565b60185481565b6121f2612375565b6000546001600160a01b0390811691161461221f5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166122455760405162461bcd60e51b8152600401610bcc90613da2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6122a8612375565b6000546001600160a01b039081169116146122d55760405162461bcd60e51b8152600401610bcc90614297565b602954600160b01b900460ff16156122ff5760405162461bcd60e51b8152600401610bcc906144e4565b6000336001600160a01b03164760405161231890613b9e565b60006040518083038185875af1925050503d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b50505050565b600c6020526000908152604090205460ff1681565b3390565b612381612375565b6000546001600160a01b039081169116146123ae5760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1960ff60b01b19909116600160b01b1716600160a81b17905543602055565b6001600160a01b0383166123fc5760405162461bcd60e51b8152600401610bcc90614387565b6001600160a01b0382166124225760405162461bcd60e51b8152600401610bcc90613de8565b6001600160a01b038084166000818152600a602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061247d90859061459d565b60405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556124d7576124d782611665565b806113b6576113b6826111ef565b6028546124fd9030906001600160a01b0316846123d6565b60285460055460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253d9230928992600092839216904290600401613be8565b6060604051808303818588803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258f9190613b71565b5050505050565b6001600160a01b0383166125bc5760405162461bcd60e51b8152600401610bcc90614315565b6001600160a01b0382166125e25760405162461bcd60e51b8152600401610bcc90613c81565b600081116126025760405162461bcd60e51b8152600401610bcc906142cc565b6001600160a01b0383166000908152600c602052604090205460ff161561263b5760405162461bcd60e51b8152600401610bcc906140d2565b6001600160a01b0382166000908152600c602052604090205460ff16156126745760405162461bcd60e51b8152600401610bcc90613fb7565b602954600160b01b900460ff166126e0576001600160a01b0383166000908152600d602052604090205460ff16806126c457506001600160a01b0382166000908152600d602052604090205460ff165b6126e05760405162461bcd60e51b8152600401610bcc9061452f565b600b5460ff161561289d576126f3611dbd565b6001600160a01b0316836001600160a01b03161415801561272d5750612717611dbd565b6001600160a01b0316826001600160a01b031614155b801561274157506001600160a01b03821615155b801561275857506001600160a01b03821661dead14155b801561276e5750602954600160a01b900460ff16155b1561289d576001600160a01b03831660009081526026602052604090205460ff1680156127b457506001600160a01b03821660009081526025602052604090205460ff16155b156127e0576023548111156127db5760405162461bcd60e51b8152600401610bcc906141ca565b612848565b6001600160a01b03821660009081526026602052604090205460ff16801561282157506001600160a01b03831660009081526025602052604090205460ff16155b15612848576023548111156128485760405162461bcd60e51b8152600401610bcc90613f61565b6001600160a01b03821660009081526025602052604090205460ff1661289d576024548161287584611a47565b61287f919061463a565b111561289d5760405162461bcd60e51b8152600401610bcc90614416565b60006128b6602254602154612bc990919063ffffffff16565b905060006128c330611a47565b60275460295491925082101590600160a01b900460ff161580156128f05750602954600160a81b900460ff165b8015612911575060295460009061290f906001600160a01b0316611a47565b115b801561291d5750600083115b801561294257506001600160a01b0385166000908152600d602052604090205460ff16155b801561296757506001600160a01b0386166000908152600d602052604090205460ff16155b801561298b57506001600160a01b03851660009081526026602052604090205460ff165b80156129945750805b156129a1576129a1612c47565b6001600160a01b0386166000908152600d602052604090205460019060ff16806129e357506001600160a01b0386166000908152600d602052604090205460ff165b156129f5575060036017556000612b0e565b6001600160a01b03871660009081526026602052604090205460ff1615612a7f57612a1e612f4e565b6001601755602054431415612a3c576000601255605a601555612a7a565b602054612a4a90600161463a565b431415612a605760006012556032601555612a7a565b601854601255601a54601954612a76919061463a565b6015555b612b0e565b6001600160a01b03861660009081526026602052604090205460ff1615612b0057612aa8612f4e565b6002601755602054431415612ac6576000601255605a601555612a7a565b602054612ad490600161463a565b431415612aea5760006012556032601555612a7a565b601b54601255601d54601c54612a76919061463a565b612b08612f4e565b60036017555b612b1a87878784612f80565b50505050505050565b60008184841115612b475760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614691565b95945050505050565b6000806000612b6a61309c565b9092509050612b798282612b80565b9250505090565b6000612bc283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613271565b9392505050565b600080612bd6838561463a565b905083811015612bc25760405162461bcd60e51b8152600401610bcc90613e96565b6000806000806000806000806000612c0f8a61329f565b9250925092506000806000612c2d8d8686612c28612b5d565b6132e1565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612c6530611a47565b90506000602254602154612c79919061463a565b90506000612c936002602154612b8090919063ffffffff16565b90506000612ca18483613331565b905047612cad82613373565b6000612cb94783613331565b90506000612cdc86612cd6602254856134f890919063ffffffff16565b90612b80565b90506000612cea8383613331565b90506000612d096103e8612cd6601e54866134f890919063ffffffff16565b90506000612d286103e8612cd6601f54876134f890919063ffffffff16565b9050612d348285614691565b9350612d408185614691565b60006021819055602281905560035460405192965090916001600160a01b03909116908690612d6e90613b9e565b60006040518083038185875af1925050503d8060008114612dab576040519150601f19603f3d011682016040523d82523d6000602084013e612db0565b606091505b50506004546040519192506001600160a01b0316908490612dd090613b9e565b60006040518083038185875af1925050503d8060008114612e0d576040519150601f19603f3d011682016040523d82523d6000602084013e612e12565b606091505b50506006546040519192506001600160a01b0316908390612e3290613b9e565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b505080915050612e8489856124e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188858b604051612eb793929190614616565b60405180910390a167016345785d8a0000471115612f34576003546040516001600160a01b03909116904790612eec90613b9e565b60006040518083038185875af1925050503d8060008114612f29576040519150601f19603f3d011682016040523d82523d6000602084013e612f2e565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b601254158015612f5e5750601554155b15612f6857612f7e565b6012805460135560158054601655600091829055555b565b80612f8d57612f8d612f4e565b6001600160a01b0384166000908152600e602052604090205460ff168015612fce57506001600160a01b0383166000908152600e602052604090205460ff16155b15612fe357612fde84848461353d565b61308f565b6001600160a01b0384166000908152600e602052604090205460ff1615801561302457506001600160a01b0383166000908152600e602052604090205460ff165b1561303457612fde848484613661565b6001600160a01b0384166000908152600e602052604090205460ff16801561307457506001600160a01b0383166000908152600e602052604090205460ff165b1561308457612fde84848461370a565b61308f84848461377d565b8061235a5761235a6137c1565b6010546000908190678ac7230489e80000825b600f54811015613233578260086000600f84815481106130df57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061315857508160096000600f848154811061313157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561317557601054678ac7230489e800009450945050505061326d565b6131c960086000600f848154811061319d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613331565b925061321f60096000600f84815481106131f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613331565b91508061322b816146a8565b9150506130af565b5060105461324990678ac7230489e80000612b80565b82101561326757601054678ac7230489e8000093509350505061326d565b90925090505b9091565b600081836132925760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614652565b6000806000806132ae856137cf565b905060006132bb866137eb565b905060006132d3826132cd8986613331565b90613331565b979296509094509092505050565b60008080806132f088866134f8565b905060006132fe88876134f8565b9050600061330c88886134f8565b9050600061331e826132cd8686613331565b939b939a50919850919650505050505050565b6000612bc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b23565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133b657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344291906139ad565b8160018151811061346357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260285461348991309116846123d6565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c29085906000908690309042906004016145a6565b600060405180830381600087803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b505050505050565b60008261350757506000610e86565b60006135138385614672565b9050826135208583614652565b14612bc25760405162461bcd60e51b8152600401610bcc90614256565b60008060008060008061354f87612bf8565b6001600160a01b038f16600090815260096020526040902054959b509399509197509550935091506135819088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546135b09087613331565b6001600160a01b03808b1660009081526008602052604080822093909355908a16815220546135df9086612bc9565b6001600160a01b03891660009081526008602052604090205561360181613807565b61360b848361396d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161364e919061459d565b60405180910390a3505050505050505050565b60008060008060008061367387612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506136a59087613331565b6001600160a01b03808b16600090815260086020908152604080832094909455918b168152600990915220546136db9084612bc9565b6001600160a01b0389166000908152600960209081526040808320939093556008905220546135df9086612bc9565b60008060008060008061371c87612bf8565b6001600160a01b038f16600090815260096020526040902054959b5093995091975095509350915061374e9088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546136a59087613331565b60008060008060008061378f87612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506135b09087613331565b601354601255601654601555565b6000610e866064612cd6601254856134f890919063ffffffff16565b6000610e866064612cd6601554856134f890919063ffffffff16565b60016017541415613878576015546019546138229083614672565b61382c9190614652565b6021600082825461383d919061463a565b9091555050601554601a546138529083614672565b61385c9190614652565b6022600082825461386d919061463a565b909155506138e49050565b600260175414156138e457601554601c546138939083614672565b61389d9190614652565b602160008282546138ae919061463a565b9091555050601554601d546138c39083614672565b6138cd9190614652565b602260008282546138de919061463a565b90915550505b60006138ee612b5d565b905060006138fc83836134f8565b306000908152600860205260409020549091506139199082612bc9565b30600090815260086020908152604080832093909355600e9052205460ff161561396857306000908152600960205260409020546139579084612bc9565b306000908152600960205260409020555b505050565b60105461397a9083613331565b60105560115461398a9082612bc9565b6011555050565b6000602082840312156139a2578081fd5b8135612bc2816146d9565b6000602082840312156139be578081fd5b8151612bc2816146d9565b600080604083850312156139db578081fd5b82356139e6816146d9565b915060208301356139f6816146d9565b809150509250929050565b600080600060608486031215613a15578081fd5b8335613a20816146d9565b92506020840135613a30816146d9565b929592945050506040919091013590565b60008060408385031215613a53578182fd5b8235613a5e816146d9565b915060208301356139f6816146f1565b60008060408385031215613a80578182fd5b8235613a8b816146d9565b946020939093013593505050565b600060208284031215613aaa578081fd5b8135612bc2816146f1565b600060208284031215613ac6578081fd5b8151612bc2816146f1565b600060208284031215613ae2578081fd5b5035919050565b600060208284031215613afa578081fd5b5051919050565b60008060408385031215613b13578182fd5b8235915060208301356139f6816146f1565b60008060408385031215613b37578182fd5b50508035926020909101359150565b600080600060608486031215613b5a578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215613b85578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015613c5a57858101830151858201604001528201613c3e565b81811115613c6b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252603e908201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060408201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6020808252600f908201526e53706c6974206f766572203130302560881b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526036908201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656040820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606082015260800190565b60208082526023908201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460408201526236b4b760e91b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130302500604082015260600190565b60208082526025908201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252600b908201526a043616e6e6f7420626520360ac1b604082015260600190565b60208082526025908201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060408201526430b236b4b760d91b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252601e908201527f4d757374206b656570206275792074617865732062656c6f7720313030250000604082015260600190565b60208082526035908201527f427579207472616e7366657220616d6f756e742065786365656473207468652060408201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606082015260800190565b6020808252601a908201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526013908201527243616e6e6f742062652030206164647265737360681b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b6020808252604d908201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60408201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60608201526c3ab232b21030b2323932b9b99760991b608082015260a00190565b60208082526014908201527343616e6e6f74207573652030206164647265737360601b604082015260600190565b6020808252602b908201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360408201526a1b89dd081cdd185c9d195960aa1b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604082015260600190565b6020808252601a908201527f43616e6e6f7420626c61636b6c69737420302061646472657373000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156145f55784516001600160a01b0316835293830193918301916001016145d0565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6000821982111561464d5761464d6146c3565b500190565b60008261466d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561468c5761468c6146c3565b500290565b6000828210156146a3576146a36146c3565b500390565b60006000198214156146bc576146bc6146c3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146146ee57600080fd5b50565b80151581146146ee57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220708416d04b7e32dd3d266fa6baf72a4d0fd192364501ddd6bd23fd705d0ba3d964736f6c63430008000033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104095760003560e01c80636605bfda11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610b16578063efcc52de14610b2b578063f2fde38b14610b40578063f5648a4f14610b60578063f9f92be414610b7557610410565b8063dc44b6a014610aa1578063dcc345f214610ab6578063dd62ed3e14610ad6578063ea2f0b3714610af657610410565b8063c469b6dd116100f2578063c469b6dd14610a2d578063c49b9a8014610a42578063c5f956af14610a62578063c8c8ebe414610a77578063cab0347114610a8c57610410565b8063aa4bde28146109ce578063b18f50b4146109e3578063b62496f5146109f8578063bbc0c74214610a1857610410565b806388f82020116101a65780639a7a23d6116101755780639a7a23d614610944578063a073d37f14610964578063a457c2d714610979578063a5ece94114610999578063a9059cbb146109ae57610410565b806388f82020146108da5780638da5cb5b146108fa578063906e9dd01461090f57806395d89b411461092f57610410565b8063751039fc116101e2578063751039fc146108705780637571336a146108855780638366e79a146108a557806388790a68146108c557610410565b80636605bfda146108065780636eee65d21461082657806370a082311461083b578063715018a61461085b57610410565b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b614610787578063557ed1ba146107a75780635d0044ca146107bc578063602bc62b146107dc57806361cd759f146107f157610410565b806351f205e41461071257806352390c0214610727578063525fa81f146107475780635342acb41461076757610410565b806344337ea1116102e857806344337ea1146106935780634549b039146106b357806349bd5a5e146106d35780634a62bb65146106e85780634a74bb02146106fd57610410565b806339509351146106295780633ad10ef6146106495780634047ea3e1461065e578063437823ec1461067357610410565b80631d865c301161039c57806325519cf21161036b57806325519cf2146105925780632d838119146105b2578063313ce567146105d25780633221c93f146105f45780633685d4191461060957610410565b80631d865c301461051d5780631e293c101461053d578063200a692d1461055d57806323b872dd1461057257610410565b8063119c1840116103d8578063119c1840146104a257806313114a9d146104c45780631694505e146104e657806318160ddd1461050857610410565b806301339c211461041557806306fdde0314610440578063095ea7b31461046257806310d5de531461048257610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a610b95565b6040516104379190613c23565b60405180910390f35b34801561044c57600080fd5b50610455610e4d565b6040516104379190613c2e565b34801561046e57600080fd5b5061042a61047d366004613a6e565b610e6e565b34801561048e57600080fd5b5061042a61049d366004613991565b610e8c565b3480156104ae57600080fd5b506104c26104bd366004613b25565b610ea1565b005b3480156104d057600080fd5b506104d9610f0b565b604051610437919061459d565b3480156104f257600080fd5b506104fb610f11565b6040516104379190613ba1565b34801561051457600080fd5b506104d9610f20565b34801561052957600080fd5b506104c2610538366004613b46565b610f2c565b34801561054957600080fd5b506104c2610558366004613ad1565b610fe5565b34801561056957600080fd5b506104d961105f565b34801561057e57600080fd5b5061042a61058d366004613a01565b611065565b34801561059e57600080fd5b506104c26105ad366004613b46565b6110ec565b3480156105be57600080fd5b506104d96105cd366004613ad1565b611198565b3480156105de57600080fd5b506105e76111db565b604051610437919061462c565b34801561060057600080fd5b506104fb6111e0565b34801561061557600080fd5b506104c2610624366004613991565b6111ef565b34801561063557600080fd5b5061042a610644366004613a6e565b6113ba565b34801561065557600080fd5b506104fb611408565b34801561066a57600080fd5b506104d9611417565b34801561067f57600080fd5b506104c261068e366004613991565b61141d565b34801561069f57600080fd5b506104c26106ae366004613991565b6114b0565b3480156106bf57600080fd5b506104d96106ce366004613b01565b61152f565b3480156106df57600080fd5b506104fb611592565b3480156106f457600080fd5b5061042a6115a1565b34801561070957600080fd5b5061042a6115aa565b34801561071e57600080fd5b506104c26115ba565b34801561073357600080fd5b506104c2610742366004613991565b611665565b34801561075357600080fd5b506104c2610762366004613991565b6117c2565b34801561077357600080fd5b5061042a610782366004613991565b611888565b34801561079357600080fd5b506104c26107a2366004613991565b6118a6565b3480156107b357600080fd5b506104d9611922565b3480156107c857600080fd5b506104c26107d7366004613ad1565b611926565b3480156107e857600080fd5b506104d96119a0565b3480156107fd57600080fd5b506104d96119a6565b34801561081257600080fd5b506104c2610821366004613991565b6119ac565b34801561083257600080fd5b506104d9611a41565b34801561084757600080fd5b506104d9610856366004613991565b611a47565b34801561086757600080fd5b506104c2611aa9565b34801561087c57600080fd5b5061042a611b28565b34801561089157600080fd5b506104c26108a0366004613a41565b611b6f565b3480156108b157600080fd5b5061042a6108c03660046139c9565b611bcf565b3480156108d157600080fd5b506104d9611d99565b3480156108e657600080fd5b5061042a6108f5366004613991565b611d9f565b34801561090657600080fd5b506104fb611dbd565b34801561091b57600080fd5b506104c261092a366004613991565b611dcc565b34801561093b57600080fd5b50610455611ea6565b34801561095057600080fd5b506104c261095f366004613a41565b611ec7565b34801561097057600080fd5b506104d9611f34565b34801561098557600080fd5b5061042a610994366004613a6e565b611f3a565b3480156109a557600080fd5b506104fb611fa2565b3480156109ba57600080fd5b5061042a6109c9366004613a6e565b611fb1565b3480156109da57600080fd5b506104d9611fc5565b3480156109ef57600080fd5b506104d9611fcb565b348015610a0457600080fd5b5061042a610a13366004613991565b611fd1565b348015610a2457600080fd5b5061042a611fe6565b348015610a3957600080fd5b506104d9611ff6565b348015610a4e57600080fd5b506104c2610a5d366004613a99565b611ffc565b348015610a6e57600080fd5b506104fb612078565b348015610a8357600080fd5b506104d9612087565b348015610a9857600080fd5b506104d961208d565b348015610aad57600080fd5b506104d9612093565b348015610ac257600080fd5b506104c2610ad1366004613991565b612099565b348015610ae257600080fd5b506104d9610af13660046139c9565b61212e565b348015610b0257600080fd5b506104c2610b11366004613991565b612159565b348015610b2257600080fd5b506104d96121de565b348015610b3757600080fd5b506104d96121e4565b348015610b4c57600080fd5b506104c2610b5b366004613991565b6121ea565b348015610b6c57600080fd5b506104c26122a0565b348015610b8157600080fd5b5061042a610b90366004613991565b612360565b6000610b9f612375565b6000546001600160a01b03908116911614610bd55760405162461bcd60e51b8152600401610bcc90614297565b60405180910390fd5b602954600160b01b900460ff1615610bff5760405162461bcd60e51b8152600401610bcc906143cb565b610c07612379565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c27816001611b6f565b602880546001600160a01b0319166001600160a01b038381169190911791829055610c5d91309116678ac7230489e800006123d6565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9657600080fd5b505afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce91906139ad565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906139ad565b6040518363ffffffff1660e01b8152600401610d6b929190613bb5565b602060405180830381600087803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906139ad565b602980546001600160a01b0319166001600160a01b039283161790819055610de791166001611b6f565b602954610dfe906001600160a01b0316600161248a565b60004711610e1e5760405162461bcd60e51b8152600401610bcc90613e2a565b610e30610e2a30611a47565b476124e5565b600754610e45906001600160a01b03166121ea565b600191505090565b6040805180820190915260078152664b696e7461726f60c81b602082015290565b6000610e82610e7b612375565b84846123d6565b5060015b92915050565b60256020526000908152604090205460ff1681565b610ea9612375565b6000546001600160a01b03908116911614610ed65760405162461bcd60e51b8152600401610bcc90614297565b6103e8610ee3828461463a565b10610f005760405162461bcd60e51b8152600401610bcc90613e6d565b601f91909155601e55565b60115490565b6028546001600160a01b031681565b678ac7230489e8000090565b610f34612375565b6000546001600160a01b03908116911614610f615760405162461bcd60e51b8152600401610bcc90614297565b601b839055601c829055601d819055606481610f7d848661463a565b610f87919061463a565b1115610fa55760405162461bcd60e51b8152600401610bcc90614031565b7f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3818385604051610fd893929190614616565b60405180910390a1505050565b610fed612375565b6000546001600160a01b0390811691161461101a5760405162461bcd60e51b8152600401610bcc90614297565b6000811161103a5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861104f82678ac7230489e80000614672565b6110599190614652565b60235550565b601b5481565b6000611072848484612596565b6110e28461107e612375565b6110dd85604051806060016040528060288152602001614700602891396001600160a01b038a166000908152600a60205260408120906110bc612375565b6001600160a01b031681526020810191909152604001600020549190612b23565b6123d6565b5060019392505050565b6110f4612375565b6000546001600160a01b039081169116146111215760405162461bcd60e51b8152600401610bcc90614297565b60188390556019829055601a81905560648161113d848661463a565b611147919061463a565b11156111655760405162461bcd60e51b8152600401610bcc90614193565b7f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620818385604051610fd893929190614616565b60006010548211156111bc5760405162461bcd60e51b8152600401610bcc90613d58565b60006111c6612b5d565b90506111d28382612b80565b9150505b919050565b600990565b6005546001600160a01b031681565b6111f7612375565b6000546001600160a01b039081169116146112245760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff1661125c5760405162461bcd60e51b8152600401610bcc90613ffa565b60005b600f548110156113b657816001600160a01b0316600f828154811061129457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113a457600f80546112bf90600190614691565b815481106112dd57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216918390811061131757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061137d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556113b6565b806113ae816146a8565b91505061125f565b5050565b6000610e826113c7612375565b846110dd85600a60006113d8612375565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612bc9565b6004546001600160a01b031681565b60215481565b611425612375565b6000546001600160a01b039081169116146114525760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19166001179055517f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b62906114a5908390613ba1565b60405180910390a150565b6114b8612375565b6000546001600160a01b039081169116146114e55760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661150b5760405162461bcd60e51b8152600401610bcc90614566565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000678ac7230489e800008311156115595760405162461bcd60e51b8152600401610bcc90614117565b8161157857600061156984612bf8565b50939550610e86945050505050565b600061158384612bf8565b50929550610e86945050505050565b6029546001600160a01b031681565b600b5460ff1681565b602954600160a81b900460ff1681565b6115c2612375565b6000546001600160a01b039081169116146115ef5760405162461bcd60e51b8152600401610bcc90614297565b60006115fa30611a47565b905061160f6064678ac7230489e80000614652565b81101561162e5760405162461bcd60e51b8152600401610bcc90613cfb565b611636612c47565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114a5919061459d565b61166d612375565b6000546001600160a01b0390811691161461169a5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff16156116d35760405162461bcd60e51b8152600401610bcc90613f2a565b600f546032906116e490600161463a565b11156117025760405162461bcd60e51b8152600401610bcc90614443565b6001600160a01b0381166000908152600860205260409020541561175c576001600160a01b03811660009081526008602052604090205461174290611198565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6117ca612375565b6000546001600160a01b039081169116146117f75760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661181d5760405162461bcd60e51b8152600401610bcc90614068565b600580546001600160a01b0319166001600160a01b038381169190911791829055166000908152600d602052604090819020805460ff19166001179055517f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f906114a5908390613ba1565b6001600160a01b03166000908152600d602052604090205460ff1690565b6118ae612375565b6000546001600160a01b039081169116146118db5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166119015760405162461bcd60e51b8152600401610bcc906144b6565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b4290565b61192e612375565b6000546001600160a01b0390811691161461195b5760405162461bcd60e51b8152600401610bcc90614297565b6000811161197b5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861199082678ac7230489e80000614672565b61199a9190614652565b60245550565b60025490565b601f5481565b6119b4612375565b6000546001600160a01b039081169116146119e15760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611a075760405162461bcd60e51b8152600401610bcc9061435a565b600680546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b60225481565b6001600160a01b0381166000908152600e602052604081205460ff1615611a8757506001600160a01b0381166000908152600960205260409020546111d6565b6001600160a01b038216600090815260086020526040902054610e8690611198565b611ab1612375565b6000546001600160a01b03908116911614611ade5760405162461bcd60e51b8152600401610bcc90614297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611b32612375565b6000546001600160a01b03908116911614611b5f5760405162461bcd60e51b8152600401610bcc90614297565b50600b805460ff19169055600190565b611b77612375565b6000546001600160a01b03908116911614611ba45760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611bd9612375565b6000546001600160a01b03908116911614611c065760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038316611c2c5760405162461bcd60e51b8152600401610bcc9061421f565b6001600160a01b038316301415611c555760405162461bcd60e51b8152600401610bcc90613cc4565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611c84903090600401613ba1565b60206040518083038186803b158015611c9c57600080fd5b505afa158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd49190613ae9565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90611d059086908590600401613bcf565b602060405180830381600087803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613ab5565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d8a929190613bcf565b60405180910390a15092915050565b601c5481565b6001600160a01b03166000908152600e602052604090205460ff1690565b6000546001600160a01b031690565b611dd4612375565b6000546001600160a01b03908116911614611e015760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611e275760405162461bcd60e51b8152600401610bcc9061414e565b600380546001600160a01b039081166000908152600d6020526040808220805460ff1990811690915584546001600160a01b03191686851617948590559390921681528190208054909216600117909155517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f122000213756906114a5908390613ba1565b6040805180820190915260078152664b494e5441524f60c81b602082015290565b611ecf612375565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b8152600401610bcc90614297565b6029546001600160a01b0383811691161415611f2a5760405162461bcd60e51b8152600401610bcc90613ecd565b6113b6828261248a565b60275490565b6000610e82611f47612375565b846110dd8560405180606001604052806025815260200161472860259139600a6000611f71612375565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b23565b6003546001600160a01b031681565b6000610e82611fbe612375565b8484612596565b60245481565b601e5481565b60266020526000908152604090205460ff1681565b602954600160b01b900460ff1681565b601a5481565b612004612375565b6000546001600160a01b039081169116146120315760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a5908390613c23565b6006546001600160a01b031681565b60235481565b601d5481565b60195481565b6120a1612375565b6000546001600160a01b039081169116146120ce5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166120f45760405162461bcd60e51b8152600401610bcc9061435a565b600480546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b612161612375565b6000546001600160a01b0390811691161461218e5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19169055517f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e906114a5908390613ba1565b60205481565b60185481565b6121f2612375565b6000546001600160a01b0390811691161461221f5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166122455760405162461bcd60e51b8152600401610bcc90613da2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6122a8612375565b6000546001600160a01b039081169116146122d55760405162461bcd60e51b8152600401610bcc90614297565b602954600160b01b900460ff16156122ff5760405162461bcd60e51b8152600401610bcc906144e4565b6000336001600160a01b03164760405161231890613b9e565b60006040518083038185875af1925050503d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b50505050565b600c6020526000908152604090205460ff1681565b3390565b612381612375565b6000546001600160a01b039081169116146123ae5760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1960ff60b01b19909116600160b01b1716600160a81b17905543602055565b6001600160a01b0383166123fc5760405162461bcd60e51b8152600401610bcc90614387565b6001600160a01b0382166124225760405162461bcd60e51b8152600401610bcc90613de8565b6001600160a01b038084166000818152600a602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061247d90859061459d565b60405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556124d7576124d782611665565b806113b6576113b6826111ef565b6028546124fd9030906001600160a01b0316846123d6565b60285460055460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253d9230928992600092839216904290600401613be8565b6060604051808303818588803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258f9190613b71565b5050505050565b6001600160a01b0383166125bc5760405162461bcd60e51b8152600401610bcc90614315565b6001600160a01b0382166125e25760405162461bcd60e51b8152600401610bcc90613c81565b600081116126025760405162461bcd60e51b8152600401610bcc906142cc565b6001600160a01b0383166000908152600c602052604090205460ff161561263b5760405162461bcd60e51b8152600401610bcc906140d2565b6001600160a01b0382166000908152600c602052604090205460ff16156126745760405162461bcd60e51b8152600401610bcc90613fb7565b602954600160b01b900460ff166126e0576001600160a01b0383166000908152600d602052604090205460ff16806126c457506001600160a01b0382166000908152600d602052604090205460ff165b6126e05760405162461bcd60e51b8152600401610bcc9061452f565b600b5460ff161561289d576126f3611dbd565b6001600160a01b0316836001600160a01b03161415801561272d5750612717611dbd565b6001600160a01b0316826001600160a01b031614155b801561274157506001600160a01b03821615155b801561275857506001600160a01b03821661dead14155b801561276e5750602954600160a01b900460ff16155b1561289d576001600160a01b03831660009081526026602052604090205460ff1680156127b457506001600160a01b03821660009081526025602052604090205460ff16155b156127e0576023548111156127db5760405162461bcd60e51b8152600401610bcc906141ca565b612848565b6001600160a01b03821660009081526026602052604090205460ff16801561282157506001600160a01b03831660009081526025602052604090205460ff16155b15612848576023548111156128485760405162461bcd60e51b8152600401610bcc90613f61565b6001600160a01b03821660009081526025602052604090205460ff1661289d576024548161287584611a47565b61287f919061463a565b111561289d5760405162461bcd60e51b8152600401610bcc90614416565b60006128b6602254602154612bc990919063ffffffff16565b905060006128c330611a47565b60275460295491925082101590600160a01b900460ff161580156128f05750602954600160a81b900460ff165b8015612911575060295460009061290f906001600160a01b0316611a47565b115b801561291d5750600083115b801561294257506001600160a01b0385166000908152600d602052604090205460ff16155b801561296757506001600160a01b0386166000908152600d602052604090205460ff16155b801561298b57506001600160a01b03851660009081526026602052604090205460ff165b80156129945750805b156129a1576129a1612c47565b6001600160a01b0386166000908152600d602052604090205460019060ff16806129e357506001600160a01b0386166000908152600d602052604090205460ff165b156129f5575060036017556000612b0e565b6001600160a01b03871660009081526026602052604090205460ff1615612a7f57612a1e612f4e565b6001601755602054431415612a3c576000601255605a601555612a7a565b602054612a4a90600161463a565b431415612a605760006012556032601555612a7a565b601854601255601a54601954612a76919061463a565b6015555b612b0e565b6001600160a01b03861660009081526026602052604090205460ff1615612b0057612aa8612f4e565b6002601755602054431415612ac6576000601255605a601555612a7a565b602054612ad490600161463a565b431415612aea5760006012556032601555612a7a565b601b54601255601d54601c54612a76919061463a565b612b08612f4e565b60036017555b612b1a87878784612f80565b50505050505050565b60008184841115612b475760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614691565b95945050505050565b6000806000612b6a61309c565b9092509050612b798282612b80565b9250505090565b6000612bc283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613271565b9392505050565b600080612bd6838561463a565b905083811015612bc25760405162461bcd60e51b8152600401610bcc90613e96565b6000806000806000806000806000612c0f8a61329f565b9250925092506000806000612c2d8d8686612c28612b5d565b6132e1565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612c6530611a47565b90506000602254602154612c79919061463a565b90506000612c936002602154612b8090919063ffffffff16565b90506000612ca18483613331565b905047612cad82613373565b6000612cb94783613331565b90506000612cdc86612cd6602254856134f890919063ffffffff16565b90612b80565b90506000612cea8383613331565b90506000612d096103e8612cd6601e54866134f890919063ffffffff16565b90506000612d286103e8612cd6601f54876134f890919063ffffffff16565b9050612d348285614691565b9350612d408185614691565b60006021819055602281905560035460405192965090916001600160a01b03909116908690612d6e90613b9e565b60006040518083038185875af1925050503d8060008114612dab576040519150601f19603f3d011682016040523d82523d6000602084013e612db0565b606091505b50506004546040519192506001600160a01b0316908490612dd090613b9e565b60006040518083038185875af1925050503d8060008114612e0d576040519150601f19603f3d011682016040523d82523d6000602084013e612e12565b606091505b50506006546040519192506001600160a01b0316908390612e3290613b9e565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b505080915050612e8489856124e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188858b604051612eb793929190614616565b60405180910390a167016345785d8a0000471115612f34576003546040516001600160a01b03909116904790612eec90613b9e565b60006040518083038185875af1925050503d8060008114612f29576040519150601f19603f3d011682016040523d82523d6000602084013e612f2e565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b601254158015612f5e5750601554155b15612f6857612f7e565b6012805460135560158054601655600091829055555b565b80612f8d57612f8d612f4e565b6001600160a01b0384166000908152600e602052604090205460ff168015612fce57506001600160a01b0383166000908152600e602052604090205460ff16155b15612fe357612fde84848461353d565b61308f565b6001600160a01b0384166000908152600e602052604090205460ff1615801561302457506001600160a01b0383166000908152600e602052604090205460ff165b1561303457612fde848484613661565b6001600160a01b0384166000908152600e602052604090205460ff16801561307457506001600160a01b0383166000908152600e602052604090205460ff165b1561308457612fde84848461370a565b61308f84848461377d565b8061235a5761235a6137c1565b6010546000908190678ac7230489e80000825b600f54811015613233578260086000600f84815481106130df57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061315857508160096000600f848154811061313157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561317557601054678ac7230489e800009450945050505061326d565b6131c960086000600f848154811061319d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613331565b925061321f60096000600f84815481106131f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613331565b91508061322b816146a8565b9150506130af565b5060105461324990678ac7230489e80000612b80565b82101561326757601054678ac7230489e8000093509350505061326d565b90925090505b9091565b600081836132925760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614652565b6000806000806132ae856137cf565b905060006132bb866137eb565b905060006132d3826132cd8986613331565b90613331565b979296509094509092505050565b60008080806132f088866134f8565b905060006132fe88876134f8565b9050600061330c88886134f8565b9050600061331e826132cd8686613331565b939b939a50919850919650505050505050565b6000612bc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b23565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133b657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344291906139ad565b8160018151811061346357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260285461348991309116846123d6565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c29085906000908690309042906004016145a6565b600060405180830381600087803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b505050505050565b60008261350757506000610e86565b60006135138385614672565b9050826135208583614652565b14612bc25760405162461bcd60e51b8152600401610bcc90614256565b60008060008060008061354f87612bf8565b6001600160a01b038f16600090815260096020526040902054959b509399509197509550935091506135819088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546135b09087613331565b6001600160a01b03808b1660009081526008602052604080822093909355908a16815220546135df9086612bc9565b6001600160a01b03891660009081526008602052604090205561360181613807565b61360b848361396d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161364e919061459d565b60405180910390a3505050505050505050565b60008060008060008061367387612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506136a59087613331565b6001600160a01b03808b16600090815260086020908152604080832094909455918b168152600990915220546136db9084612bc9565b6001600160a01b0389166000908152600960209081526040808320939093556008905220546135df9086612bc9565b60008060008060008061371c87612bf8565b6001600160a01b038f16600090815260096020526040902054959b5093995091975095509350915061374e9088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546136a59087613331565b60008060008060008061378f87612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506135b09087613331565b601354601255601654601555565b6000610e866064612cd6601254856134f890919063ffffffff16565b6000610e866064612cd6601554856134f890919063ffffffff16565b60016017541415613878576015546019546138229083614672565b61382c9190614652565b6021600082825461383d919061463a565b9091555050601554601a546138529083614672565b61385c9190614652565b6022600082825461386d919061463a565b909155506138e49050565b600260175414156138e457601554601c546138939083614672565b61389d9190614652565b602160008282546138ae919061463a565b9091555050601554601d546138c39083614672565b6138cd9190614652565b602260008282546138de919061463a565b90915550505b60006138ee612b5d565b905060006138fc83836134f8565b306000908152600860205260409020549091506139199082612bc9565b30600090815260086020908152604080832093909355600e9052205460ff161561396857306000908152600960205260409020546139579084612bc9565b306000908152600960205260409020555b505050565b60105461397a9083613331565b60105560115461398a9082612bc9565b6011555050565b6000602082840312156139a2578081fd5b8135612bc2816146d9565b6000602082840312156139be578081fd5b8151612bc2816146d9565b600080604083850312156139db578081fd5b82356139e6816146d9565b915060208301356139f6816146d9565b809150509250929050565b600080600060608486031215613a15578081fd5b8335613a20816146d9565b92506020840135613a30816146d9565b929592945050506040919091013590565b60008060408385031215613a53578182fd5b8235613a5e816146d9565b915060208301356139f6816146f1565b60008060408385031215613a80578182fd5b8235613a8b816146d9565b946020939093013593505050565b600060208284031215613aaa578081fd5b8135612bc2816146f1565b600060208284031215613ac6578081fd5b8151612bc2816146f1565b600060208284031215613ae2578081fd5b5035919050565b600060208284031215613afa578081fd5b5051919050565b60008060408385031215613b13578182fd5b8235915060208301356139f6816146f1565b60008060408385031215613b37578182fd5b50508035926020909101359150565b600080600060608486031215613b5a578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215613b85578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015613c5a57858101830151858201604001528201613c3e565b81811115613c6b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252603e908201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060408201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6020808252600f908201526e53706c6974206f766572203130302560881b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526036908201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656040820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606082015260800190565b60208082526023908201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460408201526236b4b760e91b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130302500604082015260600190565b60208082526025908201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252600b908201526a043616e6e6f7420626520360ac1b604082015260600190565b60208082526025908201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060408201526430b236b4b760d91b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252601e908201527f4d757374206b656570206275792074617865732062656c6f7720313030250000604082015260600190565b60208082526035908201527f427579207472616e7366657220616d6f756e742065786365656473207468652060408201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606082015260800190565b6020808252601a908201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526013908201527243616e6e6f742062652030206164647265737360681b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b6020808252604d908201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60408201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60608201526c3ab232b21030b2323932b9b99760991b608082015260a00190565b60208082526014908201527343616e6e6f74207573652030206164647265737360601b604082015260600190565b6020808252602b908201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360408201526a1b89dd081cdd185c9d195960aa1b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604082015260600190565b6020808252601a908201527f43616e6e6f7420626c61636b6c69737420302061646472657373000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156145f55784516001600160a01b0316835293830193918301916001016145d0565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6000821982111561464d5761464d6146c3565b500190565b60008261466d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561468c5761468c6146c3565b500290565b6000828210156146a3576146a36146c3565b500390565b60006000198214156146bc576146bc6146c3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146146ee57600080fd5b50565b80151581146146ee57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220708416d04b7e32dd3d266fa6baf72a4d0fd192364501ddd6bd23fd705d0ba3d964736f6c63430008000033

Deployed Bytecode Sourcemap

8855:33728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18083:1006;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14636:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15633:193::-;;;;;;;;;;-1:-1:-1;15633:193:0;;;;;:::i;:::-;;:::i;11582:63::-;;;;;;;;;;-1:-1:-1;11582:63:0;;;;;:::i;:::-;;:::i;39871:281::-;;;;;;;;;;-1:-1:-1;39871:281:0;;;;;:::i;:::-;;:::i;:::-;;17172:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11917:39::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14919:97::-;;;;;;;;;;;;;:::i;39382:481::-;;;;;;;;;;-1:-1:-1;39382:481:0;;;;;:::i;:::-;;:::i;38524:189::-;;;;;;;;;;-1:-1:-1;38524:189:0;;;;;:::i;:::-;;:::i;10918:30::-;;;;;;;;;;;;;:::i;15834:448::-;;;;;;;;;;-1:-1:-1;15834:448:0;;;;;:::i;:::-;;:::i;38911:463::-;;;;;;;;;;-1:-1:-1;38911:463:0;;;;;:::i;:::-;;:::i;20363:322::-;;;;;;;;;;-1:-1:-1;20363:322:0;;;;;:::i;:::-;;:::i;14826:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9186:102::-;;;;;;;;;;;;;:::i;21197:471::-;;;;;;;;;;-1:-1:-1;21197:471:0;;;;;:::i;:::-;;:::i;16290:302::-;;;;;;;;;;-1:-1:-1;16290:302:0;;;;;:::i;:::-;;:::i;9083:96::-;;;;;;;;;;;;;:::i;11418:37::-;;;;;;;;;;;;;:::i;38207:152::-;;;;;;;;;;-1:-1:-1;38207:152:0;;;;;:::i;:::-;;:::i;28993:175::-;;;;;;;;;;-1:-1:-1;28993:175:0;;;;;:::i;:::-;;:::i;19874:481::-;;;;;;;;;;-1:-1:-1;19874:481:0;;;;;:::i;:::-;;:::i;11963:28::-;;;;;;;;;;;;;:::i;9638:33::-;;;;;;;;;;;;;:::i;12036:41::-;;;;;;;;;;;;;:::i;28619:341::-;;;;;;;;;;;;;:::i;20693:496::-;;;;;;;;;;-1:-1:-1;20693:496:0;;;;;:::i;:::-;;:::i;40598:378::-;;;;;;;;;;-1:-1:-1;40598:378:0;;;;;:::i;:::-;;:::i;38073:126::-;;;;;;;;;;-1:-1:-1;38073:126:0;;;;;:::i;:::-;;:::i;29206:175::-;;;;;;;;;;-1:-1:-1;29206:175:0;;;;;:::i;:::-;;:::i;1710:90::-;;;;;;;;;;;;;:::i;38721:182::-;;;;;;;;;;-1:-1:-1;38721:182:0;;;;;:::i;:::-;;:::i;1612:90::-;;;;;;;;;;;;;:::i;11282:48::-;;;;;;;;;;;;;:::i;41229:261::-;;;;;;;;;;-1:-1:-1;41229:261:0;;;;;:::i;:::-;;:::i;11462:32::-;;;;;;;;;;;;;:::i;15024:198::-;;;;;;;;;;-1:-1:-1;15024:198:0;;;;;:::i;:::-;;:::i;1167:148::-;;;;;;;;;;;;;:::i;17329:121::-;;;;;;;;;;;;;:::i;17458:167::-;;;;;;;;;;-1:-1:-1;17458:167:0;;;;;:::i;:::-;;:::i;41772:488::-;;;;;;;;;;-1:-1:-1;41772:488:0;;;;;:::i;:::-;;:::i;10955:36::-;;;;;;;;;;;;;:::i;17010:154::-;;;;;;;;;;-1:-1:-1;17010:154:0;;;;;:::i;:::-;;:::i;953:79::-;;;;;;;;;;;;;:::i;40160:430::-;;;;;;;;;;-1:-1:-1;40160:430:0;;;;;:::i;:::-;;:::i;14729:89::-;;;;;;;;;;;;;:::i;19227:304::-;;;;;;;;;;-1:-1:-1;19227:304:0;;;;;:::i;:::-;;:::i;19097:122::-;;;;;;;;;;;;;:::i;16600:402::-;;;;;;;;;;-1:-1:-1;16600:402:0;;;;;:::i;:::-;;:::i;8974:102::-;;;;;;;;;;;;;:::i;15230:201::-;;;;;;;;;;-1:-1:-1;15230:201:0;;;;;:::i;:::-;;:::i;11545:30::-;;;;;;;;;;;;;:::i;11232:43::-;;;;;;;;;;;;;:::i;11803:57::-;;;;;;;;;;-1:-1:-1;11803:57:0;;;;;:::i;:::-;;:::i;12084:33::-;;;;;;;;;;;;;:::i;10878:31::-;;;;;;;;;;;;;:::i;41498:171::-;;;;;;;;;;-1:-1:-1;41498:171:0;;;;;:::i;:::-;;:::i;9295:101::-;;;;;;;;;;;;;:::i;11503:35::-;;;;;;;;;;;;;:::i;10998:32::-;;;;;;;;;;;;;:::i;10836:35::-;;;;;;;;;;;;;:::i;40984:237::-;;;;;;;;;;-1:-1:-1;40984:237:0;;;;;:::i;:::-;;:::i;15439:186::-;;;;;;;;;;-1:-1:-1;15439:186:0;;;;;:::i;:::-;;:::i;38367:149::-;;;;;;;;;;-1:-1:-1;38367:149:0;;;;;:::i;:::-;;:::i;11339:37::-;;;;;;;;;;;;;:::i;10800:29::-;;;;;;;;;;;;;:::i;1323:281::-;;;;;;;;;;-1:-1:-1;1323:281:0;;;;;:::i;:::-;;:::i;42312:268::-;;;;;;;;;;;;;:::i;9678:41::-;;;;;;;;;;-1:-1:-1;9678:41:0;;;;;:::i;:::-;;:::i;18083:1006::-;18129:4;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;;;;;;;;;18155:13:::1;::::0;-1:-1:-1;;;18155:13:0;::::1;;;18154:14;18146:70;;;;-1:-1:-1::0;;;18146:70:0::1;;;;;;;:::i;:::-;18229:15;:13;:15::i;:::-;18322:42;18386:58;18322:42:::0;18439:4:::1;18386:25;:58::i;:::-;18455:15;:34:::0;;-1:-1:-1;;;;;;18455:34:0::1;-1:-1:-1::0;;;;;18455:34:0;;::::1;::::0;;;::::1;::::0;;;;18500:58:::1;::::0;18517:4:::1;::::0;18532:15:::1;9959:20;18500:8;:58::i;:::-;18603:16;-1:-1:-1::0;;;;;18603:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18585:70:0::1;;18664:4;18671:16;-1:-1:-1::0;;;;;18671:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18585:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18569:13;:126:::0;;-1:-1:-1;;;;;;18569:126:0::1;-1:-1:-1::0;;;;;18569:126:0;;::::1;;::::0;;;;18706:55:::1;::::0;18740:13:::1;-1:-1:-1::0;18706:25:0::1;:55::i;:::-;18809:13;::::0;18772:58:::1;::::0;-1:-1:-1;;;;;18809:13:0::1;::::0;18772:28:::1;:58::i;:::-;18887:1;18863:21;:25;18841:110;;;;-1:-1:-1::0;;;18841:110:0::1;;;;;;;:::i;:::-;18962:61;18975:24;18993:4;18975:9;:24::i;:::-;19001:21;18962:12;:61::i;:::-;19052:6;::::0;19034:25:::1;::::0;-1:-1:-1;;;;;19052:6:0::1;19034:17;:25::i;:::-;19077:4;19070:11;;;18083:1006:::0;:::o;14636:85::-;14708:5;;;;;;;;;;;;-1:-1:-1;;;14708:5:0;;;;14636:85;:::o;15633:193::-;15735:4;15757:39;15766:12;:10;:12::i;:::-;15780:7;15789:6;15757:8;:39::i;:::-;-1:-1:-1;15814:4:0;15633:193;;;;;:::o;11582:63::-;;;;;;;;;;;;;;;:::o;39871:281::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;40022:4:::1;39995:24;40011:8:::0;39995:13;:24:::1;:::i;:::-;:31;39987:59;;;;-1:-1:-1::0;;;39987:59:0::1;;;;;;;:::i;:::-;40057:27;:43:::0;;;;40111:22:::1;:33:::0;39871:281::o;17172:89::-;17243:10;;17172:89;:::o;11917:39::-;;;-1:-1:-1;;;;;11917:39:0;;:::o;14919:97::-;9959:20;14919:97;:::o;39382:481::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;39533:11:::1;:24:::0;;;39568:17:::1;:36:::0;;;39615:12:::1;:26:::0;;;39724:3:::1;39630:11:::0;39674:31:::1;39588:16:::0;39547:10;39674:31:::1;:::i;:::-;:46;;;;:::i;:::-;:53;;39652:134;;;;-1:-1:-1::0;;;39652:134:0::1;;;;;;;:::i;:::-;39802:53;39813:11;39826:16;39844:10;39802:53;;;;;;;;:::i;:::-;;;;;;;;39382:481:::0;;;:::o;38524:189::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;38626:1:::1;38614:9;:13;38606:37;;;;-1:-1:-1::0;;;38606:37:0::1;;;;;;;:::i;:::-;38701:4;38678:19;38688:9:::0;9959:20:::1;38678:19;:::i;:::-;38677:28;;;;:::i;:::-;38654:20;:51:::0;-1:-1:-1;38524:189:0:o;10918:30::-;;;;:::o;15834:448::-;15968:4;15985:36;15995:6;16003:9;16014:6;15985:9;:36::i;:::-;16032:220;16055:6;16076:12;:10;:12::i;:::-;16103:138;16159:6;16103:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16103:19:0;;;;;;:11;:19;;;;;;16123:12;:10;:12::i;:::-;-1:-1:-1;;;;;16103:33:0;;;;;;;;;;;;-1:-1:-1;16103:33:0;;;:138;:37;:138::i;:::-;16032:8;:220::i;:::-;-1:-1:-1;16270:4:0;15834:448;;;;;:::o;38911:463::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;39058:10:::1;:22:::0;;;39091:16:::1;:34:::0;;;39136:11:::1;:24:::0;;;39240:3:::1;39150:10:::0;39193:29:::1;39110:15:::0;39071:9;39193:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;39171:130;;;;-1:-1:-1::0;;;39171:130:0::1;;;;;;;:::i;:::-;39317:49;39327:10;39339:15;39356:9;39317:49;;;;;;;;:::i;20363:322::-:0;20457:7;20515;;20504;:18;;20482:110;;;;-1:-1:-1;;;20482:110:0;;;;;;;:::i;:::-;20603:19;20625:10;:8;:10::i;:::-;20603:32;-1:-1:-1;20653:24:0;:7;20603:32;20653:11;:24::i;:::-;20646:31;;;20363:322;;;;:::o;14826:85::-;10210:1;14826:85;:::o;9186:102::-;;;-1:-1:-1;;;;;9186:102:0;;:::o;21197:471::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21275:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21267:56;;;;-1:-1:-1::0;;;21267:56:0::1;;;;;;;:::i;:::-;21339:9;21334:327;21358:9;:16:::0;21354:20;::::1;21334:327;;;21416:7;-1:-1:-1::0;;;;;21400:23:0::1;:9;21410:1;21400:12;;;;;;-1:-1:-1::0;;;21400:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21400:12:0::1;:23;21396:254;;;21459:9;21469:16:::0;;:20:::1;::::0;21488:1:::1;::::0;21469:20:::1;:::i;:::-;21459:31;;;;;;-1:-1:-1::0;;;21459:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;21444:9:::1;:12:::0;;-1:-1:-1;;;;;21459:31:0;;::::1;::::0;21454:1;;21444:12;::::1;;;-1:-1:-1::0;;;21444:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21444:46:0::1;-1:-1:-1::0;;;;;21444:46:0;;::::1;;::::0;;21509:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21548:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21548:28:0::1;::::0;;21595:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;21595:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21595:15:0;;;;;-1:-1:-1;;;;;;21595:15:0::1;::::0;;;;;21629:5:::1;;21396:254;21376:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21334:327;;;;21197:471:::0;:::o;16290:302::-;16407:4;16429:133;16452:12;:10;:12::i;:::-;16479:7;16501:50;16540:10;16501:11;:25;16513:12;:10;:12::i;:::-;-1:-1:-1;;;;;16501:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16501:25:0;;;:34;;;;;;;;;;;:38;:50::i;9083:96::-;;;-1:-1:-1;;;;;9083:96:0;;:::o;11418:37::-;;;;:::o;38207:152::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38278:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;38278:34:0::1;38308:4;38278:34;::::0;;38328:23;::::1;::::0;::::1;::::0;38297:7;;38328:23:::1;:::i;:::-;;;;;;;;38207:152:::0;:::o;28993:175::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29072:21:0;::::1;29064:60;;;;-1:-1:-1::0;;;29064:60:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29135:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;29135:25:0::1;29156:4;29135:25;::::0;;28993:175::o;19874:481::-;19994:7;9959:20;20027:7;:18;;20019:62;;;;-1:-1:-1;;;20019:62:0;;;;;;;:::i;:::-;20097:17;20092:256;;20132:15;20161:19;20172:7;20161:10;:19::i;:::-;-1:-1:-1;20131:49:0;;-1:-1:-1;20195:14:0;;-1:-1:-1;;;;;20195:14:0;20092:256;20245:23;20280:19;20291:7;20280:10;:19::i;:::-;-1:-1:-1;20242:57:0;;-1:-1:-1;20314:22:0;;-1:-1:-1;;;;;20314:22:0;11963:28;;;-1:-1:-1;;;;;11963:28:0;;:::o;9638:33::-;;;;;;:::o;12036:41::-;;;-1:-1:-1;;;12036:41:0;;;;;:::o;28619:341::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;28674:23:::1;28700:24;28718:4;28700:9;:24::i;:::-;28674:50:::0;-1:-1:-1;28776:13:0::1;28786:3;9959:20;28776:13;:::i;:::-;28757:15;:32;;28735:144;;;;-1:-1:-1::0;;;28735:144:0::1;;;;;;;:::i;:::-;28890:10;:8;:10::i;:::-;28916:36;28936:15;28916:36;;;;;;:::i;20693:496::-:0;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20774:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20773:21;20765:61;;;;-1:-1:-1::0;;;20765:61:0::1;;;;;;;:::i;:::-;20859:9;:16:::0;20883:2:::1;::::0;20859:20:::1;::::0;20878:1:::1;20859:20;:::i;:::-;:26;;20837:153;;;;-1:-1:-1::0;;;20837:153:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21005:16:0;::::1;21024:1;21005:16:::0;;;:7:::1;:16;::::0;;;;;:20;21001:109:::1;;-1:-1:-1::0;;;;;21081:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21061:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21042:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21001:109:::1;-1:-1:-1::0;;;;;21120:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21120:27:0::1;21143:4;21120:27:::0;;::::1;::::0;;;21158:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21158:23:0::1;::::0;;::::1;::::0;;20693:496::o;40598:378::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40704:31:0;::::1;40682:118;;;;-1:-1:-1::0;;;40682:118:0::1;;;;;;;:::i;:::-;40811:16;:45:::0;;-1:-1:-1;;;;;;40811:45:0::1;-1:-1:-1::0;;;;;40811:45:0;;::::1;::::0;;;::::1;::::0;;;;40886:16:::1;-1:-1:-1::0;40867:36:0;;;:18:::1;:36;::::0;;;;;;:43;;-1:-1:-1;;40867:43:0::1;-1:-1:-1::0;40867:43:0::1;::::0;;40926:42;::::1;::::0;::::1;::::0;40811:45;;40926:42:::1;:::i;38073:126::-:0;-1:-1:-1;;;;;38164:27:0;38140:4;38164:27;;;:18;:27;;;;;;;;;38073:126::o;29206:175::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29290:21:0;::::1;29282:54;;;;-1:-1:-1::0;;;29282:54:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29347:18:0::1;29368:5;29347:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;29347:26:0::1;::::0;;29206:175::o;1710:90::-;1777:15;1710:90;:::o;38721:182::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;38818:1:::1;38803:12;:16;38795:40;;;;-1:-1:-1::0;;;38795:40:0::1;;;;;;;:::i;:::-;38891:4;38865:22;38875:12:::0;9959:20:::1;38865:22;:::i;:::-;38864:31;;;;:::i;:::-;38846:15;:49:::0;-1:-1:-1;38721:182:0:o;1612:90::-;1685:9;;1612:90;:::o;11282:48::-;;;;:::o;41229:261::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41321:30:0;::::1;41313:62;;;;-1:-1:-1::0;;;41313:62:0::1;;;;;;;:::i;:::-;41386:15;:43:::0;;-1:-1:-1;;;;;;41386:43:0::1;-1:-1:-1::0;;;;;41386:43:0;;::::1;;::::0;;;;41459:15:::1;-1:-1:-1::0;41440:35:0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;41440:42:0::1;-1:-1:-1::0;41440:42:0::1;::::0;;41229:261::o;11462:32::-;;;;:::o;15024:198::-;-1:-1:-1;;;;;15114:20:0;;15090:7;15114:20;;;:11;:20;;;;;;;;15110:49;;;-1:-1:-1;;;;;;15143:16:0;;;;;;:7;:16;;;;;;15136:23;;15110:49;-1:-1:-1;;;;;15197:16:0;;;;;;:7;:16;;;;;;15177:37;;:19;:37::i;1167:148::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;1274:1:::1;1258:6:::0;;1237:40:::1;::::0;-1:-1:-1;;;;;1258:6:0;;::::1;::::0;1237:40:::1;::::0;1274:1;;1237:40:::1;1305:1;1288:19:::0;;-1:-1:-1;;;;;;1288:19:0::1;::::0;;1167:148::o;17329:121::-;17381:4;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;17398:14:0::1;:22:::0;;-1:-1:-1;;17398:22:0::1;::::0;;;17329:121;:::o;17458:167::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17571:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17571:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17458:167::o;41772:488::-;41886:10;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41922:20:0;::::1;41914:59;;;;-1:-1:-1::0;;;41914:59:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41992:23:0;::::1;42010:4;41992:23;;41984:64;;;;-1:-1:-1::0;;;41984:64:0::1;;;;;;;:::i;:::-;42086:39;::::0;-1:-1:-1;;;42086:39:0;;42059:24:::1;::::0;-1:-1:-1;;;;;42086:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;42119:4:::1;::::0;42086:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42144:46;::::0;-1:-1:-1;;;42144:46:0;;42059:66;;-1:-1:-1;;;;;;42144:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;42168:3;;42059:66;;42144:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42136:54;;42206:46;42227:6;42235:16;42206:46;;;;;;;:::i;:::-;;;;;;;;1150:1;41772:488:::0;;;;:::o;10955:36::-;;;;:::o;17010:154::-;-1:-1:-1;;;;;17136:20:0;17107:4;17136:20;;;:11;:20;;;;;;;;;17010:154::o;953:79::-;991:7;1018:6;-1:-1:-1;;;;;1018:6:0;953:79;:::o;40160:430::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40268:31:0;::::1;40246:118;;;;-1:-1:-1::0;;;40246:118:0::1;;;;;;;:::i;:::-;40394:16;::::0;;-1:-1:-1;;;;;40394:16:0;;::::1;40414:5;40375:36:::0;;;:18:::1;:36;::::0;;;;;:44;;-1:-1:-1;;40375:44:0;;::::1;::::0;;;40430:45;;-1:-1:-1;;;;;;40430:45:0::1;::::0;;::::1;;::::0;;;;40505:16;;;::::1;40486:36:::0;;;;;:43;;;;::::1;-1:-1:-1::0;40486:43:0::1;::::0;;;40545:37;::::1;::::0;::::1;::::0;40430:45;;40545:37:::1;:::i;14729:89::-:0;14803:7;;;;;;;;;;;;-1:-1:-1;;;14803:7:0;;;;14729:89;:::o;19227:304::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;19371:13:::1;::::0;-1:-1:-1;;;;;19363:21:0;;::::1;19371:13:::0;::::1;19363:21;;19341:128;;;;-1:-1:-1::0;;;19341:128:0::1;;;;;;;:::i;:::-;19482:41;19511:4;19517:5;19482:28;:41::i;19097:122::-:0;19188:23;;19097:122;:::o;16600:402::-;16722:4;16744:228;16767:12;:10;:12::i;:::-;16794:7;16816:145;16873:15;16816:145;;;;;;;;;;;;;;;;;:11;:25;16828:12;:10;:12::i;:::-;-1:-1:-1;;;;;16816:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16816:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;8974:102::-;;;-1:-1:-1;;;;;8974:102:0;;:::o;15230:201::-;15337:4;15359:42;15369:12;:10;:12::i;:::-;15383:9;15394:6;15359:9;:42::i;11545:30::-;;;;:::o;11232:43::-;;;;:::o;11803:57::-;;;;;;;;;;;;;;;:::o;12084:33::-;;;-1:-1:-1;;;12084:33:0;;;;;:::o;10878:31::-;;;;:::o;41498:171::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;41575:21:::1;:32:::0;;-1:-1:-1;;;;41575:32:0::1;-1:-1:-1::0;;;41575:32:0;::::1;;;;::::0;;41623:38:::1;::::0;::::1;::::0;::::1;::::0;41575:32;;41623:38:::1;:::i;9295:101::-:0;;;-1:-1:-1;;;;;9295:101:0;;:::o;11503:35::-;;;;:::o;10998:32::-;;;;:::o;10836:35::-;;;;:::o;40984:237::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41072:25:0;::::1;41064:57;;;;-1:-1:-1::0;;;41064:57:0::1;;;;;;;:::i;:::-;41132:10;:33:::0;;-1:-1:-1;;;;;;41132:33:0::1;-1:-1:-1::0;;;;;41132:33:0;;::::1;;::::0;;;;41195:10:::1;-1:-1:-1::0;41176:30:0;;;:18:::1;:30;::::0;;;;:37;;-1:-1:-1;;41176:37:0::1;-1:-1:-1::0;41176:37:0::1;::::0;;40984:237::o;15439:186::-;-1:-1:-1;;;;;15590:18:0;;;15558:7;15590:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15439:186::o;38367:149::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38436:27:0;::::1;38466:5;38436:27:::0;;;:18:::1;:27;::::0;;;;;;:35;;-1:-1:-1;;38436:35:0::1;::::0;;38487:21;::::1;::::0;::::1;::::0;38455:7;;38487:21:::1;:::i;11339:37::-:0;;;;:::o;10800:29::-;;;;:::o;1323:281::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1426:22:0;::::1;1404:110;;;;-1:-1:-1::0;;;1404:110:0::1;;;;;;;:::i;:::-;1551:6;::::0;;1530:38:::1;::::0;-1:-1:-1;;;;;1530:38:0;;::::1;::::0;1551:6;::::1;::::0;1530:38:::1;::::0;::::1;1579:6;:17:::0;;-1:-1:-1;;;;;;1579:17:0::1;-1:-1:-1::0;;;;;1579:17:0;;;::::1;::::0;;;::::1;::::0;;1323:281::o;42312:268::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;42379:13:::1;::::0;-1:-1:-1;;;42379:13:0;::::1;;;42378:14;42370:70;;;;-1:-1:-1::0;;;42370:70:0::1;;;;;;;:::i;:::-;42451:12;42496:10;-1:-1:-1::0;;;;;42488:24:0::1;42521:21;42488:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;42312:268:0:o;9678:41::-;;;;;;;;;;;;;;;:::o;177:115::-;273:10;177:115;:::o;17679:166::-;1090:12;:10;:12::i;:::-;1080:6;;-1:-1:-1;;;;;1080:6:0;;;:22;;;1072:67;;;;-1:-1:-1;;;1072:67:0;;;;;;;:::i;:::-;17734:13:::1;:20:::0;;-1:-1:-1;;;;;;;;17734:20:0;;::::1;-1:-1:-1::0;;;17734:20:0::1;17765:28;-1:-1:-1::0;;;17765:28:0::1;::::0;;17825:12:::1;17804:18;:33:::0;17679:166::o;21676:371::-;-1:-1:-1;;;;;21803:19:0;;21795:68;;;;-1:-1:-1;;;21795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21882:21:0;;21874:68;;;;-1:-1:-1;;;21874:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21955:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22007:32;;;;;21985:6;;22007:32;:::i;:::-;;;;;;;;21676:371;;;:::o;19539:327::-;-1:-1:-1;;;;;19622:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;19622:39:0;;;;;;;;19672:31;:37;;;;;;;:45;;;;;;;;;;;19728:61;;19754:23;19772:4;19754:17;:23::i;:::-;19804:5;19799:60;;19826:21;19842:4;19826:15;:21::i;29896:425::-;30009:15;;29977:62;;29994:4;;-1:-1:-1;;;;;30009:15:0;30027:11;29977:8;:62::i;:::-;30050:15;;30256:16;;30050:263;;-1:-1:-1;;;30050:263:0;;-1:-1:-1;;;;;30050:15:0;;;;:31;;30090:9;;30050:263;;30124:4;;30144:11;;30050:15;;;;30256:16;;30287:15;;30050:263;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29896:425;;:::o;22055:4570::-;-1:-1:-1;;;;;22177:18:0;;22169:68;;;;-1:-1:-1;;;22169:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22256:16:0;;22248:64;;;;-1:-1:-1;;;22248:64:0;;;;;;;:::i;:::-;22340:1;22331:6;:10;22323:64;;;;-1:-1:-1;;;22323:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22407:15:0;;;;;;:9;:15;;;;;;;;22406:16;22398:66;;;;-1:-1:-1;;;22398:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22484:13:0;;;;;;:9;:13;;;;;;;;22483:14;22475:62;;;;-1:-1:-1;;;22475:62:0;;;;;;;:::i;:::-;22555:13;;-1:-1:-1;;;22555:13:0;;;;22550:185;;-1:-1:-1;;;;;22611:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22639:22:0;;;;;;:18;:22;;;;;;;;22611:50;22585:138;;;;-1:-1:-1;;;22585:138:0;;;;;;;:::i;:::-;22751:14;;;;22747:1316;;;22812:7;:5;:7::i;:::-;-1:-1:-1;;;;;22804:15:0;:4;-1:-1:-1;;;;;22804:15:0;;;:49;;;;;22846:7;:5;:7::i;:::-;-1:-1:-1;;;;;22840:13:0;:2;-1:-1:-1;;;;;22840:13:0;;;22804:49;:86;;;;-1:-1:-1;;;;;;22874:16:0;;;;22804:86;:128;;;;-1:-1:-1;;;;;;22911:21:0;;22925:6;22911:21;;22804:128;:166;;;;-1:-1:-1;22954:16:0;;-1:-1:-1;;;22954:16:0;;;;22953:17;22804:166;22782:1270;;;-1:-1:-1;;;;;23059:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23116:35:0;;;;;;:31;:35;;;;;;;;23115:36;23059:92;23033:753;;;23238:20;;23228:6;:30;;23194:169;;;;-1:-1:-1;;;23194:169:0;;;;;;;:::i;:::-;23033:753;;;-1:-1:-1;;;;;23461:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23516:37:0;;;;;;:31;:37;;;;;;;;23515:38;23461:92;23435:351;;;23640:20;;23630:6;:30;;23596:170;;;;-1:-1:-1;;;23596:170:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23811:35:0;;;;;;:31;:35;;;;;;;;23806:231;;23931:15;;23921:6;23905:13;23915:2;23905:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;23871:146;;;;-1:-1:-1;;;23871:146:0;;;;;;;:::i;:::-;24075:25;24103:69;24144:17;;24103:22;;:26;;:69;;;;:::i;:::-;24075:97;;24183:28;24214:24;24232:4;24214:9;:24::i;:::-;24317:23;;24401:16;;24183:55;;-1:-1:-1;24280:60:0;;;;-1:-1:-1;;;24401:16:0;;;;24400:17;:55;;;;-1:-1:-1;24434:21:0;;-1:-1:-1;;;24434:21:0;;;;24400:55;:100;;;;-1:-1:-1;24482:13:0;;24499:1;;24472:24;;-1:-1:-1;;;;;24482:13:0;24472:9;:24::i;:::-;:28;24400:100;:138;;;;;24537:1;24517:17;:21;24400:138;:178;;;;-1:-1:-1;;;;;;24556:22:0;;;;;;:18;:22;;;;;;;;24555:23;24400:178;:220;;;;-1:-1:-1;;;;;;24596:24:0;;;;;;:18;:24;;;;;;;;24595:25;24400:220;:266;;;;-1:-1:-1;;;;;;24637:29:0;;;;;;:25;:29;;;;;;;;24400:266;:306;;;;;24683:23;24400:306;24382:373;;;24733:10;:8;:10::i;:::-;-1:-1:-1;;;;;24888:24:0;;24767:12;24888:24;;;:18;:24;;;;;;24782:4;;24888:24;;;:50;;-1:-1:-1;;;;;;24916:22:0;;;;;;:18;:22;;;;;;;;24888:50;24884:1680;;;-1:-1:-1;10702:1:0;24985:15;:26;24965:5;24884:1680;;;-1:-1:-1;;;;;25099:31:0;;;;;;:25;:31;;;;;;;;25095:1458;;;25151:14;:12;:14::i;:::-;10618:1;25184:15;:21;25244:18;;25228:12;:34;25224:418;;;25297:1;25287:7;:11;25337:2;25321:13;:18;25224:418;;;25385:18;;:22;;25406:1;25385:22;:::i;:::-;25369:12;:38;25365:277;;;25442:1;25432:7;:11;25482:2;25466:13;:18;25365:277;;;25543:10;;25533:7;:20;25611:11;;25592:16;;:30;;25611:11;25592:30;:::i;:::-;25576:13;:46;25365:277;25095:1458;;;-1:-1:-1;;;;;25701:29:0;;;;;;:25;:29;;;;;;;;25697:856;;;25751:14;:12;:14::i;:::-;10658:1;25784:15;:22;25952:18;;25936:12;:34;25932:421;;;26005:1;25995:7;:11;26045:2;26029:13;:18;25932:421;;;26093:18;;:22;;26114:1;26093:22;:::i;:::-;26077:12;:38;26073:280;;;26150:1;26140:7;:11;26190:2;26174:13;:18;26073:280;;;26251:11;;26241:7;:21;26321:12;;26301:17;;:32;;26321:12;26301:32;:::i;25697:856::-;26447:14;:12;:14::i;:::-;10702:1;26480:15;:26;25697:856;26576:41;26591:4;26597:2;26601:6;26609:7;26576:14;:41::i;:::-;22055:4570;;;;;;;:::o;7538:226::-;7658:7;7694:12;7686:6;;;;7678:29;;;;-1:-1:-1;;;7678:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7718:9:0;7730:5;7734:1;7730;:5;:::i;:::-;7718:17;7538:226;-1:-1:-1;;;;;7538:226:0:o;35730:164::-;35772:7;35793:15;35810;35829:19;:17;:19::i;:::-;35792:56;;-1:-1:-1;35792:56:0;-1:-1:-1;35866:20:0;35792:56;;35866:11;:20::i;:::-;35859:27;;;;35730:164;:::o;8030:132::-;8088:7;8115:39;8119:1;8122;8115:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8108:46;8030:132;-1:-1:-1;;;8030:132:0:o;7205:181::-;7263:7;;7295:5;7299:1;7295;:5;:::i;:::-;7283:17;;7324:1;7319;:6;;7311:46;;;;-1:-1:-1;;;7311:46:0;;;;;;;:::i;33998:742::-;34098:7;34120;34142;34164;34186;34208;34258:23;34296:12;34323:18;34355:20;34367:7;34355:11;:20::i;:::-;34243:132;;;;;;34387:15;34404:23;34429:12;34445:113;34471:7;34493:4;34512:10;34537;:8;:10::i;:::-;34445:11;:113::i;:::-;34386:172;;;;-1:-1:-1;34386:172:0;;-1:-1:-1;34662:15:0;;-1:-1:-1;34692:4:0;;-1:-1:-1;34711:10:0;;-1:-1:-1;33998:742:0;;-1:-1:-1;;;;;33998:742:0:o;26633:1920::-;13272:16;:23;;-1:-1:-1;;;;13272:23:0;-1:-1:-1;;;13272:23:0;;;;26710:24:::1;26728:4;26710:9;:24::i;:::-;26684:50;;26745:25;26798:17;;26773:22;;:42;;;;:::i;:::-;26745:70;;26877:26;26906:29;26933:1;26906:22;;:26;;:29;;;;:::i;:::-;26877:58:::0;-1:-1:-1;26946:26:0::1;26975:39;:15:::0;26877:58;26975:19:::1;:39::i;:::-;26946:68:::0;-1:-1:-1;27055:21:0::1;27089:36;26946:68:::0;27089:16:::1;:36::i;:::-;27138:18;27159:44;:21;27185:17:::0;27159:25:::1;:44::i;:::-;27138:65;;27216:23;27242:80;27294:17;27242:33;27257:17;;27242:10;:14;;:33;;;;:::i;:::-;:37:::0;::::1;:80::i;:::-;27216:106:::0;-1:-1:-1;27335:23:0::1;27361:31;:10:::0;27216:106;27361:14:::1;:31::i;:::-;27335:57;;27405:17;27425:77;27487:4;27425:43;27445:22;;27425:15;:19;;:43;;;;:::i;:77::-;27405:97;;27513:22;27538:86;27619:4;27538:62;27572:27;;27538:15;:33;;:62;;;;:::i;:86::-;27513:111:::0;-1:-1:-1;27635:28:0::1;27654:9:::0;27635:28;::::1;:::i;:::-;::::0;-1:-1:-1;27674:33:0::1;27693:14:::0;27635:28;27674:33:::1;:::i;:::-;27745:1;27720:22;:26:::0;;;27757:17:::1;:21:::0;;;27818:16:::1;::::0;27810:82:::1;::::0;27674:33;;-1:-1:-1;27745:1:0;;-1:-1:-1;;;;;27818:16:0;;::::1;::::0;27674:33;;27810:82:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27925:10:0::1;::::0;27917:48:::1;::::0;27791:101;;-1:-1:-1;;;;;;27925:10:0::1;::::0;27950:9;;27917:48:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27998:15:0::1;::::0;27990:82:::1;::::0;27903:62;;-1:-1:-1;;;;;;27998:15:0::1;::::0;28028:14;;27990:82:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27976:96;;;;;28085:49;28098:18;28118:15;28085:12;:49::i;:::-;28150:121;28179:18;28212:15;28242:18;28150:121;;;;;;;;:::i;:::-;;;;;;;;28403:4;28379:21;:28;28375:171;;;28446:16;::::0;28438:96:::1;::::0;-1:-1:-1;;;;;28446:16:0;;::::1;::::0;28494:21:::1;::::0;28438:96:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28424:110:0;;-1:-1:-1;;28375:171:0::1;-1:-1:-1::0;;13318:16:0;:24;;-1:-1:-1;;;;13318:24:0;;;-1:-1:-1;;;;;;;;;26633:1920:0:o;37697:235::-;37744:7;;:12;:34;;;;-1:-1:-1;37760:13:0;;:18;37744:34;37740:47;;;37780:7;;37740:47;37817:7;;;37799:15;:25;37859:13;;;37835:21;:37;-1:-1:-1;37885:11:0;;;;37907:17;37697:235;:::o;30329:708::-;30485:7;30480:28;;30494:14;:12;:14::i;:::-;-1:-1:-1;;;;;30525:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30549:22:0;;;;;;:11;:22;;;;;;;;30548:23;30525:46;30521:467;;;30588:48;30610:6;30618:9;30629:6;30588:21;:48::i;:::-;30521:467;;;-1:-1:-1;;;;;30659:19:0;;;;;;:11;:19;;;;;;;;30658:20;:46;;;;-1:-1:-1;;;;;;30682:22:0;;;;;;:11;:22;;;;;;;;30658:46;30654:334;;;30721:46;30741:6;30749:9;30760:6;30721:19;:46::i;30654:334::-;-1:-1:-1;;;;;30789:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30812:22:0;;;;;;:11;:22;;;;;;;;30789:45;30785:203;;;30851:48;30873:6;30881:9;30892:6;30851:21;:48::i;30785:203::-;30932:44;30950:6;30958:9;30969:6;30932:17;:44::i;:::-;31005:7;31000:29;;31014:15;:13;:15::i;35902:605::-;36000:7;;35953;;;;9959:20;35953:7;36054:338;36078:9;:16;36074:20;;36054:338;;;36162:7;36138;:21;36146:9;36156:1;36146:12;;;;;;-1:-1:-1;;;36146:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36146:12:0;36138:21;;;;;;;;;;;;;:31;;:83;;;36214:7;36190;:21;36198:9;36208:1;36198:12;;;;;;-1:-1:-1;;;36198:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36198:12:0;36190:21;;;;;;;;;;;;;:31;36138:83;36116:146;;;36245:7;;9959:20;36237:25;;;;;;;;;36116:146;36287:34;36299:7;:21;36307:9;36317:1;36307:12;;;;;;-1:-1:-1;;;36307:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36307:12:0;36299:21;;;;;;;;;;;;;36287:7;;:11;:34::i;:::-;36277:44;;36346:34;36358:7;:21;36366:9;36376:1;36366:12;;;;;;-1:-1:-1;;;36366:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36366:12:0;36358:21;;;;;;;;;;;;;36346:7;;:11;:34::i;:::-;36336:44;-1:-1:-1;36096:3:0;;;;:::i;:::-;;;;36054:338;;;-1:-1:-1;36416:7:0;;:20;;9959;36416:11;:20::i;:::-;36406:7;:30;36402:61;;;36446:7;;9959:20;36438:25;;;;;;;;36402:61;36482:7;;-1:-1:-1;36491:7:0;-1:-1:-1;35902:605:0;;;:::o;8170:312::-;8290:7;8325:12;8318:5;8310:28;;;;-1:-1:-1;;;8310:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8349:9:0;8361:5;8365:1;8361;:5;:::i;34748:412::-;34849:7;34871;34893;34928:12;34943:24;34959:7;34943:15;:24::i;:::-;34928:39;;34978:18;34999:30;35021:7;34999:21;:30::i;:::-;34978:51;-1:-1:-1;35040:23:0;35066:33;34978:51;35066:17;:7;35078:4;35066:11;:17::i;:::-;:21;;:33::i;:::-;35040:59;35135:4;;-1:-1:-1;35141:10:0;;-1:-1:-1;34748:412:0;;-1:-1:-1;;;34748:412:0:o;35168:554::-;35367:7;;;;35464:24;:7;35476:11;35464;:24::i;:::-;35446:42;-1:-1:-1;35499:12:0;35514:21;:4;35523:11;35514:8;:21::i;:::-;35499:36;-1:-1:-1;35546:18:0;35567:27;:10;35582:11;35567:14;:27::i;:::-;35546:48;-1:-1:-1;35605:23:0;35631:33;35546:48;35631:17;:7;35643:4;35631:11;:17::i;:33::-;35683:7;;;;-1:-1:-1;35709:4:0;;-1:-1:-1;35168:554:0;;-1:-1:-1;;;;;;;35168:554:0:o;7394:136::-;7452:7;7479:43;7483:1;7486;7479:43;;;;;;;;;;;;;;;;;:3;:43::i;29389:499::-;29479:16;;;29493:1;29479:16;;;;;;;;29455:21;;29479:16;;;;;;;;;;-1:-1:-1;29479:16:0;29455:40;;29524:4;29506;29511:1;29506:7;;;;;;-1:-1:-1;;;29506:7:0;;;;;;;;;-1:-1:-1;;;;;29506:23:0;;;:7;;;;;;;;;;:23;;;;29550:15;;:22;;;-1:-1:-1;;;29550:22:0;;;;:15;;;;;:20;;:22;;;;;29506:7;;29550:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29540:4;29545:1;29540:7;;;;;;-1:-1:-1;;;29540:7:0;;;;;;;;;-1:-1:-1;;;;;29540:32:0;;;:7;;;;;;;;;:32;29615:15;;29583:62;;29600:4;;29615:15;29633:11;29583:8;:62::i;:::-;29656:15;;:224;;-1:-1:-1;;;29656:224:0;;-1:-1:-1;;;;;29656:15:0;;;;:66;;:224;;29737:11;;29656:15;;29807:4;;29834;;29854:15;;29656:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29389:499;;:::o;7772:250::-;7830:7;7854:6;7850:47;;-1:-1:-1;7884:1:0;7877:8;;7850:47;7909:9;7921:5;7925:1;7921;:5;:::i;:::-;7909:17;-1:-1:-1;7954:1:0;7945:5;7949:1;7909:17;7945:5;:::i;:::-;:10;7937:56;;;;-1:-1:-1;;;7937:56:0;;;;;;;:::i;32384:686::-;32535:15;32565:23;32603:12;32630:23;32668:12;32695:18;32727:19;32738:7;32727:10;:19::i;:::-;-1:-1:-1;;;;;32775:15:0;;;;;;:7;:15;;;;;;32520:226;;-1:-1:-1;32520:226:0;;-1:-1:-1;32520:226:0;;-1:-1:-1;32520:226:0;-1:-1:-1;32520:226:0;-1:-1:-1;32520:226:0;-1:-1:-1;32775:28:0;;32795:7;32775:19;:28::i;:::-;-1:-1:-1;;;;;32757:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32832:7;:15;;;;:28;;32852:7;32832:19;:28::i;:::-;-1:-1:-1;;;;;32814:15:0;;;;;;;:7;:15;;;;;;:46;;;;32892:18;;;;;;;:39;;32915:15;32892:22;:39::i;:::-;-1:-1:-1;;;;;32871:18:0;;;;;;:7;:18;;;;;:60;32942:26;32957:10;32942:14;:26::i;:::-;32979:23;32991:4;32997;32979:11;:23::i;:::-;33035:9;-1:-1:-1;;;;;33018:44:0;33027:6;-1:-1:-1;;;;;33018:44:0;;33046:15;33018:44;;;;;;:::i;:::-;;;;;;;;32384:686;;;;;;;;;:::o;31678:698::-;31827:15;31857:23;31895:12;31922:23;31960:12;31987:18;32019:19;32030:7;32019:10;:19::i;:::-;-1:-1:-1;;;;;32067:15:0;;;;;;:7;:15;;;;;;31812:226;;-1:-1:-1;31812:226:0;;-1:-1:-1;31812:226:0;;-1:-1:-1;31812:226:0;-1:-1:-1;31812:226:0;-1:-1:-1;31812:226:0;-1:-1:-1;32067:28:0;;31812:226;32067:19;:28::i;:::-;-1:-1:-1;;;;;32049:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32127:18;;;;;:7;:18;;;;;:39;;32150:15;32127:22;:39::i;:::-;-1:-1:-1;;;;;32106:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32198:7;:18;;;;:39;;32221:15;32198:22;:39::i;33078:757::-;33229:15;33259:23;33297:12;33324:23;33362:12;33389:18;33421:19;33432:7;33421:10;:19::i;:::-;-1:-1:-1;;;;;33469:15:0;;;;;;:7;:15;;;;;;33214:226;;-1:-1:-1;33214:226:0;;-1:-1:-1;33214:226:0;;-1:-1:-1;33214:226:0;-1:-1:-1;33214:226:0;-1:-1:-1;33214:226:0;-1:-1:-1;33469:28:0;;33489:7;33469:19;:28::i;:::-;-1:-1:-1;;;;;33451:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33526:7;:15;;;;:28;;33546:7;33526:19;:28::i;31045:625::-;31192:15;31222:23;31260:12;31287:23;31325:12;31352:18;31384:19;31395:7;31384:10;:19::i;:::-;-1:-1:-1;;;;;31432:15:0;;;;;;:7;:15;;;;;;31177:226;;-1:-1:-1;31177:226:0;;-1:-1:-1;31177:226:0;;-1:-1:-1;31177:226:0;-1:-1:-1;31177:226:0;-1:-1:-1;31177:226:0;-1:-1:-1;31432:28:0;;31177:226;31432:19;:28::i;37940:125::-;37994:15;;37984:7;:25;38036:21;;38020:13;:37;37940:125::o;37377:130::-;37441:7;37468:31;37493:5;37468:20;37480:7;;37468;:11;;:20;;;;:::i;37515:174::-;37612:7;37644:37;37675:5;37644:26;37656:13;;37644:7;:11;;:26;;;;:::i;36515:854::-;10618:1;36582:15;;:22;36578:489;;;36715:13;;36678:16;;36665:29;;:10;:29;:::i;:::-;36664:64;;;;:::i;:::-;36621:22;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;36793:13:0;;36778:11;;36765:24;;:10;:24;:::i;:::-;36764:42;;;;:::i;:::-;36743:17;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;36578:489:0;;-1:-1:-1;36578:489:0;;10658:1;36828:15;;:23;36824:243;;;36963:13;;36925:17;;36912:30;;:10;:30;:::i;:::-;36911:65;;;;:::i;:::-;36868:22;;:108;;;;;;;:::i;:::-;;;;-1:-1:-1;;37042:13:0;;37026:12;;37013:25;;:10;:25;:::i;:::-;37012:43;;;;:::i;:::-;36991:17;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;36824:243:0;37077:19;37099:10;:8;:10::i;:::-;37077:32;-1:-1:-1;37120:18:0;37141:27;:10;37077:32;37141:14;:27::i;:::-;37220:4;37204:22;;;;:7;:22;;;;;;37120:48;;-1:-1:-1;37204:38:0;;37120:48;37204:26;:38::i;:::-;37195:4;37179:22;;;;:7;:22;;;;;;;;:63;;;;37257:11;:26;;;;;;37253:108;;;37339:4;37323:22;;;;:7;:22;;;;;;:38;;37350:10;37323:26;:38::i;:::-;37314:4;37298:22;;;;:7;:22;;;;;:63;37253:108;36515:854;;;:::o;33843:147::-;33921:7;;:17;;33933:4;33921:11;:17::i;:::-;33911:7;:27;33962:10;;:20;;33977:4;33962:14;:20::i;:::-;33949:10;:33;-1:-1:-1;;33843:147:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:396::-;;;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:33;1665:5;1638:33;:::i;:::-;1690:5;-1:-1:-1;1747:2:1;1732:18;;1719:32;1760;1719;1760;:::i;1829:327::-;;;1958:2;1946:9;1937:7;1933:23;1929:32;1926:2;;;1979:6;1971;1964:22;1926:2;2023:9;2010:23;2042:33;2069:5;2042:33;:::i;:::-;2094:5;2146:2;2131:18;;;;2118:32;;-1:-1:-1;;;1916:240:1:o;2161:253::-;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2335:9;2322:23;2354:30;2378:5;2354:30;:::i;2419:257::-;;2539:2;2527:9;2518:7;2514:23;2510:32;2507:2;;;2560:6;2552;2545:22;2507:2;2597:9;2591:16;2616:30;2640:5;2616:30;:::i;2681:190::-;;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2814:6;2806;2799:22;2761:2;-1:-1:-1;2842:23:1;;2751:120;-1:-1:-1;2751:120:1:o;2876:194::-;;2999:2;2987:9;2978:7;2974:23;2970:32;2967:2;;;3020:6;3012;3005:22;2967:2;-1:-1:-1;3048:16:1;;2957:113;-1:-1:-1;2957:113:1:o;3075:321::-;;;3201:2;3189:9;3180:7;3176:23;3172:32;3169:2;;;3222:6;3214;3207:22;3169:2;3263:9;3250:23;3240:33;;3323:2;3312:9;3308:18;3295:32;3336:30;3360:5;3336:30;:::i;3401:258::-;;;3530:2;3518:9;3509:7;3505:23;3501:32;3498:2;;;3551:6;3543;3536:22;3498:2;-1:-1:-1;;3579:23:1;;;3649:2;3634:18;;;3621:32;;-1:-1:-1;3488:171:1:o;3664:326::-;;;;3810:2;3798:9;3789:7;3785:23;3781:32;3778:2;;;3831:6;3823;3816:22;3778:2;-1:-1:-1;;3859:23:1;;;3929:2;3914:18;;3901:32;;-1:-1:-1;3980:2:1;3965:18;;;3952:32;;3768:222;-1:-1:-1;3768:222:1:o;3995:316::-;;;;4152:2;4140:9;4131:7;4127:23;4123:32;4120:2;;;4173:6;4165;4158:22;4120:2;4207:9;4201:16;4191:26;;4257:2;4246:9;4242:18;4236:25;4226:35;;4301:2;4290:9;4286:18;4280:25;4270:35;;4110:201;;;;;:::o;4316:205::-;4516:3;4507:14::o;4526:203::-;-1:-1:-1;;;;;4690:32:1;;;;4672:51;;4660:2;4645:18;;4627:102::o;4958:304::-;-1:-1:-1;;;;;5188:15:1;;;5170:34;;5240:15;;5235:2;5220:18;;5213:43;5120:2;5105:18;;5087:175::o;5267:274::-;-1:-1:-1;;;;;5459:32:1;;;;5441:51;;5523:2;5508:18;;5501:34;5429:2;5414:18;;5396:145::o;5546:615::-;-1:-1:-1;;;;;5913:15:1;;;5895:34;;5960:2;5945:18;;5938:34;;;;6003:2;5988:18;;5981:34;;;;6046:2;6031:18;;6024:34;;;;6095:15;;;6089:3;6074:19;;6067:44;5875:3;6127:19;;6120:35;;;;5844:3;5829:19;;5811:350::o;6166:187::-;6331:14;;6324:22;6306:41;;6294:2;6279:18;;6261:92::o;6590:603::-;;6731:2;6760;6749:9;6742:21;6792:6;6786:13;6835:6;6830:2;6819:9;6815:18;6808:34;6860:4;6873:140;6887:6;6884:1;6881:13;6873:140;;;6982:14;;;6978:23;;6972:30;6948:17;;;6967:2;6944:26;6937:66;6902:10;;6873:140;;;7031:6;7028:1;7025:13;7022:2;;;7101:4;7096:2;7087:6;7076:9;7072:22;7068:31;7061:45;7022:2;-1:-1:-1;7177:2:1;7156:15;-1:-1:-1;;7152:29:1;7137:45;;;;7184:2;7133:54;;6711:482;-1:-1:-1;;;6711:482:1:o;7198:399::-;7400:2;7382:21;;;7439:2;7419:18;;;7412:30;7478:34;7473:2;7458:18;;7451:62;-1:-1:-1;;;7544:2:1;7529:18;;7522:33;7587:3;7572:19;;7372:225::o;7602:352::-;7804:2;7786:21;;;7843:2;7823:18;;;7816:30;7882;7877:2;7862:18;;7855:58;7945:2;7930:18;;7776:178::o;7959:426::-;8161:2;8143:21;;;8200:2;8180:18;;;8173:30;8239:34;8234:2;8219:18;;8212:62;8310:32;8305:2;8290:18;;8283:60;8375:3;8360:19;;8133:252::o;8390:406::-;8592:2;8574:21;;;8631:2;8611:18;;;8604:30;8670:34;8665:2;8650:18;;8643:62;-1:-1:-1;;;8736:2:1;8721:18;;8714:40;8786:3;8771:19;;8564:232::o;8801:402::-;9003:2;8985:21;;;9042:2;9022:18;;;9015:30;9081:34;9076:2;9061:18;;9054:62;-1:-1:-1;;;9147:2:1;9132:18;;9125:36;9193:3;9178:19;;8975:228::o;9208:398::-;9410:2;9392:21;;;9449:2;9429:18;;;9422:30;9488:34;9483:2;9468:18;;9461:62;-1:-1:-1;;;9554:2:1;9539:18;;9532:32;9596:3;9581:19;;9382:224::o;9611:399::-;9813:2;9795:21;;;9852:2;9832:18;;;9825:30;9891:34;9886:2;9871:18;;9864:62;-1:-1:-1;;;9957:2:1;9942:18;;9935:33;10000:3;9985:19;;9785:225::o;10015:339::-;10217:2;10199:21;;;10256:2;10236:18;;;10229:30;-1:-1:-1;;;10290:2:1;10275:18;;10268:45;10345:2;10330:18;;10189:165::o;10359:351::-;10561:2;10543:21;;;10600:2;10580:18;;;10573:30;10639:29;10634:2;10619:18;;10612:57;10701:2;10686:18;;10533:177::o;10715:421::-;10917:2;10899:21;;;10956:2;10936:18;;;10929:30;10995:34;10990:2;10975:18;;10968:62;11066:27;11061:2;11046:18;;11039:55;11126:3;11111:19;;10889:247::o;11141:351::-;11343:2;11325:21;;;11382:2;11362:18;;;11355:30;11421:29;11416:2;11401:18;;11394:57;11483:2;11468:18;;11315:177::o;11497:418::-;11699:2;11681:21;;;11738:2;11718:18;;;11711:30;11777:34;11772:2;11757:18;;11750:62;-1:-1:-1;;;11843:2:1;11828:18;;11821:52;11905:3;11890:19;;11671:244::o;11920:399::-;12122:2;12104:21;;;12161:2;12141:18;;;12134:30;12200:34;12195:2;12180:18;;12173:62;-1:-1:-1;;;12266:2:1;12251:18;;12244:33;12309:3;12294:19;;12094:225::o;12324:347::-;12526:2;12508:21;;;12565:2;12545:18;;;12538:30;12604:25;12599:2;12584:18;;12577:53;12662:2;12647:18;;12498:173::o;12676:355::-;12878:2;12860:21;;;12917:2;12897:18;;;12890:30;12956:33;12951:2;12936:18;;12929:61;13022:2;13007:18;;12850:181::o;13036:401::-;13238:2;13220:21;;;13277:2;13257:18;;;13250:30;13316:34;13311:2;13296:18;;13289:62;-1:-1:-1;;;13382:2:1;13367:18;;13360:35;13427:3;13412:19;;13210:227::o;13442:335::-;13644:2;13626:21;;;13683:2;13663:18;;;13656:30;-1:-1:-1;;;13717:2:1;13702:18;;13695:41;13768:2;13753:18;;13616:161::o;13782:401::-;13984:2;13966:21;;;14023:2;14003:18;;;13996:30;14062:34;14057:2;14042:18;;14035:62;-1:-1:-1;;;14128:2:1;14113:18;;14106:35;14173:3;14158:19;;13956:227::o;14188:355::-;14390:2;14372:21;;;14429:2;14409:18;;;14402:30;14468:33;14463:2;14448:18;;14441:61;14534:2;14519:18;;14362:181::o;14548:401::-;14750:2;14732:21;;;14789:2;14769:18;;;14762:30;14828:34;14823:2;14808:18;;14801:62;-1:-1:-1;;;14894:2:1;14879:18;;14872:35;14939:3;14924:19;;14722:227::o;14954:354::-;15156:2;15138:21;;;15195:2;15175:18;;;15168:30;15234:32;15229:2;15214:18;;15207:60;15299:2;15284:18;;15128:180::o;15313:417::-;15515:2;15497:21;;;15554:2;15534:18;;;15527:30;15593:34;15588:2;15573:18;;15566:62;-1:-1:-1;;;15659:2:1;15644:18;;15637:51;15720:3;15705:19;;15487:243::o;15735:350::-;15937:2;15919:21;;;15976:2;15956:18;;;15949:30;16015:28;16010:2;15995:18;;15988:56;16076:2;16061:18;;15909:176::o;16090:397::-;16292:2;16274:21;;;16331:2;16311:18;;;16304:30;16370:34;16365:2;16350:18;;16343:62;-1:-1:-1;;;16436:2:1;16421:18;;16414:31;16477:3;16462:19;;16264:223::o;16492:356::-;16694:2;16676:21;;;16713:18;;;16706:30;16772:34;16767:2;16752:18;;16745:62;16839:2;16824:18;;16666:182::o;16853:405::-;17055:2;17037:21;;;17094:2;17074:18;;;17067:30;17133:34;17128:2;17113:18;;17106:62;-1:-1:-1;;;17199:2:1;17184:18;;17177:39;17248:3;17233:19;;17027:231::o;17263:401::-;17465:2;17447:21;;;17504:2;17484:18;;;17477:30;17543:34;17538:2;17523:18;;17516:62;-1:-1:-1;;;17609:2:1;17594:18;;17587:35;17654:3;17639:19;;17437:227::o;17669:343::-;17871:2;17853:21;;;17910:2;17890:18;;;17883:30;-1:-1:-1;;;17944:2:1;17929:18;;17922:49;18003:2;17988:18;;17843:169::o;18017:400::-;18219:2;18201:21;;;18258:2;18238:18;;;18231:30;18297:34;18292:2;18277:18;;18270:62;-1:-1:-1;;;18363:2:1;18348:18;;18341:34;18407:3;18392:19;;18191:226::o;18422:407::-;18624:2;18606:21;;;18663:2;18643:18;;;18636:30;18702:34;18697:2;18682:18;;18675:62;-1:-1:-1;;;18768:2:1;18753:18;;18746:41;18819:3;18804:19;;18596:233::o;18834:343::-;19036:2;19018:21;;;19075:2;19055:18;;;19048:30;-1:-1:-1;;;19109:2:1;19094:18;;19087:49;19168:2;19153:18;;19008:169::o;19182:481::-;19384:2;19366:21;;;19423:2;19403:18;;;19396:30;19462:34;19457:2;19442:18;;19435:62;19533:34;19528:2;19513:18;;19506:62;-1:-1:-1;;;19599:3:1;19584:19;;19577:44;19653:3;19638:19;;19356:307::o;19668:344::-;19870:2;19852:21;;;19909:2;19889:18;;;19882:30;-1:-1:-1;;;19943:2:1;19928:18;;19921:50;20003:2;19988:18;;19842:170::o;20017:407::-;20219:2;20201:21;;;20258:2;20238:18;;;20231:30;20297:34;20292:2;20277:18;;20270:62;-1:-1:-1;;;20363:2:1;20348:18;;20341:41;20414:3;20399:19;;20191:233::o;20429:350::-;20631:2;20613:21;;;20670:2;20650:18;;;20643:30;20709:28;20704:2;20689:18;;20682:56;20770:2;20755:18;;20603:176::o;20784:350::-;20986:2;20968:21;;;21025:2;21005:18;;;20998:30;21064:28;21059:2;21044:18;;21037:56;21125:2;21110:18;;20958:176::o;21139:177::-;21285:25;;;21273:2;21258:18;;21240:76::o;21321:983::-;;21631:3;21620:9;21616:19;21662:6;21651:9;21644:25;21688:2;21726:6;21721:2;21710:9;21706:18;21699:34;21769:3;21764:2;21753:9;21749:18;21742:31;21793:6;21828;21822:13;21859:6;21851;21844:22;21897:3;21886:9;21882:19;21875:26;;21936:2;21928:6;21924:15;21910:29;;21957:4;21970:195;21984:6;21981:1;21978:13;21970:195;;;22049:13;;-1:-1:-1;;;;;22045:39:1;22033:52;;22140:15;;;;22105:12;;;;22081:1;21999:9;21970:195;;;-1:-1:-1;;;;;;;22221:32:1;;;;22216:2;22201:18;;22194:60;-1:-1:-1;;;22285:3:1;22270:19;22263:35;22182:3;21592:712;-1:-1:-1;;;21592:712:1:o;22309:319::-;22511:25;;;22567:2;22552:18;;22545:34;;;;22610:2;22595:18;;22588:34;22499:2;22484:18;;22466:162::o;22633:184::-;22805:4;22793:17;;;;22775:36;;22763:2;22748:18;;22730:87::o;22822:128::-;;22893:1;22889:6;22886:1;22883:13;22880:2;;;22899:18;;:::i;:::-;-1:-1:-1;22935:9:1;;22870:80::o;22955:217::-;;23021:1;23011:2;;-1:-1:-1;;;23046:31:1;;23100:4;23097:1;23090:15;23128:4;23053:1;23118:15;23011:2;-1:-1:-1;23157:9:1;;23001:171::o;23177:168::-;;23283:1;23279;23275:6;23271:14;23268:1;23265:21;23260:1;23253:9;23246:17;23242:45;23239:2;;;23290:18;;:::i;:::-;-1:-1:-1;23330:9:1;;23229:116::o;23350:125::-;;23418:1;23415;23412:8;23409:2;;;23423:18;;:::i;:::-;-1:-1:-1;23460:9:1;;23399:76::o;23480:135::-;;-1:-1:-1;;23540:17:1;;23537:2;;;23560:18;;:::i;:::-;-1:-1:-1;23607:1:1;23596:13;;23527:88::o;23620:127::-;23681:10;23676:3;23672:20;23669:1;23662:31;23712:4;23709:1;23702:15;23736:4;23733:1;23726:15;23752:133;-1:-1:-1;;;;;23829:31:1;;23819:42;;23809:2;;23875:1;23872;23865:12;23809:2;23799:86;:::o;23890:120::-;23978:5;23971:13;23964:21;23957:5;23954:32;23944:2;;24000:1;23997;23990:12

Swarm Source

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