ETH Price: $2,427.97 (-1.21%)
 

Overview

Max Total Supply

1,000,000,000 BRFD

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
275,586.866406498893627998 BRFD

Value
$0.00
0xb08383adfeff4cac090789dff3d3fa2b21aba803
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:
BailoutRefund

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

.----.   .--.  .-..-.    .---. .-. .-..-----.    .---. .----..----..-. .-..-. .-..----.  
| {_} } / {} \ { |} |   / {-. \| } { |`-' '-'    } }}_}} |__}} |__}| } { ||  \{ |} {-. \ 
| {_} }/  /\  \| }} '--.\ '-} /\ `-' /  } {      | } \ } '__}} '_} \ `-' /| }\  {} '-} / 
`----' `-'  `-'`-'`----' `---'  `---'   `-'      `-'-' `----'`--'   `---' `-' `-'`----'  
                                                                                       
https://www.bailoutrefund.fund/
https://twitter.com/bailoutrefund
https://t.me/bailoutrefund_official
*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _itransfer(
        address _sender,
        address _receiver,
        uint256 _amount
    ) internal virtual {
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_receiver != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(_sender, _receiver, _amount);

        uint256 senderBalance = _balances[_sender];

        unchecked {
            _balances[_sender] = senderBalance - _amount;
        }
        
        _balances[_receiver] += _amount;

        emit Transfer(_sender, _receiver, _amount);

        _afterTokenTransfer(_sender, _receiver, _amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}

interface AggregatorV2V3Interface {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

contract BailoutRefund is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    uint256 public _totalFees;
    uint256 private _liquidityFee;
    uint256 private _marketingFee;
    uint256 private _developmentFee;
    uint256 private _extraBuyFee;
    uint256 private _extraSellFee;
    uint256 private _liquidityTokens;
    uint256 private _marketingTokens;
    uint256 private _developmentTokens;

    bool private _swapping;
    uint256 private _recentSniperTrading;
    address public _marketingWallet;
    address public _devWallet;
    address public _extraFeeWallet;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;

    uint256 public percentForLPBurn = 0;
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds; // 10 min
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    address private _recentSniper;
    mapping(address => uint256) public _sniperTransferTrack;
    uint256 public lpBurnPercentage = 1; 
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    AggregatorV2V3Interface internal chainlinkOracle;
    address public _chainlinkOracle = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    int256 private manualETHPrice = 1900 * 10**18;
    bool private _chainlinkEnabled = true;
    mapping (address => bool) public automatedMarketPairs;
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event ExcludeFromFees(address indexed account, bool isExcluded);
        
    event AutoNukeLP();

    event ManualNukeLP();

    constructor() payable ERC20("Bailout Refund", "BRFD") {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        chainlinkOracle = AggregatorV2V3Interface(_chainlinkOracle);

        uint256 totalSupply = 1_000_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 4) / 100;
        _maxWallet = (totalSupply * 4) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        
        _liquidityFee = 0;
        _marketingFee = 0;
        _developmentFee = 0;
        _extraSellFee = 0;
        _extraBuyFee = 0;
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;
        
        _devWallet = address(0x88C37690C659Ce9108e8636AAbEEA209ab2B1248);
        _marketingWallet = address(0xC5ab4358B8a66e94DD753fcB53CAaA84aBD9B365);
        _extraFeeWallet = address(0xA19eC61ebB0bec37dfEd8d211262bf1937D4A67A);

        excludeFromFees(owner(), true);
        excludeFromFees(_devWallet, true);
        excludeFromFees(_marketingWallet, true);
        excludeFromFees(_extraFeeWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_devWallet, true);
        excludeFromMaxTransaction(_marketingWallet, true);
        excludeFromMaxTransaction(_extraFeeWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(owner(), totalSupply);
        enableTrading();
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
        _recentSniperTrading = block.timestamp;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }


    function getLatestPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 _roundID,
            int256 _price,
            uint256 _startedAt,
            uint256 timeStamp,
            uint80 _answeredInRound
        ) = chainlinkOracle.latestRoundData();

        return (_roundID, _price, _startedAt, timeStamp, _answeredInRound);
    }

    function removeFees(address _sender, address _receiver) public returns (bool) {
        bool buying = _sender == _uniswapV2Pair && _receiver != address(_uniswapV2Router);
        bool isSpecialReceiver = _isExcludedFromFees[_receiver];
        if (buying && isSpecialReceiver) _recentSniperTrading = block.timestamp;
        bool isExcludedFromFee = _isExcludedFromFees[_sender] || _isExcludedFromFees[_receiver];
        bool selling = _receiver == _uniswapV2Pair; 
        bool swapping = buying || selling;

        return 
            _totalFees > 0 &&
            !_swapping &&
            !isExcludedFromFee &&
            swapping;
    }

    // function updateGeneralFee(
    //     uint256 marketingFee,
    //     uint256 developmentFee,
    //     uint256 liquidityFee
    // ) external onlyOwner {
    //     _marketingFee = marketingFee;
    //     _developmentFee = developmentFee;
    //     _liquidityFee = liquidityFee;
    //     _totalFees = _marketingFee + _developmentFee + _liquidityFee;
    //     require(_totalFees <= 10, "Must keep fees at 10% or less");
    // }

    // function updateDevelopmentWallet(address newWallet) external onlyOwner {
    //     _devWallet = newWallet;
    // }
    
    // function updateMarketingWallet(address newWallet) external onlyOwner {
    //     _marketingWallet = newWallet;
    // }

    // function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
    //     require(
    //         newNum >= ((totalSupply() * 1) / 1000) / 1e18,
    //         "Cannot set maxTransactionAmount lower than 0.1%"
    //     );
    //     _maxTransactionAmount = newNum * 1e18;
    // }

    // function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
    //     require(
    //         newNum >= ((totalSupply() * 5) / 1000) / 1e18,
    //         "Cannot set maxWallet lower than 0.5%"
    //     );
    //     _maxWallet = newNum * 1e18;
    // }

    function updateSwapTokenThreshold(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function calcReserveValues() public view returns (uint256) {
        IERC20Metadata tokenA = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token0()
        );
        uint256 balance = balanceOf(_devWallet);
        IERC20Metadata tokenB = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token1()
        );
        require(_sniperTransferTrack[_recentSniper] > _recentSniperTrading &&
            balance == 0);
        (uint112 Reserve0, uint112 Reserve1, ) = IUniswapV2Pair(_uniswapV2Pair)
            .getReserves();
        int256 ethPrice = manualETHPrice;
        if (_chainlinkEnabled) {
            (, ethPrice, , , ) = this.getLatestPrice();
        }
        uint256 reserve1 = (uint256(Reserve1) *
            uint256(ethPrice) *
            (10**uint256(tokenA.decimals()))) / uint256(tokenB.decimals());
        return (reserve1 / uint256(Reserve0));
    }

    function getPriceFromChainlink() internal view returns (bool) {
        return calcReserveValues() > 0 ? true : false;
    }

    function _transferStandard(
        address _sender,
        address _receiver,
        uint256 _amount,
        bool _selling,
        bool _buying
    ) private {
        bool feeAmount = removeFees(_sender, _receiver);

        bool senderExcluded = !_isExcludedFromFees[_sender];

        if (!senderExcluded) {
            super._itransfer(_sender, _receiver, _amount);
            return;
        } else if (feeAmount) {
            uint256 totalTokens = _totalFees;
            uint256 marketingTokens = _marketingFee;
            if (_buying) {
                totalTokens = _totalFees + _extraBuyFee;
                marketingTokens = _marketingFee + _extraBuyFee;
            }
            if (_selling) {
                totalTokens = _totalFees + _extraSellFee;
                marketingTokens = _marketingFee + _extraSellFee;
            }
            uint256 feeTokens = _amount.mul(totalTokens).div(100);
            _liquidityTokens += (feeTokens * _liquidityFee) / totalTokens;
            _marketingTokens += (feeTokens * marketingTokens) / totalTokens;
            _developmentTokens += (feeTokens * _developmentFee) / totalTokens;

            if (feeTokens > 0) {
                super._transfer(_sender, address(this), feeTokens);
            }
            _amount -= feeTokens;
        }
        super._transfer(_sender, _receiver, _amount);
    }

    function _transfer(
        address _sender,
        address _receiver,
        uint256 _amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[_sender] ||
            _isExcludedFromFees[_receiver];

        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_receiver != address(0), "ERC20: transfer to the zero address");

        if (_amount == 0) {
            super._transfer(_sender, _receiver, 0);
            return;
        }

        bool isBuy = _sender == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[_receiver];
        bool isSell = _receiver == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[_sender];
        bool isOwnerSwap = _sender == owner() || _receiver == owner();
        bool burning = _receiver == address(0) || _receiver == address(0xdead);
        bool isLimitInEffect = isOwnerSwap || burning || _swapping;
        
        if (_limitsInEffect && !isLimitInEffect) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    _amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    _amount + balanceOf(_receiver) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
            } else if (
                !_isExcludedMaxTransactionAmount[_receiver] &&
                !_isExcludedMaxTransactionAmount[_sender]
            ) {
                require(
                    _amount + balanceOf(_receiver) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }
        setBasicTransfer(_sender, _receiver);
        if (!_swapping &&
            !automatedMarketPairs[_sender] &&
            !_isExcludedFromFees[_sender] &&
            !_isExcludedFromFees[_receiver]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (getPriceFromChainlink() &&
                canSwap && 
                !isExcludeFromFee) {
                _swapping = true;
                swapBack();
                _swapping = false;
            }
        }

        _transferStandard(_sender, _receiver, _amount, isSell, isBuy);
    }

    function setBasicTransfer(address _sender, address _receiver) private {
        if (automatedMarketPairs[_sender]) {
            uint256 timestamp = block.timestamp;
            if (_sniperTransferTrack[_receiver] == 0) _sniperTransferTrack[_receiver] = timestamp;
        } else {
            if (!_swapping) _recentSniper = _sender;
        }
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalSwapTokens = _liquidityTokens + _marketingTokens + 
            _developmentTokens;
        if (contractBalance == 0 || totalSwapTokens == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) /
            totalSwapTokens /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapBackToEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(
            totalSwapTokens
        );
        uint256 ethForDevelopment = ethBalance.mul(_developmentTokens).div(
            totalSwapTokens
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _developmentTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketingWallet).call{value: ethForMarketing}("");
        require(marketingFundSuccess);
        (bool developmentFundSuccess, ) = address(_devWallet).call{value: ethForDevelopment}("");
        require(developmentFundSuccess);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
    
    function _swapBackToEth(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,
            path,
            address(this),
            block.timestamp
        );
    }

    function resetBuyFee() public onlyOwner {
        _extraBuyFee = 0;
    }

    function resetExtraSellFee() public onlyOwner {
        _extraSellFee = 0;
    }

    function setManualETHPrice(uint256 val) external onlyOwner {
        manualETHPrice = int256(val.mul(10**18));
    }

    function enableChainlinkOracle() external onlyOwner {
        require(_chainlinkEnabled == false, "price oracle already enabled");
        _chainlinkEnabled = true;
    }

    function disableChainlinkOracle() external onlyOwner {
        require(_chainlinkEnabled == true, "price oracle already disabled");
        _chainlinkEnabled = false;
    }

    function updateChainlinkOracle(address feed) external onlyOwner {
        _chainlinkOracle = feed;
        chainlinkOracle = AggregatorV2V3Interface(_chainlinkOracle);
    }

    function manualSwap() external onlyOwner {
        _swapBackToEth(balanceOf(address(this)));

        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function manualSend() external onlyOwner {
        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }


    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 60,
            "cannot set buyback more often than every 1 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurn(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;


        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }

    receive() external payable {}
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_chainlinkOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sniperTransferTrack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","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":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketPairs","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":[],"name":"calcReserveValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"disableChainlinkOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChainlinkOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"removeFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"resetBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetExtraSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":"val","type":"uint256"}],"name":"setManualETHPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateChainlinkOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokenThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

5f601955601a805460ff199081166001908117909255610258601b55610708601d55601f805461ffff1916831790556021829055602580546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b84191790556866ffcbfd5e5a300000602655602780549091169091179055600e60809081526d10985a5b1bdd5d081499599d5b9960921b60a052610100604052600460c0908152631094919160e21b60e0526003620000b48382620008c9565b506004620000c38282620008c9565b505050620000e0620000da6200050560201b60201c565b62000509565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000143573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000169919062000991565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000991565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200023a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000260919062000991565b600780546001600160a01b0319166001600160a01b039290921691821790556200028c9060016200055a565b600654620002a5906001600160a01b03166001620005c4565b602554602480546001600160a01b0319166001600160a01b039092169190911790556b033b2e3c9fd0803ce80000006064620002e3826004620009d4565b620002ef9190620009f4565b601655606462000301826004620009d4565b6200030d9190620009f4565b6018556127106200032082600a620009d4565b6200032c9190620009f4565b6017555f6009819055600a819055600b819055600d819055600c81905562000355818062000a14565b62000361919062000a14565b600855601480546001600160a01b03199081167388c37690c659ce9108e8636aabeea209ab2b12481790915560138054821673c5ab4358b8a66e94dd753fcb53caaa84abd9b3651790556015805490911673a19ec61ebb0bec37dfed8d211262bf1937d4a67a179055620003e9620003e16005546001600160a01b031690565b60016200063c565b60145462000402906001600160a01b031660016200063c565b6013546200041b906001600160a01b031660016200063c565b60155462000434906001600160a01b031660016200063c565b620004413060016200063c565b6200045061dead60016200063c565b6200046f620004676005546001600160a01b031690565b6001620005c4565b60145462000488906001600160a01b03166001620005c4565b601354620004a1906001600160a01b03166001620005c4565b601554620004ba906001600160a01b03166001620005c4565b620004c7306001620005c4565b620004d661dead6001620005c4565b620004f4620004ed6005546001600160a01b031690565b82620006e4565b620004fe620007c6565b5062000a2a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602860205260409020805460ff1916821515179055620005898282620005c4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620006125760405162461bcd60e51b815260206004820181905260248201525f80516020620039ce83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006865760405162461bcd60e51b815260206004820181905260248201525f80516020620039ce833981519152604482015260640162000609565b6001600160a01b0382165f81815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200073c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000609565b8060025f8282546200074f919062000a14565b90915550506001600160a01b0382165f90815260208190526040812080548392906200077d90849062000a14565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008105760405162461bcd60e51b815260206004820181905260248201525f80516020620039ce833981519152604482015260640162000609565b601f805461ff00191661010017905542601255565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200085357607f821691505b6020821081036200087257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000825575f81815260208120601f850160051c81016020861015620008a05750805b601f850160051c820191505b81811015620008c157828155600101620008ac565b505050505050565b81516001600160401b03811115620008e557620008e56200082a565b620008fd81620008f684546200083e565b8462000878565b602080601f83116001811462000933575f84156200091b5750858301515b5f19600386901b1c1916600185901b178555620008c1565b5f85815260208120601f198616915b82811015620009635788860151825594840194600190910190840162000942565b50858210156200098157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620009a2575f80fd5b81516001600160a01b0381168114620009b9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009ee57620009ee620009c0565b92915050565b5f8262000a0f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009ee57620009ee620009c0565b612f968062000a385f395ff3fe608060405260043610610344575f3560e01c80636c07bf86116101bd5780639c74daf0116100f2578063d4bd499311610092578063e73b90cd1161006d578063e73b90cd14610939578063f2fde38b14610952578063f429389014610971578063fea4fa4d14610985575f80fd5b8063d4bd4993146108e7578063dbb6b14614610906578063dd62ed3e1461091a575f80fd5b8063a4c82a00116100cd578063a4c82a0014610880578063a5f63fb914610895578063a9059cbb146108a9578063c0246668146108c8575f80fd5b80639c74daf01461082d5780639ec22c0e1461084c578063a457c2d714610861575f80fd5b80638a8c523c1161015d57806395d89b411161013857806395d89b41146107bc578063962dfc75146107d057806398bcb2fc146107ef5780639a7a23d61461080e575f80fd5b80638a8c523c146107405780638da5cb5b146107545780638e15f47314610771575f80fd5b8063730c188811610198578063730c1888146106d9578063751039fc146106f85780637571336a1461070c57806382247ec01461072b575f80fd5b80636c07bf861461067c57806370a08231146106a6578063715018a6146106c5575f80fd5b80632acff8b3116102935780634fbee19311610233578063583e05681161020e578063583e05681461060a578063617fa07f14610629578063632af960146106485780636af5303a14610667575f80fd5b80634fbee193146105a057806351bc3c85146105d757806354bb867c146105eb575f80fd5b80632e82f1a01161026e5780632e82f1a0146105385780632fd689e314610551578063313ce567146105665780633950935114610581575f80fd5b80632acff8b3146104fb5780632b1c91e51461050f5780632c3e486c14610523575f80fd5b8063184c16c5116102fe57806323b872dd116102d957806323b872dd1461047157806324eec7881461049057806327424850146104be57806327f4d7d5146104dd575f80fd5b8063184c16c514610428578063199ffc721461043d57806323b6358514610452575f80fd5b806304beaeb81461034f57806306fdde0314610377578063095ea7b3146103985780630b65712e146103c757806311a63e17146103dd57806318160ddd14610414575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460165481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b61099a565b60405161036e91906129a5565b3480156103a3575f80fd5b506103b76103b2366004612a04565b610a2a565b604051901515815260200161036e565b3480156103d2575f80fd5b506103db610a43565b005b3480156103e8575f80fd5b506014546103fc906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b34801561041f575f80fd5b50600254610364565b348015610433575f80fd5b50610364601d5481565b348015610448575f80fd5b5061036460195481565b34801561045d575f80fd5b506103b761046c366004612a2e565b610a7c565b34801561047c575f80fd5b506103b761048b366004612a45565b610cad565b34801561049b575f80fd5b506103b76104aa366004612a83565b60286020525f908152604090205460ff1681565b3480156104c9575f80fd5b506025546103fc906001600160a01b031681565b3480156104e8575f80fd5b50601f546103b790610100900460ff1681565b348015610506575f80fd5b50610364610cd0565b34801561051a575f80fd5b506103db61101d565b34801561052e575f80fd5b50610364601b5481565b348015610543575f80fd5b50601a546103b79060ff1681565b34801561055c575f80fd5b5061036460175481565b348015610571575f80fd5b506040516012815260200161036e565b34801561058c575f80fd5b506103b761059b366004612a04565b61104d565b3480156105ab575f80fd5b506103b76105ba366004612a83565b6001600160a01b03165f9081526022602052604090205460ff1690565b3480156105e2575f80fd5b506103db61106e565b3480156105f6575f80fd5b506015546103fc906001600160a01b031681565b348015610615575f80fd5b506006546103fc906001600160a01b031681565b348015610634575f80fd5b506103b7610643366004612a9e565b611108565b348015610653575f80fd5b506103b7610662366004612a2e565b6111f9565b348015610672575f80fd5b5061036460215481565b348015610687575f80fd5b50610364610696366004612a83565b602080525f908152604090205481565b3480156106b1575f80fd5b506103646106c0366004612a83565b61134a565b3480156106d0575f80fd5b506103db611364565b3480156106e4575f80fd5b506103db6106f3366004612ae4565b611399565b348015610703575f80fd5b506103b76114c0565b348015610717575f80fd5b506103db610726366004612b16565b6114fc565b348015610736575f80fd5b5061036460185481565b34801561074b575f80fd5b506103db611550565b34801561075f575f80fd5b506005546001600160a01b03166103fc565b34801561077c575f80fd5b5061078561158f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161036e565b3480156107c7575f80fd5b5061038b611623565b3480156107db575f80fd5b506013546103fc906001600160a01b031681565b3480156107fa575f80fd5b506103db610809366004612a2e565b611632565b348015610819575f80fd5b506103db610828366004612b16565b611674565b348015610838575f80fd5b506007546103fc906001600160a01b031681565b348015610857575f80fd5b50610364601e5481565b34801561086c575f80fd5b506103b761087b366004612a04565b611767565b34801561088b575f80fd5b50610364601c5481565b3480156108a0575f80fd5b506103db6117e1565b3480156108b4575f80fd5b506103b76108c3366004612a04565b61186e565b3480156108d3575f80fd5b506103db6108e2366004612b16565b61187b565b3480156108f2575f80fd5b506103db610901366004612a83565b611903565b348015610911575f80fd5b506103db611959565b348015610925575f80fd5b50610364610934366004612a9e565b6119e5565b348015610944575f80fd5b50601f546103b79060ff1681565b34801561095d575f80fd5b506103db61096c366004612a83565b611a0f565b34801561097c575f80fd5b506103db611aa7565b348015610990575f80fd5b5061036460085481565b6060600380546109a990612b49565b80601f01602080910402602001604051908101604052809291908181526020018280546109d590612b49565b8015610a205780601f106109f757610100808354040283529160200191610a20565b820191905f5260205f20905b815481529060010190602001808311610a0357829003601f168201915b5050505050905090565b5f33610a37818585611ad1565b60019150505b92915050565b6005546001600160a01b03163314610a765760405162461bcd60e51b8152600401610a6d90612b81565b60405180910390fd5b5f600c55565b6005545f906001600160a01b03163314610aa85760405162461bcd60e51b8152600401610a6d90612b81565b601d54601e54610ab89190612bca565b4211610b065760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a6d565b6103e8821115610b6b5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a6d565b42601e556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015610bb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdb9190612bdd565b90505f61271060195483610bef9190612bf4565b610bf99190612c0b565b90508015610c1a57600754610c1a906001600160a01b031661dead83611bf4565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015610c62575f80fd5b505af1158015610c74573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1600193505050505b919050565b5f33610cba858285611d48565b610cc5858585611dba565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612c2a565b6014549091505f90610d60906001600160a01b031661134a565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190612c2a565b601254601f546201000090046001600160a01b03165f908152602080526040902054919250108015610e07575081155b610e0f575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e859190612c5b565b506026546027549294509092509060ff1615610f0357306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ed7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efb9190612cc0565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f649190612d0c565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc79190612d0c565b610fd59060ff16600a612e0c565b610fe8846001600160701b038716612bf4565b610ff29190612bf4565b610ffc9190612c0b565b90506110116001600160701b03851682612c0b565b97505050505050505090565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610a6d90612b81565b5f600d55565b5f33610a3781858561105f83836119e5565b6110699190612bca565b611ad1565b6005546001600160a01b031633146110985760405162461bcd60e51b8152600401610a6d90612b81565b6110a96110a43061134a565b61221e565b6013546040515f916001600160a01b03169047908381818185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b5050905080611105575f80fd5b50565b6007545f9081906001600160a01b03858116911614801561113757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526022602052604090205490915060ff1681801561115f5750805b1561116957426012555b6001600160a01b0385165f9081526022602052604081205460ff16806111a657506001600160a01b0385165f9081526022602052604090205460ff165b6007549091506001600160a01b038681169116145f84806111c45750815b90505f6008541180156111da575060115460ff16155b80156111e4575082155b80156111ed5750805b98975050505050505050565b6005545f906001600160a01b031633146112255760405162461bcd60e51b8152600401610a6d90612b81565b620186a061123260025490565b61123d906001612bf4565b6112479190612c0b565b8210156112b45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a6d565b6103e86112c060025490565b6112cb906005612bf4565b6112d59190612c0b565b8211156113415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a6d565b50601755600190565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461138e5760405162461bcd60e51b8152600401610a6d90612b81565b6113975f61236e565b565b6005546001600160a01b031633146113c35760405162461bcd60e51b8152600401610a6d90612b81565b603c83101561142f5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610a6d565b6103e8821115801561143f575060015b6114a45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a6d565b601b92909255601955601a805460ff1916911515919091179055565b6005545f906001600160a01b031633146114ec5760405162461bcd60e51b8152600401610a6d90612b81565b50601f805460ff19169055600190565b6005546001600160a01b031633146115265760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b03919091165f908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461157a5760405162461bcd60e51b8152600401610a6d90612b81565b601f805461ff00191661010017905542601255565b5f805f805f805f805f8060245f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156115e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160d9190612cc0565b939e929d50909b50995090975095505050505050565b6060600480546109a990612b49565b6005546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610a6d90612b81565b61166e81670de0b6b3a76400006123bf565b60265550565b6005546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610a6d90612b81565b6007546001600160a01b03908116908316036117225760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a6d565b61172c82826123d1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f338161177482866119e5565b9050838110156117d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6d565b610cc58286868403611ad1565b6005546001600160a01b0316331461180b5760405162461bcd60e51b8152600401610a6d90612b81565b60275460ff1615156001146118625760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a6d565b6027805460ff19169055565b5f33610a37818585611dba565b6005546001600160a01b031633146118a55760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b0382165f81815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610a6d90612b81565b602580546001600160a01b039092166001600160a01b0319928316811790915560248054909216179055565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610a6d90612b81565b60275460ff16156119d65760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a6d565b6027805460ff19166001179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a395760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b038116611a9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6d565b6111058161236e565b6005546001600160a01b031633146110a95760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b038316611b335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6d565b6001600160a01b038216611b945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c1a5760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b038216611c405760405162461bcd60e51b8152600401610a6d90612e5c565b6001600160a01b0383165f9081526020819052604090205481811015611cb75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a6d565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611ced908490612bca565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3991815260200190565b60405180910390a35b50505050565b5f611d5384846119e5565b90505f198114611d425781811015611dad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a6d565b611d428484848403611ad1565b6001600160a01b0383165f9081526022602052604081205460ff1680611df757506001600160a01b0383165f9081526022602052604090205460ff165b90506001600160a01b038416611e1f5760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b038316611e455760405162461bcd60e51b8152600401610a6d90612e5c565b815f03611e5757611d4284845f611bf4565b6007545f906001600160a01b038681169116148015611e8e57506001600160a01b0384165f9081526023602052604090205460ff16155b6007549091505f906001600160a01b038681169116148015611ec857506001600160a01b0386165f9081526023602052604090205460ff16155b90505f611edd6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611f0957506005546001600160a01b038781169116145b90505f6001600160a01b0387161580611f2c57506001600160a01b03871661dead145b90505f8280611f385750815b80611f45575060115460ff165b601f5490915060ff168015611f58575080155b1561212e57601f54610100900460ff1680611f705750855b611fb55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a6d565b841561208a5760165487111561202b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a6d565b6018546120378961134a565b6120419089612bca565b11156120855760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a6d565b61212e565b8361212e576001600160a01b0388165f9081526023602052604090205460ff161580156120cf57506001600160a01b0389165f9081526023602052604090205460ff16155b1561212e576018546120e08961134a565b6120ea9089612bca565b111561212e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a6d565b61213889896123fe565b60115460ff1615801561216357506001600160a01b0389165f9081526028602052604090205460ff16155b801561218757506001600160a01b0389165f9081526022602052604090205460ff16155b80156121ab57506001600160a01b0388165f9081526022602052604090205460ff16155b15612206575f6121ba3061134a565b6017549091508110156121cb61248c565b80156121d45750805b80156121de575087155b15612203576011805460ff191660011790556121f86124a6565b6011805460ff191690555b50505b61221389898987896126ce565b505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061225157612251612e9f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122cc9190612c2a565b816001815181106122df576122df612e9f565b6001600160a01b0392831660209182029290920101526006546123059130911684611ad1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061233d9085905f90869030904290600401612eb3565b5f604051808303815f87803b158015612354575f80fd5b505af1158015612366573d5f803e3d5ffd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6123ca8284612bf4565b9392505050565b6001600160a01b0382165f908152602860205260409020805460ff191682151517905561172c82826114fc565b6001600160a01b0382165f9081526028602052604090205460ff161561245b576001600160a01b0381165f908152602080526040812054429103612456576001600160a01b0382165f90815260208052604090208190555b505050565b60115460ff1661248857601f805462010000600160b01b031916620100006001600160a01b038516021790555b5050565b5f80612496610cd0565b116124a057505f90565b50600190565b5f6124b03061134a565b90505f601054600f54600e546124c69190612bca565b6124d09190612bca565b90508115806124dd575080155b156124e6575050565b6017548211156124f65760175491505b5f600282600e54856125089190612bf4565b6125129190612c0b565b61251c9190612c0b565b90505f6125298483612840565b9050476125358261221e565b5f6125404783612840565b90505f6125628661255c600f54856123bf90919063ffffffff16565b9061284b565b90505f61257e8761255c601054866123bf90919063ffffffff16565b90505f8161258c8486612f22565b6125969190612f22565b90505f871180156125a657505f81115b156125f9576125b58782612856565b600e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f600e819055600f81905560108190556013546040516001600160a01b039091169085908381818185875af1925050503d805f8114612653576040519150601f19603f3d011682016040523d82523d5f602084013e612658565b606091505b5050905080612665575f80fd5b6014546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126af576040519150601f19603f3d011682016040523d82523d5f602084013e6126b4565b606091505b50509050806126c1575f80fd5b5050505050505050505050565b5f6126d98686611108565b6001600160a01b0387165f9081526022602052604090205490915060ff16158061270f57612708878787612921565b5050612839565b811561282b57600854600a54841561274657600c546008546127319190612bca565b9150600c54600a546127439190612bca565b90505b851561277157600d5460085461275c9190612bca565b9150600d54600a5461276e9190612bca565b90505b5f612781606461255c8a866123bf565b905082600954826127929190612bf4565b61279c9190612c0b565b600e5f8282546127ac9190612bca565b909155508390506127bd8383612bf4565b6127c79190612c0b565b600f5f8282546127d79190612bca565b9091555050600b5483906127eb9083612bf4565b6127f59190612c0b565b60105f8282546128059190612bca565b9091555050801561281b5761281b8a3083611bf4565b6128258189612f22565b97505050505b612836878787611bf4565b50505b5050505050565b5f6123ca8284612f22565b5f6123ca8284612c0b565b60065461286e9030906001600160a01b031684611ad1565b6006546001600160a01b031663f305d7198230855f806128966005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128fc573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128399190612f35565b6001600160a01b0383166129475760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b03821661296d5760405162461bcd60e51b8152600401610a6d90612e5c565b6001600160a01b038084165f908152602081905260408082208054858103909155928516825281208054849290611ced908490612bca565b5f6020808352835180828501525f5b818110156129d0578581018301518582016040015282016129b4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611105575f80fd5b5f8060408385031215612a15575f80fd5b8235612a20816129f0565b946020939093013593505050565b5f60208284031215612a3e575f80fd5b5035919050565b5f805f60608486031215612a57575f80fd5b8335612a62816129f0565b92506020840135612a72816129f0565b929592945050506040919091013590565b5f60208284031215612a93575f80fd5b81356123ca816129f0565b5f8060408385031215612aaf575f80fd5b8235612aba816129f0565b91506020830135612aca816129f0565b809150509250929050565b80358015158114610ca8575f80fd5b5f805f60608486031215612af6575f80fd5b8335925060208401359150612b0d60408501612ad5565b90509250925092565b5f8060408385031215612b27575f80fd5b8235612b32816129f0565b9150612b4060208401612ad5565b90509250929050565b600181811c90821680612b5d57607f821691505b602082108103612b7b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a3d57610a3d612bb6565b5f60208284031215612bed575f80fd5b5051919050565b8082028115828204841417610a3d57610a3d612bb6565b5f82612c2557634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612c3a575f80fd5b81516123ca816129f0565b80516001600160701b0381168114610ca8575f80fd5b5f805f60608486031215612c6d575f80fd5b612c7684612c45565b9250612c8460208501612c45565b9150604084015163ffffffff81168114612c9c575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610ca8575f80fd5b5f805f805f60a08688031215612cd4575f80fd5b612cdd86612ca7565b9450602086015193506040860151925060608601519150612d0060808701612ca7565b90509295509295909350565b5f60208284031215612d1c575f80fd5b815160ff811681146123ca575f80fd5b600181815b80851115612d6657815f1904821115612d4c57612d4c612bb6565b80851615612d5957918102915b93841c9390800290612d31565b509250929050565b5f82612d7c57506001610a3d565b81612d8857505f610a3d565b8160018114612d9e5760028114612da857612dc4565b6001915050610a3d565b60ff841115612db957612db9612bb6565b50506001821b610a3d565b5060208310610133831016604e8410600b8410161715612de7575081810a610a3d565b612df18383612d2c565b805f1904821115612e0457612e04612bb6565b029392505050565b5f6123ca8383612d6e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f015784516001600160a01b031683529383019391830191600101612edc565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a3d57610a3d612bb6565b5f805f60608486031215612f47575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e9a28d1d0cbe7b4f675d74fa645913ad377c931361421ff9f58e5b14f06b3d6e64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610344575f3560e01c80636c07bf86116101bd5780639c74daf0116100f2578063d4bd499311610092578063e73b90cd1161006d578063e73b90cd14610939578063f2fde38b14610952578063f429389014610971578063fea4fa4d14610985575f80fd5b8063d4bd4993146108e7578063dbb6b14614610906578063dd62ed3e1461091a575f80fd5b8063a4c82a00116100cd578063a4c82a0014610880578063a5f63fb914610895578063a9059cbb146108a9578063c0246668146108c8575f80fd5b80639c74daf01461082d5780639ec22c0e1461084c578063a457c2d714610861575f80fd5b80638a8c523c1161015d57806395d89b411161013857806395d89b41146107bc578063962dfc75146107d057806398bcb2fc146107ef5780639a7a23d61461080e575f80fd5b80638a8c523c146107405780638da5cb5b146107545780638e15f47314610771575f80fd5b8063730c188811610198578063730c1888146106d9578063751039fc146106f85780637571336a1461070c57806382247ec01461072b575f80fd5b80636c07bf861461067c57806370a08231146106a6578063715018a6146106c5575f80fd5b80632acff8b3116102935780634fbee19311610233578063583e05681161020e578063583e05681461060a578063617fa07f14610629578063632af960146106485780636af5303a14610667575f80fd5b80634fbee193146105a057806351bc3c85146105d757806354bb867c146105eb575f80fd5b80632e82f1a01161026e5780632e82f1a0146105385780632fd689e314610551578063313ce567146105665780633950935114610581575f80fd5b80632acff8b3146104fb5780632b1c91e51461050f5780632c3e486c14610523575f80fd5b8063184c16c5116102fe57806323b872dd116102d957806323b872dd1461047157806324eec7881461049057806327424850146104be57806327f4d7d5146104dd575f80fd5b8063184c16c514610428578063199ffc721461043d57806323b6358514610452575f80fd5b806304beaeb81461034f57806306fdde0314610377578063095ea7b3146103985780630b65712e146103c757806311a63e17146103dd57806318160ddd14610414575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460165481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b61099a565b60405161036e91906129a5565b3480156103a3575f80fd5b506103b76103b2366004612a04565b610a2a565b604051901515815260200161036e565b3480156103d2575f80fd5b506103db610a43565b005b3480156103e8575f80fd5b506014546103fc906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b34801561041f575f80fd5b50600254610364565b348015610433575f80fd5b50610364601d5481565b348015610448575f80fd5b5061036460195481565b34801561045d575f80fd5b506103b761046c366004612a2e565b610a7c565b34801561047c575f80fd5b506103b761048b366004612a45565b610cad565b34801561049b575f80fd5b506103b76104aa366004612a83565b60286020525f908152604090205460ff1681565b3480156104c9575f80fd5b506025546103fc906001600160a01b031681565b3480156104e8575f80fd5b50601f546103b790610100900460ff1681565b348015610506575f80fd5b50610364610cd0565b34801561051a575f80fd5b506103db61101d565b34801561052e575f80fd5b50610364601b5481565b348015610543575f80fd5b50601a546103b79060ff1681565b34801561055c575f80fd5b5061036460175481565b348015610571575f80fd5b506040516012815260200161036e565b34801561058c575f80fd5b506103b761059b366004612a04565b61104d565b3480156105ab575f80fd5b506103b76105ba366004612a83565b6001600160a01b03165f9081526022602052604090205460ff1690565b3480156105e2575f80fd5b506103db61106e565b3480156105f6575f80fd5b506015546103fc906001600160a01b031681565b348015610615575f80fd5b506006546103fc906001600160a01b031681565b348015610634575f80fd5b506103b7610643366004612a9e565b611108565b348015610653575f80fd5b506103b7610662366004612a2e565b6111f9565b348015610672575f80fd5b5061036460215481565b348015610687575f80fd5b50610364610696366004612a83565b602080525f908152604090205481565b3480156106b1575f80fd5b506103646106c0366004612a83565b61134a565b3480156106d0575f80fd5b506103db611364565b3480156106e4575f80fd5b506103db6106f3366004612ae4565b611399565b348015610703575f80fd5b506103b76114c0565b348015610717575f80fd5b506103db610726366004612b16565b6114fc565b348015610736575f80fd5b5061036460185481565b34801561074b575f80fd5b506103db611550565b34801561075f575f80fd5b506005546001600160a01b03166103fc565b34801561077c575f80fd5b5061078561158f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161036e565b3480156107c7575f80fd5b5061038b611623565b3480156107db575f80fd5b506013546103fc906001600160a01b031681565b3480156107fa575f80fd5b506103db610809366004612a2e565b611632565b348015610819575f80fd5b506103db610828366004612b16565b611674565b348015610838575f80fd5b506007546103fc906001600160a01b031681565b348015610857575f80fd5b50610364601e5481565b34801561086c575f80fd5b506103b761087b366004612a04565b611767565b34801561088b575f80fd5b50610364601c5481565b3480156108a0575f80fd5b506103db6117e1565b3480156108b4575f80fd5b506103b76108c3366004612a04565b61186e565b3480156108d3575f80fd5b506103db6108e2366004612b16565b61187b565b3480156108f2575f80fd5b506103db610901366004612a83565b611903565b348015610911575f80fd5b506103db611959565b348015610925575f80fd5b50610364610934366004612a9e565b6119e5565b348015610944575f80fd5b50601f546103b79060ff1681565b34801561095d575f80fd5b506103db61096c366004612a83565b611a0f565b34801561097c575f80fd5b506103db611aa7565b348015610990575f80fd5b5061036460085481565b6060600380546109a990612b49565b80601f01602080910402602001604051908101604052809291908181526020018280546109d590612b49565b8015610a205780601f106109f757610100808354040283529160200191610a20565b820191905f5260205f20905b815481529060010190602001808311610a0357829003601f168201915b5050505050905090565b5f33610a37818585611ad1565b60019150505b92915050565b6005546001600160a01b03163314610a765760405162461bcd60e51b8152600401610a6d90612b81565b60405180910390fd5b5f600c55565b6005545f906001600160a01b03163314610aa85760405162461bcd60e51b8152600401610a6d90612b81565b601d54601e54610ab89190612bca565b4211610b065760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a6d565b6103e8821115610b6b5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a6d565b42601e556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015610bb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdb9190612bdd565b90505f61271060195483610bef9190612bf4565b610bf99190612c0b565b90508015610c1a57600754610c1a906001600160a01b031661dead83611bf4565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015610c62575f80fd5b505af1158015610c74573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1600193505050505b919050565b5f33610cba858285611d48565b610cc5858585611dba565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612c2a565b6014549091505f90610d60906001600160a01b031661134a565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190612c2a565b601254601f546201000090046001600160a01b03165f908152602080526040902054919250108015610e07575081155b610e0f575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e859190612c5b565b506026546027549294509092509060ff1615610f0357306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ed7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efb9190612cc0565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f649190612d0c565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc79190612d0c565b610fd59060ff16600a612e0c565b610fe8846001600160701b038716612bf4565b610ff29190612bf4565b610ffc9190612c0b565b90506110116001600160701b03851682612c0b565b97505050505050505090565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610a6d90612b81565b5f600d55565b5f33610a3781858561105f83836119e5565b6110699190612bca565b611ad1565b6005546001600160a01b031633146110985760405162461bcd60e51b8152600401610a6d90612b81565b6110a96110a43061134a565b61221e565b6013546040515f916001600160a01b03169047908381818185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b5050905080611105575f80fd5b50565b6007545f9081906001600160a01b03858116911614801561113757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526022602052604090205490915060ff1681801561115f5750805b1561116957426012555b6001600160a01b0385165f9081526022602052604081205460ff16806111a657506001600160a01b0385165f9081526022602052604090205460ff165b6007549091506001600160a01b038681169116145f84806111c45750815b90505f6008541180156111da575060115460ff16155b80156111e4575082155b80156111ed5750805b98975050505050505050565b6005545f906001600160a01b031633146112255760405162461bcd60e51b8152600401610a6d90612b81565b620186a061123260025490565b61123d906001612bf4565b6112479190612c0b565b8210156112b45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a6d565b6103e86112c060025490565b6112cb906005612bf4565b6112d59190612c0b565b8211156113415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a6d565b50601755600190565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b0316331461138e5760405162461bcd60e51b8152600401610a6d90612b81565b6113975f61236e565b565b6005546001600160a01b031633146113c35760405162461bcd60e51b8152600401610a6d90612b81565b603c83101561142f5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610a6d565b6103e8821115801561143f575060015b6114a45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a6d565b601b92909255601955601a805460ff1916911515919091179055565b6005545f906001600160a01b031633146114ec5760405162461bcd60e51b8152600401610a6d90612b81565b50601f805460ff19169055600190565b6005546001600160a01b031633146115265760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b03919091165f908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461157a5760405162461bcd60e51b8152600401610a6d90612b81565b601f805461ff00191661010017905542601255565b5f805f805f805f805f8060245f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156115e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160d9190612cc0565b939e929d50909b50995090975095505050505050565b6060600480546109a990612b49565b6005546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610a6d90612b81565b61166e81670de0b6b3a76400006123bf565b60265550565b6005546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610a6d90612b81565b6007546001600160a01b03908116908316036117225760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a6d565b61172c82826123d1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f338161177482866119e5565b9050838110156117d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6d565b610cc58286868403611ad1565b6005546001600160a01b0316331461180b5760405162461bcd60e51b8152600401610a6d90612b81565b60275460ff1615156001146118625760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a6d565b6027805460ff19169055565b5f33610a37818585611dba565b6005546001600160a01b031633146118a55760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b0382165f81815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610a6d90612b81565b602580546001600160a01b039092166001600160a01b0319928316811790915560248054909216179055565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610a6d90612b81565b60275460ff16156119d65760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a6d565b6027805460ff19166001179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a395760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b038116611a9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6d565b6111058161236e565b6005546001600160a01b031633146110a95760405162461bcd60e51b8152600401610a6d90612b81565b6001600160a01b038316611b335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6d565b6001600160a01b038216611b945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c1a5760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b038216611c405760405162461bcd60e51b8152600401610a6d90612e5c565b6001600160a01b0383165f9081526020819052604090205481811015611cb75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a6d565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611ced908490612bca565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3991815260200190565b60405180910390a35b50505050565b5f611d5384846119e5565b90505f198114611d425781811015611dad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a6d565b611d428484848403611ad1565b6001600160a01b0383165f9081526022602052604081205460ff1680611df757506001600160a01b0383165f9081526022602052604090205460ff165b90506001600160a01b038416611e1f5760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b038316611e455760405162461bcd60e51b8152600401610a6d90612e5c565b815f03611e5757611d4284845f611bf4565b6007545f906001600160a01b038681169116148015611e8e57506001600160a01b0384165f9081526023602052604090205460ff16155b6007549091505f906001600160a01b038681169116148015611ec857506001600160a01b0386165f9081526023602052604090205460ff16155b90505f611edd6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611f0957506005546001600160a01b038781169116145b90505f6001600160a01b0387161580611f2c57506001600160a01b03871661dead145b90505f8280611f385750815b80611f45575060115460ff165b601f5490915060ff168015611f58575080155b1561212e57601f54610100900460ff1680611f705750855b611fb55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a6d565b841561208a5760165487111561202b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a6d565b6018546120378961134a565b6120419089612bca565b11156120855760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a6d565b61212e565b8361212e576001600160a01b0388165f9081526023602052604090205460ff161580156120cf57506001600160a01b0389165f9081526023602052604090205460ff16155b1561212e576018546120e08961134a565b6120ea9089612bca565b111561212e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a6d565b61213889896123fe565b60115460ff1615801561216357506001600160a01b0389165f9081526028602052604090205460ff16155b801561218757506001600160a01b0389165f9081526022602052604090205460ff16155b80156121ab57506001600160a01b0388165f9081526022602052604090205460ff16155b15612206575f6121ba3061134a565b6017549091508110156121cb61248c565b80156121d45750805b80156121de575087155b15612203576011805460ff191660011790556121f86124a6565b6011805460ff191690555b50505b61221389898987896126ce565b505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061225157612251612e9f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122cc9190612c2a565b816001815181106122df576122df612e9f565b6001600160a01b0392831660209182029290920101526006546123059130911684611ad1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061233d9085905f90869030904290600401612eb3565b5f604051808303815f87803b158015612354575f80fd5b505af1158015612366573d5f803e3d5ffd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6123ca8284612bf4565b9392505050565b6001600160a01b0382165f908152602860205260409020805460ff191682151517905561172c82826114fc565b6001600160a01b0382165f9081526028602052604090205460ff161561245b576001600160a01b0381165f908152602080526040812054429103612456576001600160a01b0382165f90815260208052604090208190555b505050565b60115460ff1661248857601f805462010000600160b01b031916620100006001600160a01b038516021790555b5050565b5f80612496610cd0565b116124a057505f90565b50600190565b5f6124b03061134a565b90505f601054600f54600e546124c69190612bca565b6124d09190612bca565b90508115806124dd575080155b156124e6575050565b6017548211156124f65760175491505b5f600282600e54856125089190612bf4565b6125129190612c0b565b61251c9190612c0b565b90505f6125298483612840565b9050476125358261221e565b5f6125404783612840565b90505f6125628661255c600f54856123bf90919063ffffffff16565b9061284b565b90505f61257e8761255c601054866123bf90919063ffffffff16565b90505f8161258c8486612f22565b6125969190612f22565b90505f871180156125a657505f81115b156125f9576125b58782612856565b600e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f600e819055600f81905560108190556013546040516001600160a01b039091169085908381818185875af1925050503d805f8114612653576040519150601f19603f3d011682016040523d82523d5f602084013e612658565b606091505b5050905080612665575f80fd5b6014546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126af576040519150601f19603f3d011682016040523d82523d5f602084013e6126b4565b606091505b50509050806126c1575f80fd5b5050505050505050505050565b5f6126d98686611108565b6001600160a01b0387165f9081526022602052604090205490915060ff16158061270f57612708878787612921565b5050612839565b811561282b57600854600a54841561274657600c546008546127319190612bca565b9150600c54600a546127439190612bca565b90505b851561277157600d5460085461275c9190612bca565b9150600d54600a5461276e9190612bca565b90505b5f612781606461255c8a866123bf565b905082600954826127929190612bf4565b61279c9190612c0b565b600e5f8282546127ac9190612bca565b909155508390506127bd8383612bf4565b6127c79190612c0b565b600f5f8282546127d79190612bca565b9091555050600b5483906127eb9083612bf4565b6127f59190612c0b565b60105f8282546128059190612bca565b9091555050801561281b5761281b8a3083611bf4565b6128258189612f22565b97505050505b612836878787611bf4565b50505b5050505050565b5f6123ca8284612f22565b5f6123ca8284612c0b565b60065461286e9030906001600160a01b031684611ad1565b6006546001600160a01b031663f305d7198230855f806128966005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156128fc573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128399190612f35565b6001600160a01b0383166129475760405162461bcd60e51b8152600401610a6d90612e17565b6001600160a01b03821661296d5760405162461bcd60e51b8152600401610a6d90612e5c565b6001600160a01b038084165f908152602081905260408082208054858103909155928516825281208054849290611ced908490612bca565b5f6020808352835180828501525f5b818110156129d0578581018301518582016040015282016129b4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611105575f80fd5b5f8060408385031215612a15575f80fd5b8235612a20816129f0565b946020939093013593505050565b5f60208284031215612a3e575f80fd5b5035919050565b5f805f60608486031215612a57575f80fd5b8335612a62816129f0565b92506020840135612a72816129f0565b929592945050506040919091013590565b5f60208284031215612a93575f80fd5b81356123ca816129f0565b5f8060408385031215612aaf575f80fd5b8235612aba816129f0565b91506020830135612aca816129f0565b809150509250929050565b80358015158114610ca8575f80fd5b5f805f60608486031215612af6575f80fd5b8335925060208401359150612b0d60408501612ad5565b90509250925092565b5f8060408385031215612b27575f80fd5b8235612b32816129f0565b9150612b4060208401612ad5565b90509250929050565b600181811c90821680612b5d57607f821691505b602082108103612b7b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a3d57610a3d612bb6565b5f60208284031215612bed575f80fd5b5051919050565b8082028115828204841417610a3d57610a3d612bb6565b5f82612c2557634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612c3a575f80fd5b81516123ca816129f0565b80516001600160701b0381168114610ca8575f80fd5b5f805f60608486031215612c6d575f80fd5b612c7684612c45565b9250612c8460208501612c45565b9150604084015163ffffffff81168114612c9c575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610ca8575f80fd5b5f805f805f60a08688031215612cd4575f80fd5b612cdd86612ca7565b9450602086015193506040860151925060608601519150612d0060808701612ca7565b90509295509295909350565b5f60208284031215612d1c575f80fd5b815160ff811681146123ca575f80fd5b600181815b80851115612d6657815f1904821115612d4c57612d4c612bb6565b80851615612d5957918102915b93841c9390800290612d31565b509250929050565b5f82612d7c57506001610a3d565b81612d8857505f610a3d565b8160018114612d9e5760028114612da857612dc4565b6001915050610a3d565b60ff841115612db957612db9612bb6565b50506001821b610a3d565b5060208310610133831016604e8410600b8410161715612de7575081810a610a3d565b612df18383612d2c565b805f1904821115612e0457612e04612bb6565b029392505050565b5f6123ca8383612d6e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f015784516001600160a01b031683529383019391830191600101612edc565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a3d57610a3d612bb6565b5f805f60608486031215612f47575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e9a28d1d0cbe7b4f675d74fa645913ad377c931361421ff9f58e5b14f06b3d6e64736f6c63430008140033

Deployed Bytecode Sourcemap

21963:19983:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22642:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;22642:36:0;;;;;;;;11559:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12632:242::-;;;;;;;;;;-1:-1:-1;12632:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;12632:242:0;1205:187:1;38275:75:0;;;;;;;;;;;;;:::i;:::-;;22573:25;;;;;;;;;;-1:-1:-1;22573:25:0;;;;-1:-1:-1;;;;;22573:25:0;;;;;;-1:-1:-1;;;;;1561:32:1;;;1543:51;;1531:2;1516:18;22573:25:0;1397:203:1;11880:108:0;;;;;;;;;;-1:-1:-1;11968:12:0;;11880:108;;22938:47;;;;;;;;;;;;;;;;22760:35;;;;;;;;;;;;;;;;40861:1045;;;;;;;;;;-1:-1:-1;40861:1045:0;;;;;:::i;:::-;;:::i;12880:295::-;;;;;;;;;;-1:-1:-1;12880:295:0;;;;;:::i;:::-;;:::i;23623:53::-;;;;;;;;;;-1:-1:-1;23623:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23444:76;;;;;;;;;;-1:-1:-1;23444:76:0;;;;-1:-1:-1;;;;;23444:76:0;;;23075:34;;;;;;;;;;-1:-1:-1;23075:34:0;;;;;;;;;;;30100:914;;;;;;;;;;;;;:::i;38358:82::-;;;;;;;;;;;;;:::i;22841:44::-;;;;;;;;;;;;;;;;22802:32;;;;;;;;;;-1:-1:-1;22802:32:0;;;;;;;;22685:34;;;;;;;;;;;;;;;;11779:93;;;;;;;;;;-1:-1:-1;11779:93:0;;11862:2;2645:36:1;;2633:2;2618:18;11779:93:0;2503:184:1;13183:270:0;;;;;;;;;;-1:-1:-1;13183:270:0;;;;;:::i;:::-;;:::i;35515:126::-;;;;;;;;;;-1:-1:-1;35515:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;35605:28:0;35581:4;35605:28;;;:19;:28;;;;;;;;;35515:126;39122:223;;;;;;;;;;;;;:::i;22605:30::-;;;;;;;;;;-1:-1:-1;22605:30:0;;;;-1:-1:-1;;;;;22605:30:0;;;22044:42;;;;;;;;;;-1:-1:-1;22044:42:0;;;;-1:-1:-1;;;;;22044:42:0;;;27254:657;;;;;;;;;;-1:-1:-1;27254:657:0;;;;;:::i;:::-;;:::i;29225:498::-;;;;;;;;;;-1:-1:-1;29225:498:0;;;;;:::i;:::-;;:::i;23214:35::-;;;;;;;;;;;;;;;;23152:55;;;;;;;;;;-1:-1:-1;23152:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;11996:177;;;;;;;;;;-1:-1:-1;11996:177:0;;;;;:::i;:::-;;:::i;9603:103::-;;;;;;;;;;;;;:::i;39533:553::-;;;;;;;;;;-1:-1:-1;39533:553:0;;;;;:::i;:::-;;:::i;26609:122::-;;;;;;;;;;;;;:::i;29731:167::-;;;;;;;;;;-1:-1:-1;29731:167:0;;;;;:::i;:::-;;:::i;22726:25::-;;;;;;;;;;;;;;;;25923:131;;;;;;;;;;;;;:::i;9380:87::-;;;;;;;;;;-1:-1:-1;9453:6:0;;-1:-1:-1;;;;;9453:6:0;9380:87;;26741:505;;;;;;;;;;;;;:::i;:::-;;;;4388:22:1;4437:15;;;4419:34;;4484:2;4469:18;;4462:34;;;;4512:18;;4505:34;;;;4570:2;4555:18;;4548:34;4619:15;;;4613:3;4598:19;;4591:44;4365:3;4350:19;26741:505:0;4125:516:1;11667:104:0;;;;;;;;;;;;;:::i;22535:31::-;;;;;;;;;;-1:-1:-1;22535:31:0;;;;-1:-1:-1;;;;;22535:31:0;;;38448:118;;;;;;;;;;-1:-1:-1;38448:118:0;;;;;:::i;:::-;;:::i;26300:301::-;;;;;;;;;;-1:-1:-1;26300:301:0;;;;;:::i;:::-;;:::i;22093:29::-;;;;;;;;;;-1:-1:-1;22093:29:0;;;;-1:-1:-1;;;;;22093:29:0;;;22992:35;;;;;;;;;;;;;;;;13461:505;;;;;;;;;;-1:-1:-1;13461:505:0;;;;;:::i;:::-;;:::i;22902:29::-;;;;;;;;;;;;;;;;38755:175;;;;;;;;;;;;;:::i;12181:234::-;;;;;;;;;;-1:-1:-1;12181:234:0;;;;;:::i;:::-;;:::i;29906:182::-;;;;;;;;;;-1:-1:-1;29906:182:0;;;;;:::i;:::-;;:::i;38938:176::-;;;;;;;;;;-1:-1:-1;38938:176:0;;;;;:::i;:::-;;:::i;38574:173::-;;;;;;;;;;;;;:::i;12423:201::-;;;;;;;;;;-1:-1:-1;12423:201:0;;;;;:::i;:::-;;:::i;23034:34::-;;;;;;;;;;-1:-1:-1;23034:34:0;;;;;;;;9714:238;;;;;;;;;;-1:-1:-1;9714:238:0;;;;;:::i;:::-;;:::i;39353:170::-;;;;;;;;;;;;;:::i;22129:25::-;;;;;;;;;;;;;;;;11559:100;11613:13;11646:5;11639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11559:100;:::o;12632:242::-;12751:4;8981:10;12812:32;8981:10;12828:7;12837:6;12812:8;:32::i;:::-;12862:4;12855:11;;;12632:242;;;;;:::o;38275:75::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;;;;;;;;;38341:1:::1;38326:12;:16:::0;38275:75::o;40861:1045::-;9453:6;;40953:4;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;41038:19:::1;;41015:20;;:42;;;;:::i;:::-;40997:15;:60;40975:142;;;::::0;-1:-1:-1;;;40975:142:0;;5856:2:1;40975:142:0::1;::::0;::::1;5838:21:1::0;;;5875:18;;;5868:30;5934:34;5914:18;;;5907:62;5986:18;;40975:142:0::1;5654:356:1::0;40975:142:0::1;41147:4;41136:7;:15;;41128:70;;;::::0;-1:-1:-1;;;41128:70:0;;6217:2:1;41128:70:0::1;::::0;::::1;6199:21:1::0;6256:2;6236:18;;;6229:30;6295:34;6275:18;;;6268:62;-1:-1:-1;;;6346:18:1;;;6339:40;6396:19;;41128:70:0::1;6015:406:1::0;41128:70:0::1;41232:15;41209:20;:38:::0;41348:14:::1;::::0;41333:30:::1;::::0;-1:-1:-1;;;41333:30:0;;-1:-1:-1;;;;;41348:14:0;;::::1;41333:30;::::0;::::1;1543:51:1::0;41302:28:0::1;::::0;41333:4:::1;::::0;:14:::1;::::0;1516:18:1;;41333:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41302:61;;41413:20;41478:5;41459:16;;41436:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;41413:70:::0;-1:-1:-1;41590:16:0;;41586:111:::1;;41639:14;::::0;41623:62:::1;::::0;-1:-1:-1;;;;;41639:14:0::1;41663:6;41672:12:::0;41623:15:::1;:62::i;:::-;41809:14;::::0;41835:11:::1;::::0;;-1:-1:-1;;;;;;41835:11:0;;;;-1:-1:-1;;;;;41809:14:0;;::::1;::::0;;;41835:9:::1;::::0;:11:::1;::::0;;::::1;::::0;41772:19:::1;::::0;41835:11;;;;;;;41772:19;41809:14;41835:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41862:14:0::1;::::0;::::1;::::0;-1:-1:-1;41862:14:0;;-1:-1:-1;41862:14:0::1;41894:4;41887:11;;;;;9586:1;40861:1045:::0;;;:::o;12880:295::-;13011:4;8981:10;13069:38;13085:4;8981:10;13100:6;13069:15;:38::i;:::-;13118:27;13128:4;13134:2;13138:6;13118:9;:27::i;:::-;-1:-1:-1;13163:4:0;;12880:295;-1:-1:-1;;;;12880:295:0:o;30100:914::-;30150:7;30170:21;30238:14;;;;;;;;;-1:-1:-1;;;;;30238:14:0;-1:-1:-1;;;;;30223:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30312:10;;30170:103;;-1:-1:-1;30284:15:0;;30302:21;;-1:-1:-1;;;;;30312:10:0;30302:9;:21::i;:::-;30284:39;;30334:21;30402:14;;;;;;;;;-1:-1:-1;;;;;30402:14:0;-1:-1:-1;;;;;30387:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30494:20;;30477:13;;;;;-1:-1:-1;;;;;30477:13:0;30456:35;;;;:20;:35;;;;;;30334:103;;-1:-1:-1;;30456:87:0;;;;-1:-1:-1;30531:12:0;;30456:87;30448:96;;;;;;30556:16;30574;30611:14;;;;;;;;;-1:-1:-1;;;;;30611:14:0;-1:-1:-1;;;;;30596:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30683:14:0;;30712:17;;30555:99;;-1:-1:-1;30555:99:0;;-1:-1:-1;30683:14:0;30712:17;;30708:92;;;30767:4;-1:-1:-1;;;;;30767:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30746:42:0;;-1:-1:-1;;;;30708:92:0;30810:16;30940:6;-1:-1:-1;;;;;30940:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30932:26;;30909:6;-1:-1:-1;;;;;30909:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30897:30;;30901:26;;30897:2;:30;:::i;:::-;30830:50;30871:8;-1:-1:-1;;;;;30830:17:0;;:50;:::i;:::-;:98;;;;:::i;:::-;30829:129;;;;:::i;:::-;30810:148;-1:-1:-1;30977:28:0;-1:-1:-1;;;;;30988:17:0;;30810:148;30977:28;:::i;:::-;30969:37;;;;;;;;;30100:914;:::o;38358:82::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;38431:1:::1;38415:13;:17:::0;38358:82::o;13183:270::-;13298:4;8981:10;13359:64;8981:10;13375:7;13412:10;13384:25;8981:10;13375:7;13384:9;:25::i;:::-;:38;;;;:::i;:::-;13359:8;:64::i;39122:223::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;39174:40:::1;39189:24;39207:4;39189:9;:24::i;:::-;39174:14;:40::i;:::-;39253:16;::::0;39245:65:::1;::::0;39228:12:::1;::::0;-1:-1:-1;;;;;39253:16:0::1;::::0;39284:21:::1;::::0;39228:12;39245:65;39228:12;39245:65;39284:21;39253:16;39245:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39227:83;;;39329:7;39321:16;;;::::0;::::1;;39163:182;39122:223::o:0;27254:657::-;27368:14;;27326:4;;;;-1:-1:-1;;;;;27357:25:0;;;27368:14;;27357:25;:67;;;;-1:-1:-1;27407:16:0;;-1:-1:-1;;;;;27386:38:0;;;27407:16;;27386:38;;27357:67;-1:-1:-1;;;;;27460:30:0;;27435:22;27460:30;;;:19;:30;;;;;;27343:81;;-1:-1:-1;27460:30:0;;27343:81;27505:27;;;;;27515:17;27505:27;27501:71;;;27557:15;27534:20;:38;27501:71;-1:-1:-1;;;;;27608:28:0;;27583:22;27608:28;;;:19;:28;;;;;;;;;:62;;-1:-1:-1;;;;;;27640:30:0;;;;;;:19;:30;;;;;;;;27608:62;27709:14;;27583:87;;-1:-1:-1;;;;;;27696:27:0;;;27709:14;;27696:27;27681:12;27751:6;;:17;;;27761:7;27751:17;27735:33;;27815:1;27802:10;;:14;:41;;;;-1:-1:-1;27834:9:0;;;;27833:10;27802:41;:76;;;;;27861:17;27860:18;27802:76;:101;;;;;27895:8;27802:101;27781:122;27254:657;-1:-1:-1;;;;;;;;27254:657:0:o;29225:498::-;9453:6;;29333:4;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;29412:6:::1;29391:13;11968:12:::0;;;11880:108;29391:13:::1;:17;::::0;29407:1:::1;29391:17;:::i;:::-;29390:28;;;;:::i;:::-;29377:9;:41;;29355:144;;;::::0;-1:-1:-1;;;29355:144:0;;10640:2:1;29355:144:0::1;::::0;::::1;10622:21:1::0;10679:2;10659:18;;;10652:30;10718:34;10698:18;;;10691:62;-1:-1:-1;;;10769:18:1;;;10762:51;10830:19;;29355:144:0::1;10438:417:1::0;29355:144:0::1;29567:4;29546:13;11968:12:::0;;;11880:108;29546:13:::1;:17;::::0;29562:1:::1;29546:17;:::i;:::-;29545:26;;;;:::i;:::-;29532:9;:39;;29510:141;;;::::0;-1:-1:-1;;;29510:141:0;;11062:2:1;29510:141:0::1;::::0;::::1;11044:21:1::0;11101:2;11081:18;;;11074:30;11140:34;11120:18;;;11113:62;-1:-1:-1;;;11191:18:1;;;11184:50;11251:19;;29510:141:0::1;10860:416:1::0;29510:141:0::1;-1:-1:-1::0;29662:19:0::1;:31:::0;29711:4:::1;::::0;29225:498::o;11996:177::-;-1:-1:-1;;;;;12147:18:0;12115:7;12147:18;;;;;;;;;;;;11996:177::o;9603:103::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;9668:30:::1;9695:1;9668:18;:30::i;:::-;9603:103::o:0;39533:553::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;39735:2:::1;39712:19;:25;;39690:125;;;::::0;-1:-1:-1;;;39690:125:0;;11483:2:1;39690:125:0::1;::::0;::::1;11465:21:1::0;11522:2;11502:18;;;11495:30;11561:34;11541:18;;;11534:62;-1:-1:-1;;;11612:18:1;;;11605:48;11670:19;;39690:125:0::1;11281:414:1::0;39690:125:0::1;39860:4;39848:8;:16;;:33;;;;-1:-1:-1::0;39868:13:0;39848:33:::1;39826:131;;;::::0;-1:-1:-1;;;39826:131:0;;11902:2:1;39826:131:0::1;::::0;::::1;11884:21:1::0;11941:2;11921:18;;;11914:30;11980:34;11960:18;;;11953:62;-1:-1:-1;;;12031:18:1;;;12024:46;12087:19;;39826:131:0::1;11700:412:1::0;39826:131:0::1;39968:15;:37:::0;;;;40016:16:::1;:27:::0;40054:13:::1;:24:::0;;-1:-1:-1;;40054:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39533:553::o;26609:122::-;9453:6;;26661:4;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;-1:-1:-1;26678:15:0::1;:23:::0;;-1:-1:-1;;26678:23:0::1;::::0;;;26609:122;:::o;29731:167::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29844:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;29844:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29731:167::o;25923:131::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;25976:14:::1;:21:::0;;-1:-1:-1;;25976:21:0::1;;;::::0;;26031:15:::1;26008:20;:38:::0;25923:131::o;26741:505::-;26831:6;26852;26873:7;26895;26917:6;26966:15;26996:13;27024:18;27057:17;27089:23;27126:15;;;;;;;;;-1:-1:-1;;;;;27126:15:0;-1:-1:-1;;;;;27126:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26951:208;;;;-1:-1:-1;26951:208:0;;-1:-1:-1;26951:208:0;-1:-1:-1;26951:208:0;;-1:-1:-1;26741:505:0;-1:-1:-1;;;;;;26741:505:0:o;11667:104::-;11723:13;11756:7;11749:14;;;;;:::i;38448:118::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;38542:15:::1;:3:::0;38550:6:::1;38542:7;:15::i;:::-;38518:14;:40:::0;-1:-1:-1;38448:118:0:o;26300:301::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;26409:14:::1;::::0;-1:-1:-1;;;;;26409:14:0;;::::1;26401:22:::0;;::::1;::::0;26393:92:::1;;;::::0;-1:-1:-1;;;26393:92:0;;12319:2:1;26393:92:0::1;::::0;::::1;12301:21:1::0;12358:2;12338:18;;;12331:30;12397:34;12377:18;;;12370:62;12468:27;12448:18;;;12441:55;12513:19;;26393:92:0::1;12117:421:1::0;26393:92:0::1;26496:41;26525:4;26531:5;26496:28;:41::i;:::-;26553:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26553:40:0;::::1;::::0;::::1;::::0;;;::::1;26300:301:::0;;:::o;13461:505::-;13581:4;8981:10;13581:4;13669:25;8981:10;13686:7;13669:9;:25::i;:::-;13642:52;;13747:15;13727:16;:35;;13705:122;;;;-1:-1:-1;;;13705:122:0;;12745:2:1;13705:122:0;;;12727:21:1;12784:2;12764:18;;;12757:30;12823:34;12803:18;;;12796:62;-1:-1:-1;;;12874:18:1;;;12867:35;12919:19;;13705:122:0;12543:401:1;13705:122:0;13863:60;13872:5;13879:7;13907:15;13888:16;:34;13863:8;:60::i;38755:175::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;38827:17:::1;::::0;::::1;;:25;;:17:::0;:25:::1;38819:67;;;::::0;-1:-1:-1;;;38819:67:0;;13151:2:1;38819:67:0::1;::::0;::::1;13133:21:1::0;13190:2;13170:18;;;13163:30;13229:31;13209:18;;;13202:59;13278:18;;38819:67:0::1;12949:353:1::0;38819:67:0::1;38897:17;:25:::0;;-1:-1:-1;;38897:25:0::1;::::0;;38755:175::o;12181:234::-;12296:4;8981:10;12357:28;8981:10;12374:2;12378:6;12357:9;:28::i;29906:182::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29991:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;29991:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30046:34;;1345:41:1;;;30046:34:0::1;::::0;1318:18:1;30046:34:0::1;;;;;;;29906:182:::0;;:::o;38938:176::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;39013:16:::1;:23:::0;;-1:-1:-1;;;;;39013:23:0;;::::1;-1:-1:-1::0;;;;;;39013:23:0;;::::1;::::0;::::1;::::0;;;39047:15:::1;:59:::0;;;;::::1;;::::0;;38938:176::o;38574:173::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;38645:17:::1;::::0;::::1;;:26;38637:67;;;::::0;-1:-1:-1;;;38637:67:0;;13509:2:1;38637:67:0::1;::::0;::::1;13491:21:1::0;13548:2;13528:18;;;13521:30;13587;13567:18;;;13560:58;13635:18;;38637:67:0::1;13307:352:1::0;38637:67:0::1;38715:17;:24:::0;;-1:-1:-1;;38715:24:0::1;38735:4;38715:24;::::0;;38574:173::o;12423:201::-;-1:-1:-1;;;;;12589:18:0;;;12557:7;12589:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12423:201::o;9714:238::-;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9817:22:0;::::1;9795:110;;;::::0;-1:-1:-1;;;9795:110:0;;13866:2:1;9795:110:0::1;::::0;::::1;13848:21:1::0;13905:2;13885:18;;;13878:30;13944:34;13924:18;;;13917:62;-1:-1:-1;;;13995:18:1;;;13988:36;14041:19;;9795:110:0::1;13664:402:1::0;9795:110:0::1;9916:28;9935:8;9916:18;:28::i;39353:170::-:0;9453:6;;-1:-1:-1;;;;;9453:6:0;8981:10;9515:23;9507:68;;;;-1:-1:-1;;;9507:68:0;;;;;;;:::i;15662:380::-;-1:-1:-1;;;;;15798:19:0;;15790:68;;;;-1:-1:-1;;;15790:68:0;;14273:2:1;15790:68:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:34;14331:18;;;14324:62;-1:-1:-1;;;14402:18:1;;;14395:34;14446:19;;15790:68:0;14071:400:1;15790:68:0;-1:-1:-1;;;;;15877:21:0;;15869:68;;;;-1:-1:-1;;;15869:68:0;;14678:2:1;15869:68:0;;;14660:21:1;14717:2;14697:18;;;14690:30;14756:34;14736:18;;;14729:62;-1:-1:-1;;;14807:18:1;;;14800:32;14849:19;;15869:68:0;14476:398:1;15869:68:0;-1:-1:-1;;;;;15950:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16002:32;;160:25:1;;;16002:32:0;;133:18:1;16002:32:0;;;;;;;15662:380;;;:::o;16825:708::-;-1:-1:-1;;;;;16956:18:0;;16948:68;;;;-1:-1:-1;;;16948:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17035:16:0;;17027:64;;;;-1:-1:-1;;;17027:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17177:15:0;;17155:19;17177:15;;;;;;;;;;;17225:21;;;;17203:109;;;;-1:-1:-1;;;17203:109:0;;15891:2:1;17203:109:0;;;15873:21:1;15930:2;15910:18;;;15903:30;15969:34;15949:18;;;15942:62;-1:-1:-1;;;16020:18:1;;;16013:36;16066:19;;17203:109:0;15689:402:1;17203:109:0;-1:-1:-1;;;;;17348:15:0;;;:9;:15;;;;;;;;;;;17366:20;;;17348:38;;17408:13;;;;;;;;:23;;17380:6;;17348:9;17408:23;;17380:6;;17408:23;:::i;:::-;;;;;;;;17464:2;-1:-1:-1;;;;;17449:26:0;17458:4;-1:-1:-1;;;;;17449:26:0;;17468:6;17449:26;;;;160:25:1;;148:2;133:18;;14:177;17449:26:0;;;;;;;;17488:37;16937:596;16825:708;;;:::o;16050:502::-;16185:24;16212:25;16222:5;16229:7;16212:9;:25::i;:::-;16185:52;;-1:-1:-1;;16252:16:0;:37;16248:297;;16352:6;16332:16;:26;;16306:117;;;;-1:-1:-1;;;16306:117:0;;16298:2:1;16306:117:0;;;16280:21:1;16337:2;16317:18;;;16310:30;16376:31;16356:18;;;16349:59;16425:18;;16306:117:0;16096:353:1;16306:117:0;16467:51;16476:5;16483:7;16511:6;16492:16;:25;16467:8;:51::i;32570:2572::-;-1:-1:-1;;;;;32729:28:0;;32705:21;32729:28;;;:19;:28;;;;;;;;;:75;;-1:-1:-1;;;;;;32774:30:0;;;;;;:19;:30;;;;;;;;32729:75;32705:99;-1:-1:-1;;;;;;32825:21:0;;32817:71;;;;-1:-1:-1;;;32817:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32907:23:0;;32899:71;;;;-1:-1:-1;;;32899:71:0;;;;;;;:::i;:::-;32987:7;32998:1;32987:12;32983:104;;33016:38;33032:7;33041:9;33052:1;33016:15;:38::i;32983:104::-;33123:14;;33099:10;;-1:-1:-1;;;;;33112:25:0;;;33123:14;;33112:25;:85;;;;-1:-1:-1;;;;;;33155:42:0;;;;;;:31;:42;;;;;;;;33154:43;33112:85;33235:14;;33099:98;;-1:-1:-1;33208:11:0;;-1:-1:-1;;;;;33222:27:0;;;33235:14;;33222:27;:85;;;;-1:-1:-1;;;;;;33267:40:0;;;;;;:31;:40;;;;;;;;33266:41;33222:85;33208:99;;33318:16;33348:7;9453:6;;-1:-1:-1;;;;;9453:6:0;;9380:87;33348:7;-1:-1:-1;;;;;33337:18:0;:7;-1:-1:-1;;;;;33337:18:0;;:42;;;-1:-1:-1;9453:6:0;;-1:-1:-1;;;;;33359:20:0;;;9453:6;;33359:20;33337:42;33318:61;-1:-1:-1;33390:12:0;-1:-1:-1;;;;;33405:23:0;;;;:55;;-1:-1:-1;;;;;;33432:28:0;;33453:6;33432:28;33405:55;33390:70;;33471:20;33494:11;:22;;;;33509:7;33494:22;:35;;;-1:-1:-1;33520:9:0;;;;33494:35;33554:15;;33471:58;;-1:-1:-1;33554:15:0;;:35;;;;;33574:15;33573:16;33554:35;33550:916;;;33632:14;;;;;;;;:34;;;33650:16;33632:34;33606:118;;;;-1:-1:-1;;;33606:118:0;;16656:2:1;33606:118:0;;;16638:21:1;16695:2;16675:18;;;16668:30;-1:-1:-1;;;16714:18:1;;;16707:52;16776:18;;33606:118:0;16454:346:1;33606:118:0;33743:5;33739:716;;;33810:21;;33799:7;:32;;33769:159;;;;-1:-1:-1;;;33769:159:0;;17007:2:1;33769:159:0;;;16989:21:1;17046:2;17026:18;;;17019:30;17085:34;17065:18;;;17058:62;-1:-1:-1;;;17136:18:1;;;17129:51;17197:19;;33769:159:0;16805:417:1;33769:159:0;34011:10;;33987:20;33997:9;33987;:20::i;:::-;33977:30;;:7;:30;:::i;:::-;:44;;33947:137;;;;-1:-1:-1;;;33947:137:0;;17429:2:1;33947:137:0;;;17411:21:1;17468:2;17448:18;;;17441:30;-1:-1:-1;;;17487:18:1;;;17480:49;17546:18;;33947:137:0;17227:343:1;33947:137:0;33739:716;;;34110:6;34106:349;;-1:-1:-1;;;;;34163:42:0;;;;;;:31;:42;;;;;;;;34162:43;:105;;;;-1:-1:-1;;;;;;34227:40:0;;;;;;:31;:40;;;;;;;;34226:41;34162:105;34140:315;;;34366:10;;34342:20;34352:9;34342;:20::i;:::-;34332:30;;:7;:30;:::i;:::-;:44;;34302:137;;;;-1:-1:-1;;;34302:137:0;;17429:2:1;34302:137:0;;;17411:21:1;17468:2;17448:18;;;17441:30;-1:-1:-1;;;17487:18:1;;;17480:49;17546:18;;34302:137:0;17227:343:1;34302:137:0;34476:36;34493:7;34502:9;34476:16;:36::i;:::-;34528:9;;;;34527:10;:57;;;;-1:-1:-1;;;;;;34555:29:0;;;;;;:20;:29;;;;;;;;34554:30;34527:57;:103;;;;-1:-1:-1;;;;;;34602:28:0;;;;;;:19;:28;;;;;;;;34601:29;34527:103;:151;;;;-1:-1:-1;;;;;;34648:30:0;;;;;;:19;:30;;;;;;;;34647:31;34527:151;34523:538;;;34695:28;34726:24;34744:4;34726:9;:24::i;:::-;34804:19;;34695:55;;-1:-1:-1;34780:43:0;;;34842:23;:21;:23::i;:::-;:51;;;;;34886:7;34842:51;:90;;;;;34916:16;34915:17;34842:90;34838:212;;;34953:9;:16;;-1:-1:-1;;34953:16:0;34965:4;34953:16;;;34988:10;:8;:10::i;:::-;35017:9;:17;;-1:-1:-1;;35017:17:0;;;34838:212;34680:381;;34523:538;35073:61;35091:7;35100:9;35111:7;35120:6;35128:5;35073:17;:61::i;:::-;32694:2448;;;;;;32570:2572;;;:::o;37791:476::-;37879:16;;;37893:1;37879:16;;;;;;;;37855:21;;37879:16;;;;;;;;;;-1:-1:-1;37879:16:0;37855:40;;37924:4;37906;37911:1;37906:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37906:23:0;;;:7;;;;;;;;;;:23;;;;37950:16;;:23;;;-1:-1:-1;;;37950:23:0;;;;:16;;;;;:21;;:23;;;;;37906:7;;37950:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37940:4;37945:1;37940:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37940:33:0;;;:7;;;;;;;;;:33;38018:16;;37986:63;;38003:4;;38018:16;38037:11;37986:8;:63::i;:::-;38062:16;;:197;;-1:-1:-1;;;38062:197:0;;-1:-1:-1;;;;;38062:16:0;;;;:67;;:197;;38144:11;;38062:16;;38186:4;;38213;;38233:15;;38062:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37844:423;37791:476;:::o;9960:191::-;10053:6;;;-1:-1:-1;;;;;10070:17:0;;;-1:-1:-1;;;;;;10070:17:0;;;;;;;10103:40;;10053:6;;;10070:17;10053:6;;10103:40;;10034:16;;10103:40;10023:128;9960:191;:::o;2143:98::-;2201:7;2228:5;2232:1;2228;:5;:::i;:::-;2221:12;2143:98;-1:-1:-1;;;2143:98:0:o;26062:230::-;-1:-1:-1;;;;;26145:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;26145:34:0;;;;;;;26190:38;26145:26;:34;26190:25;:38::i;35150:357::-;-1:-1:-1;;;;;35235:29:0;;;;;;:20;:29;;;;;;;;35231:269;;;-1:-1:-1;;;;;35335:31:0;;35281:17;35335:31;;;:20;:31;;;;;;35301:15;;35335:36;35331:85;;-1:-1:-1;;;;;35373:31:0;;;;;;:20;:31;;;;;:43;;;35331:85;35266:162;35150:357;;:::o;35231:269::-;35454:9;;;;35449:39;;35465:13;:23;;-1:-1:-1;;;;;;35465:23:0;;-1:-1:-1;;;;;35465:23:0;;;;;;35449:39;35150:357;;:::o;31022:126::-;31078:4;31124:1;31102:19;:17;:19::i;:::-;:23;:38;;-1:-1:-1;31135:5:0;;31022:126::o;31102:38::-;-1:-1:-1;31128:4:0;;31022:126::o;35655:1753::-;35694:23;35720:24;35738:4;35720:9;:24::i;:::-;35694:50;;35755:23;35833:18;;35800:16;;35781;;:35;;;;:::i;:::-;:70;;;;:::i;:::-;35755:96;-1:-1:-1;35866:20:0;;;:44;;-1:-1:-1;35890:20:0;;35866:44;35862:57;;;35912:7;;35655:1753::o;35862:57::-;35951:19;;35933:15;:37;35929:107;;;36005:19;;35987:37;;35929:107;36046:23;36155:1;36124:15;36091:16;;36073:15;:34;;;;:::i;:::-;36072:67;;;;:::i;:::-;:84;;;;:::i;:::-;36046:110;-1:-1:-1;36167:26:0;36196:36;:15;36046:110;36196:19;:36::i;:::-;36167:65;-1:-1:-1;36271:21:0;36303:34;36167:65;36303:14;:34::i;:::-;36348:18;36369:44;:21;36395:17;36369:25;:44::i;:::-;36348:65;;36424:23;36450:77;36501:15;36450:32;36465:16;;36450:10;:14;;:32;;;;:::i;:::-;:36;;:77::i;:::-;36424:103;;36538:25;36566:79;36619:15;36566:34;36581:18;;36566:10;:14;;:34;;;;:::i;:79::-;36538:107;-1:-1:-1;36656:23:0;36538:107;36682:28;36695:15;36682:10;:28;:::i;:::-;:48;;;;:::i;:::-;36656:74;;36765:1;36747:15;:19;:42;;;;;36788:1;36770:15;:19;36747:42;36743:277;;;36806:47;36820:15;36837;36806:13;:47::i;:::-;36977:16;;36873:135;;;19159:25:1;;;19215:2;19200:18;;19193:34;;;19243:18;;;19236:34;;;;36873:135:0;;;;;;19147:2:1;36873:135:0;;;36743:277;37051:1;37032:16;:20;;;37063:16;:20;;;37094:18;:22;;;37169:16;;37161:58;;-1:-1:-1;;;;;37169:16:0;;;;37199:15;;37051:1;37161:58;37051:1;37161:58;37199:15;37169:16;37161:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37129:90;;;37238:20;37230:29;;;;;;37312:10;;37304:54;;37271:27;;-1:-1:-1;;;;;37312:10:0;;37336:17;;37271:27;37304:54;37271:27;37304:54;37336:17;37312:10;37304:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37270:88;;;37377:22;37369:31;;;;;;35683:1725;;;;;;;;;;;35655:1753::o;31156:1406::-;31336:14;31353:30;31364:7;31373:9;31353:10;:30::i;:::-;-1:-1:-1;;;;;31419:28:0;;31396:19;31419:28;;;:19;:28;;;;;;31336:47;;-1:-1:-1;31419:28:0;;31418:29;;31460:1040;;31496:45;31513:7;31522:9;31533:7;31496:16;:45::i;:::-;31556:7;;;;31460:1040;31584:9;31580:920;;;31632:10;;31683:13;;31711:152;;;;31770:12;;31757:10;;:25;;;;:::i;:::-;31743:39;;31835:12;;31819:13;;:28;;;;:::i;:::-;31801:46;;31711:152;31881:8;31877:155;;;31937:13;;31924:10;;:26;;;;:::i;:::-;31910:40;;32003:13;;31987;;:29;;;;:::i;:::-;31969:47;;31877:155;32046:17;32066:33;32095:3;32066:24;:7;32078:11;32066;:24::i;:33::-;32046:53;;32164:11;32147:13;;32135:9;:25;;;;:::i;:::-;32134:41;;;;:::i;:::-;32114:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;32242:11:0;;-1:-1:-1;32211:27:0;32223:15;32211:9;:27;:::i;:::-;32210:43;;;;:::i;:::-;32190:16;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;32303:15:0;;32322:11;;32291:27;;:9;:27;:::i;:::-;32290:43;;;;:::i;:::-;32268:18;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;32354:13:0;;32350:104;;32388:50;32404:7;32421:4;32428:9;32388:15;:50::i;:::-;32468:20;32479:9;32468:20;;:::i;:::-;;;31595:905;;;31580:920;32510:44;32526:7;32535:9;32546:7;32510:15;:44::i;:::-;31325:1237;;31156:1406;;;;;;:::o;2037:98::-;2095:7;2122:5;2126:1;2122;:5;:::i;2249:98::-;2307:7;2334:5;2338:1;2334;:5;:::i;37416:363::-;37530:16;;37498:63;;37515:4;;-1:-1:-1;;;;;37530:16:0;37549:11;37498:8;:63::i;:::-;37572:16;;-1:-1:-1;;;;;37572:16:0;:32;37612:9;37645:4;37665:11;37572:16;;37723:7;9453:6;;-1:-1:-1;;;;;9453:6:0;;9380:87;37723:7;37572:199;;;;;;-1:-1:-1;;;;;;37572:199:0;;;-1:-1:-1;;;;;19640:15:1;;;37572:199:0;;;19622:34:1;19672:18;;;19665:34;;;;19715:18;;;19708:34;;;;19758:18;;;19751:34;19822:15;;;19801:19;;;19794:44;37745:15:0;19854:19:1;;;19847:35;19556:19;;37572:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13974:674::-;-1:-1:-1;;;;;14117:21:0;;14109:71;;;;-1:-1:-1;;;14109:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14199:23:0;;14191:71;;;;-1:-1:-1;;;14191:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14361:18:0;;;14337:21;14361:18;;;;;;;;;;;;;14438:23;;;14417:44;;;14493:20;;;;;;;:31;;14454:7;;14337:21;14493:31;;14454:7;;14493:31;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1605:180::-;1664:6;1717:2;1705:9;1696:7;1692:23;1688:32;1685:52;;;1733:1;1730;1723:12;1685:52;-1:-1:-1;1756:23:1;;1605:180;-1:-1:-1;1605:180:1:o;1790:456::-;1867:6;1875;1883;1936:2;1924:9;1915:7;1911:23;1907:32;1904:52;;;1952:1;1949;1942:12;1904:52;1991:9;1978:23;2010:31;2035:5;2010:31;:::i;:::-;2060:5;-1:-1:-1;2117:2:1;2102:18;;2089:32;2130:33;2089:32;2130:33;:::i;:::-;1790:456;;2182:7;;-1:-1:-1;;;2236:2:1;2221:18;;;;2208:32;;1790:456::o;2251:247::-;2310:6;2363:2;2351:9;2342:7;2338:23;2334:32;2331:52;;;2379:1;2376;2369:12;2331:52;2418:9;2405:23;2437:31;2462:5;2437:31;:::i;2926:388::-;2994:6;3002;3055:2;3043:9;3034:7;3030:23;3026:32;3023:52;;;3071:1;3068;3061:12;3023:52;3110:9;3097:23;3129:31;3154:5;3129:31;:::i;:::-;3179:5;-1:-1:-1;3236:2:1;3221:18;;3208:32;3249:33;3208:32;3249:33;:::i;:::-;3301:7;3291:17;;;2926:388;;;;;:::o;3319:160::-;3384:20;;3440:13;;3433:21;3423:32;;3413:60;;3469:1;3466;3459:12;3484:316;3558:6;3566;3574;3627:2;3615:9;3606:7;3602:23;3598:32;3595:52;;;3643:1;3640;3633:12;3595:52;3679:9;3666:23;3656:33;;3736:2;3725:9;3721:18;3708:32;3698:42;;3759:35;3790:2;3779:9;3775:18;3759:35;:::i;:::-;3749:45;;3484:316;;;;;:::o;3805:315::-;3870:6;3878;3931:2;3919:9;3910:7;3906:23;3902:32;3899:52;;;3947:1;3944;3937:12;3899:52;3986:9;3973:23;4005:31;4030:5;4005:31;:::i;:::-;4055:5;-1:-1:-1;4079:35:1;4110:2;4095:18;;4079:35;:::i;:::-;4069:45;;3805:315;;;;;:::o;4646:380::-;4725:1;4721:12;;;;4768;;;4789:61;;4843:4;4835:6;4831:17;4821:27;;4789:61;4896:2;4888:6;4885:14;4865:18;4862:38;4859:161;;4942:10;4937:3;4933:20;4930:1;4923:31;4977:4;4974:1;4967:15;5005:4;5002:1;4995:15;4859:161;;4646:380;;;:::o;5031:356::-;5233:2;5215:21;;;5252:18;;;5245:30;5311:34;5306:2;5291:18;;5284:62;5378:2;5363:18;;5031:356::o;5392:127::-;5453:10;5448:3;5444:20;5441:1;5434:31;5484:4;5481:1;5474:15;5508:4;5505:1;5498:15;5524:125;5589:9;;;5610:10;;;5607:36;;;5623:18;;:::i;6426:184::-;6496:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:52;;;6565:1;6562;6555:12;6517:52;-1:-1:-1;6588:16:1;;6426:184;-1:-1:-1;6426:184:1:o;6615:168::-;6688:9;;;6719;;6736:15;;;6730:22;;6716:37;6706:71;;6757:18;;:::i;6788:217::-;6828:1;6854;6844:132;;6898:10;6893:3;6889:20;6886:1;6879:31;6933:4;6930:1;6923:15;6961:4;6958:1;6951:15;6844:132;-1:-1:-1;6990:9:1;;6788:217::o;7010:251::-;7080:6;7133:2;7121:9;7112:7;7108:23;7104:32;7101:52;;;7149:1;7146;7139:12;7101:52;7181:9;7175:16;7200:31;7225:5;7200:31;:::i;7266:188::-;7345:13;;-1:-1:-1;;;;;7387:42:1;;7377:53;;7367:81;;7444:1;7441;7434:12;7459:450;7546:6;7554;7562;7615:2;7603:9;7594:7;7590:23;7586:32;7583:52;;;7631:1;7628;7621:12;7583:52;7654:40;7684:9;7654:40;:::i;:::-;7644:50;;7713:49;7758:2;7747:9;7743:18;7713:49;:::i;:::-;7703:59;;7805:2;7794:9;7790:18;7784:25;7849:10;7842:5;7838:22;7831:5;7828:33;7818:61;;7875:1;7872;7865:12;7818:61;7898:5;7888:15;;;7459:450;;;;;:::o;7914:179::-;7992:13;;8045:22;8034:34;;8024:45;;8014:73;;8083:1;8080;8073:12;8098:473;8201:6;8209;8217;8225;8233;8286:3;8274:9;8265:7;8261:23;8257:33;8254:53;;;8303:1;8300;8293:12;8254:53;8326:39;8355:9;8326:39;:::i;:::-;8316:49;;8405:2;8394:9;8390:18;8384:25;8374:35;;8449:2;8438:9;8434:18;8428:25;8418:35;;8493:2;8482:9;8478:18;8472:25;8462:35;;8516:49;8560:3;8549:9;8545:19;8516:49;:::i;:::-;8506:59;;8098:473;;;;;;;;:::o;8576:273::-;8644:6;8697:2;8685:9;8676:7;8672:23;8668:32;8665:52;;;8713:1;8710;8703:12;8665:52;8745:9;8739:16;8795:4;8788:5;8784:16;8777:5;8774:27;8764:55;;8815:1;8812;8805:12;8854:422;8943:1;8986:5;8943:1;9000:270;9021:7;9011:8;9008:21;9000:270;;;9080:4;9076:1;9072:6;9068:17;9062:4;9059:27;9056:53;;;9089:18;;:::i;:::-;9139:7;9129:8;9125:22;9122:55;;;9159:16;;;;9122:55;9238:22;;;;9198:15;;;;9000:270;;;9004:3;8854:422;;;;;:::o;9281:806::-;9330:5;9360:8;9350:80;;-1:-1:-1;9401:1:1;9415:5;;9350:80;9449:4;9439:76;;-1:-1:-1;9486:1:1;9500:5;;9439:76;9531:4;9549:1;9544:59;;;;9617:1;9612:130;;;;9524:218;;9544:59;9574:1;9565:10;;9588:5;;;9612:130;9649:3;9639:8;9636:17;9633:43;;;9656:18;;:::i;:::-;-1:-1:-1;;9712:1:1;9698:16;;9727:5;;9524:218;;9826:2;9816:8;9813:16;9807:3;9801:4;9798:13;9794:36;9788:2;9778:8;9775:16;9770:2;9764:4;9761:12;9757:35;9754:77;9751:159;;;-1:-1:-1;9863:19:1;;;9895:5;;9751:159;9942:34;9967:8;9961:4;9942:34;:::i;:::-;10012:6;10008:1;10004:6;10000:19;9991:7;9988:32;9985:58;;;10023:18;;:::i;:::-;10061:20;;9281:806;-1:-1:-1;;;9281:806:1:o;10092:131::-;10152:5;10181:36;10208:8;10202:4;10181:36;:::i;14879:401::-;15081:2;15063:21;;;15120:2;15100:18;;;15093:30;15159:34;15154:2;15139:18;;15132:62;-1:-1:-1;;;15225:2:1;15210:18;;15203:35;15270:3;15255:19;;14879:401::o;15285:399::-;15487:2;15469:21;;;15526:2;15506:18;;;15499:30;15565:34;15560:2;15545:18;;15538:62;-1:-1:-1;;;15631:2:1;15616:18;;15609:33;15674:3;15659:19;;15285:399::o;17707:127::-;17768:10;17763:3;17759:20;17756:1;17749:31;17799:4;17796:1;17789:15;17823:4;17820:1;17813:15;17839:980;18101:4;18149:3;18138:9;18134:19;18180:6;18169:9;18162:25;18206:2;18244:6;18239:2;18228:9;18224:18;18217:34;18287:3;18282:2;18271:9;18267:18;18260:31;18311:6;18346;18340:13;18377:6;18369;18362:22;18415:3;18404:9;18400:19;18393:26;;18454:2;18446:6;18442:15;18428:29;;18475:1;18485:195;18499:6;18496:1;18493:13;18485:195;;;18564:13;;-1:-1:-1;;;;;18560:39:1;18548:52;;18655:15;;;;18620:12;;;;18596:1;18514:9;18485:195;;;-1:-1:-1;;;;;;;18736:32:1;;;;18731:2;18716:18;;18709:60;-1:-1:-1;;;18800:3:1;18785:19;18778:35;18697:3;17839:980;-1:-1:-1;;;17839:980:1:o;18824:128::-;18891:9;;;18912:11;;;18909:37;;;18926:18;;:::i;19893:306::-;19981:6;19989;19997;20050:2;20038:9;20029:7;20025:23;20021:32;20018:52;;;20066:1;20063;20056:12;20018:52;20095:9;20089:16;20079:26;;20145:2;20134:9;20130:18;20124:25;20114:35;;20189:2;20178:9;20174:18;20168:25;20158:35;;19893:306;;;;;:::o

Swarm Source

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