Token Florida Man

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000,000,000 FMAN

Holders:
138 addresses
Contract:
0x23382da257013081EAE425a53A7C982C1B0DEdDF0x23382da257013081EAE425a53A7C982C1B0DEdDF

Decimals:
18

Social Profiles:
Not Available, Update ?

Filtered by Token Holder (Crypto.com: CDC Withdrawal)

Balance
111,324,142,125 FMAN

Value
$0.00
0xc9219731adfa70645be14cd5d30507266f2092c5
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Florida_Man

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-20
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.9;

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

contract Florida_Man is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress =
        payable(0xD9B3A1f9464E4cF66d27959F5052B8Aa29cAa809); // Marketing Address
        
    address payable public NFTFarmAddress =
        payable(0x000000000000000000000000000000000000dEaD); // NFTFarm Address
        
    address payable public liquidityAddress =
        payable(0x000000000000000000000000000000000000dEaD); // Liquidity Address
        
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD; // dead address
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000 * 1e9 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    bool public limitsInEffect = true;
    
    string private constant _name = "Florida Man";
    string private constant _symbol = "FMAN";
    
    uint8 private constant _decimals = 18;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

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

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 3;
    uint256 public _buyMarketingFee = 12;
    uint256 public _buyNFTFarmFee = 0;

    uint256 public _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 3;
    uint256 public _sellMarketingFee = 12;
    uint256 public _sellNFTFarmFee = 0;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty
    
    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingTokensToSwap;
    uint256 private _NFTFarmTokensToSwap;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 100 * 1 gwei; 
    uint256 private gasMaxLimit =  50000000; // gasLeft limit
    
    uint256 public maxWallet;
    uint256 public maxBuyTransactionAmount;
    uint256 public maxSellTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

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

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

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

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);
    
    event UpdatedLiquidityAddress(address liquidity);
    
    event UpdatedNFTFarmAddress(address buyback);
    
    event OwnerForcedSwapBack(uint256 timestamp);
    
    event BoughtEarly(address indexed sniper);
    
    event RemovedSniper(address indexed notsnipersupposedly);

    event UpdatedRouter(address indexed newrouter);
    
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        
        maxBuyTransactionAmount = _tTotal * 5 / 1000; // 0.5% maxBuyTransactionAmountTxn
        maxSellTransactionAmount = _tTotal * 5 / 1000; // 0.5% maxSellTransactionAmountTxn
        maxWallet = _tTotal * 1 / 100;  // 1% Max wallet
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xd30d3aC04E2325E19A2227cfE6Bc860376Ba20b1);   // crowfi uniswapV2Router address

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        _isExcludedFromFee[NFTFarmAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

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

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum > (_tTotal * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }

    /*
    Solidity can not process decimals, so to increase flexibility, we multiple everything by 100.
    When entering the percent, you need to shift your decimal two steps to the right.
    eg: For 4% enter 400, for 1% enter 100, for 0.25% enter 25, for 0.2% enter 20 etc!
    */

    function updateMaxBuyTransactionPercent(uint256 maxTxPercent_x100) external onlyOwner {
        require(maxTxPercent_x100 > 20, "Cannot set the maxTransactionPercent lower than 0.2%");
        maxBuyTransactionAmount = _tTotal*maxTxPercent_x100/10000;
    }
    
    function updateMaxSellTransactionPercent(uint256 maxTxPercent_x100) external onlyOwner {
        require(maxTxPercent_x100 > 20, "Cannot set the maxTransactionPercent lower than 0.2%");
        maxSellTransactionAmount = _tTotal*maxTxPercent_x100/10000;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp + 72 hours;
    }
    
     // only use if conducting a presale (more specifically on DxSale where there is both an address and a router)
    function addPresaleAddressForExclusions(address _presaleAddress, address _presaleRouterAddress) external onlyOwner {
        _isExcludedFromFee[_presaleAddress] = true;
        _isExcludedFromFee[_presaleRouterAddress] = true;
        _isExcludedMaxTransactionAmount[_presaleAddress] = true;
        _isExcludedMaxTransactionAmount[_presaleRouterAddress] = true;
    }
    
    
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }
    
    function setGasMaxLimit(uint256 gas) external onlyOwner {
        require(gas >= 750000);
        gasMaxLimit = gas * gasPriceLimit;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        return true;
    }

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

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

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

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
        
     if(limitsInEffect){
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !inSwapAndLiquify
        ){
            
            if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock){
                boughtEarly[to] = true;
                emit BoughtEarly(to);
            }
            
            if (gasLimitActive && automatedMarketMakerPairs[from]) {
                require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
            }

            //only on buys
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyTransactionAmount, "Buy transfer amount exceeds the maxBuyTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
            //only on sells
            if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
            //normal transfer
            else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
        }
    }
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _NFTFarmTokensToSwap;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

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

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyNFTFarmFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellNFTFarmFee;
                buyOrSellSwitch = SELL;
                // triple tax if bought in the same block as trading active for 72 hours
                if(boughtEarly[from]  && earlyBuyPenaltyEnd <= block.number){
                    _taxFee = _taxFee * 3;
                    _liquidityFee = _liquidityFee * 3;
                }
            // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_NFTFarmTokensToSwap).add(_marketingTokensToSwap);
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForBNB = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialBNBBalance = address(this).balance;

        swapTokensForBNB(amountToSwapForBNB); 
        
        uint256 bnbBalance = address(this).balance.sub(initialBNBBalance);
        
        uint256 bnbForMarketing = bnbBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);
        uint256 bnbForNFTFarm = bnbBalance.mul(_NFTFarmTokensToSwap).div(totalTokensToSwap);
        
        uint256 bnbForLiquidity = bnbBalance.sub(bnbForMarketing).sub(bnbForNFTFarm);

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        _NFTFarmTokensToSwap = 0;
        
        (bool success,) = address(NFTFarmAddress).call{value: bnbForNFTFarm}("");
        (success,) = address(marketingAddress).call{value: bnbForMarketing}("");
        
        addLiquidity(tokensForLiquidity, bnbForLiquidity);
        emit SwapAndLiquify(amountToSwapForBNB, bnbForLiquidity, tokensForLiquidity);
        
        // send leftover BNB to the marketing wallet so it doesn't get stuck on the contract.
        if(address(this).balance > 1e17){
            (success,) = address(marketingAddress).call{value: address(this).balance}("");
        }
    }
    
    function swapTokensForBNB(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

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

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

        restoreAllFee();
    }

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

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

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

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

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

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

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

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

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

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

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

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

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

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

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

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

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee, uint256 buyNFTFarmFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        _buyNFTFarmFee = buyNFTFarmFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee + _buyNFTFarmFee <= 20, "Must keep taxes below 20%");
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee, buyNFTFarmFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee, uint256 sellNFTFarmFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        _sellNFTFarmFee = sellNFTFarmFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee + _sellNFTFarmFee <= 20, "Must keep taxes below 20%");
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee, sellNFTFarmFee);
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setNFTFarmAddress(address _NFTFarmAddress) external onlyOwner {
        require(_NFTFarmAddress != address(0), "_NFTFarmAddress address cannot be 0");
        NFTFarmAddress = payable(_NFTFarmAddress);
        _isExcludedFromFee[NFTFarmAddress] = true;
        emit UpdatedNFTFarmAddress(NFTFarmAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

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

    function getPairAddress() external view onlyOwner returns (address) {
        return uniswapV2Pair;
    }

    function changeRouterVersion(address _router)
        external
        onlyOwner
        returns (address _pair)
    {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdatedNFTFarmAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"NFTFarmAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyNFTFarmFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellNFTFarmFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"},{"internalType":"address","name":"_presaleRouterAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyNFTFarmFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_NFTFarmAddress","type":"address"}],"name":"setNFTFarmAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellNFTFarmFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"maxTxPercent_x100","type":"uint256"}],"name":"updateMaxBuyTransactionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent_x100","type":"uint256"}],"name":"updateMaxSellTransactionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b031990811673d9b3a1f9464e4cf66d27959f5052b8aa29caa8091790915560048054821661dead908117909155600580549092168117909155608052620000676d04ee2d6d415b85acef810000000060001962000deb565b620000759060001962000e18565b600c908155600e8054600160ff1991821681179092556010546011556012546013556000601481905560036015819055601685905560178290556018829055601955601a93909355601b839055601c929092556022805490921617905564174876e8006023556302faf080602455612710620001016d04ee2d6d415b85acef8100000000600562000e32565b6200010d919062000e54565b602a55602c805461ffff60a81b191690553480156200012b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c54336000908152600660205260409020556103e86200019e6d04ee2d6d415b85acef8100000000600562000e32565b620001aa919062000e54565b6026556103e8620001cb6d04ee2d6d415b85acef8100000000600562000e32565b620001d7919062000e54565b6027556064620001f76d04ee2d6d415b85acef8100000000600162000e32565b62000203919062000e54565b602581905550600073d30d3ac04e2325e19a2227cfe6bc860376ba20b190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025e57600080fd5b505afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000e6b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e257600080fd5b505afa158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000e6b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200036657600080fd5b505af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000e6b565b602b80546001600160a01b038086166001600160a01b031992831617909255602c8054928416929091169190911790559050620003e0816001620004fd565b600160096000620003f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600354821684528284208054861682179055600554821684528284208054861682179055600454909116835291208054909216179055620004936200048b6000546001600160a01b031690565b600162000597565b620004a030600162000597565b620004af61dead600162000597565b6040516d04ee2d6d415b85acef8100000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000f53565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200052d828262000597565b80156200053f576200053f8262000611565b806200055057620005508262000829565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b6000546001600160a01b03163314620005e65760405162461bcd60e51b81526020600482018190526024820152600080516020620053be83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146200065c5760405162461bcd60e51b81526020600482018190526024820152600080516020620053be8339815191526044820152606401620005dd565b6001600160a01b0381166000908152600a602052604090205460ff1615620006c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005dd565b600b54603290620006da90600162000e96565b1115620007665760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620005dd565b6001600160a01b03811660009081526006602052604090205415620007c3576001600160a01b038116600090815260066020526040902054620007a99062000a16565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314620008745760405162461bcd60e51b81526020600482018190526024820152600080516020620053be8339815191526044820152606401620005dd565b6001600160a01b0381166000908152600a602052604090205460ff16620008de5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401620005dd565b60005b600b5481101562000a1257816001600160a01b0316600b82815481106200090c576200090c62000eb1565b6000918252602090912001546001600160a01b03161415620009fd57600b80546200093a9060019062000e18565b815481106200094d576200094d62000eb1565b600091825260209091200154600b80546001600160a01b0390921691839081106200097c576200097c62000eb1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480620009d757620009d762000ec7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8062000a098162000edd565b915050620008e1565b5050565b6000600c5482111562000a7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005dd565b600062000a8b62000aae565b905062000aa7818462000ae160201b620026921790919060201c565b9392505050565b6000808062000abc62000b2b565b9150915062000ada818362000ae160201b620026921790919060201c565b9250505090565b600062000aa783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d1960201b60201c565b600c5460009081906d04ee2d6d415b85acef8100000000825b600b5481101562000cc2578260066000600b848154811062000b6a5762000b6a62000eb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bd957508160076000600b848154811062000bb25762000bb262000eb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000bfb575050600c54936d04ee2d6d415b85acef81000000009350915050565b62000c5260066000600b848154811062000c195762000c1962000eb1565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620026d462000d55821b17901c565b925062000cab60076000600b848154811062000c725762000c7262000eb1565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620026d462000d55821b17901c565b91508062000cb98162000edd565b91505062000b44565b5062000ced6d04ee2d6d415b85acef8100000000600c5462000ae160201b620026921790919060201c565b82101562000d10575050600c54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b6000818362000d3d5760405162461bcd60e51b8152600401620005dd919062000efb565b50600062000d4c848662000e54565b95945050505050565b600062000aa783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000d9f60201b60201c565b6000818484111562000dc65760405162461bcd60e51b8152600401620005dd919062000efb565b50600062000d4c848662000e18565b634e487b7160e01b600052601260045260246000fd5b60008262000dfd5762000dfd62000dd5565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000e2d5762000e2d62000e02565b500390565b600081600019048311821515161562000e4f5762000e4f62000e02565b500290565b60008262000e665762000e6662000dd5565b500490565b60006020828403121562000e7e57600080fd5b81516001600160a01b038116811462000aa757600080fd5b6000821982111562000eac5762000eac62000e02565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000ef45762000ef462000e02565b5060010190565b600060208083528351808285015260005b8181101562000f2a5785810183015185820160400152820162000f0c565b8181111562000f3d576000604083870101525b50601f01601f1916929092016040019392505050565b60805161444f62000f6f6000396000610614015261444f6000f3fe60806040526004361061041f5760003560e01c8063715018a61161021e578063a5ece94111610123578063d00dc589116100ab578063ea2f0b371161007a578063ea2f0b3714610cc6578063ee40166e14610ce6578063efcc52de14610cfc578063f2fde38b14610d12578063f8b45b0514610d3257600080fd5b8063d00dc58914610c2a578063dc44b6a014610c4a578063dd62ed3e14610c60578063e653da0814610ca657600080fd5b8063bbc0c742116100f2578063bbc0c74214610b9d578063c18bc19514610bbe578063c49b9a8014610bde578063c5d2418914610bfe578063c860795214610c1457600080fd5b8063a5ece94114610b0d578063a9059cbb14610b2d578063b1a8361014610b4d578063b62496f514610b6d57600080fd5b80638c5a133d116101a657806395d89b411161017557806395d89b4114610a6b5780639a7a23d614610a98578063a0263c8914610ab8578063a073d37f14610ad8578063a457c2d714610aed57600080fd5b80638c5a133d146109f85780638d5f81e214610a185780638da5cb5b14610a2d578063906e9dd014610a4b57600080fd5b80638366e79a116101ed5780638366e79a1461094457806385ecfd281461096457806388790a681461099457806388f82020146109aa5780638a8c523c146109e357600080fd5b8063715018a6146108e4578063751039fc146108f95780637571336a1461090e57806377fd00031461092e57600080fd5b806338acb20e1161032457806352390c02116102ac5780635881f3ef1161027b5780635881f3ef146108595780635aa821a9146108795780635bb988c91461088f578063602bc62b146108af57806370a08231146108c457600080fd5b806352390c02146107cd578063525fa81f146107ed5780635342acb41461080d578063557ed1ba1461084657600080fd5b80634549b039116102f35780634549b0391461073257806349bd5a5e146107525780634a62bb65146107725780634a74bb021461078c5780634b228c52146107ad57600080fd5b806338acb20e146106b257806339509351146106d25780634093746c146106f2578063437823ec1461071257600080fd5b80631fc851bd116103a757806327c8f8351161037657806327c8f835146106025780632d83811914610636578063313ce567146106565780633221c93f146106725780633685d4191461069257600080fd5b80631fc851bd146105a0578063200a692d146105b65780632142daff146105cc57806323b872dd146105e257600080fd5b8063095ea7b3116103ee578063095ea7b3146104d357806310d5de531461050357806313114a9d146105335780631694505e1461054857806318160ddd1461058057600080fd5b806302259e9e1461042b57806306fdde03146104545780630923160214610491578063092b2e4e146104b357600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160275481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152600b81526a233637b934b2309026b0b760a91b60208201525b60405161044b9190613f5b565b34801561049d57600080fd5b506104b16104ac366004613fb0565b610d48565b005b3480156104bf57600080fd5b506104b16104ce366004613fb0565b610d9d565b3480156104df57600080fd5b506104f36104ee366004613fe1565b610e11565b604051901515815260200161044b565b34801561050f57600080fd5b506104f361051e36600461400d565b60286020526000908152604090205460ff1681565b34801561053f57600080fd5b50600d54610441565b34801561055457600080fd5b50602b54610568906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b34801561058c57600080fd5b506904ee2d6d415b85acef8160201b610441565b3480156105ac57600080fd5b50610441601e5481565b3480156105c257600080fd5b5061044160185481565b3480156105d857600080fd5b5061044160175481565b3480156105ee57600080fd5b506104f36105fd36600461402a565b610e28565b34801561060e57600080fd5b506105687f000000000000000000000000000000000000000000000000000000000000000081565b34801561064257600080fd5b50610441610651366004613fb0565b610e91565b34801561066257600080fd5b506040516012815260200161044b565b34801561067e57600080fd5b50600554610568906001600160a01b031681565b34801561069e57600080fd5b506104b16106ad36600461400d565b610f15565b3480156106be57600080fd5b506104b16106cd36600461400d565b6110cc565b3480156106de57600080fd5b506104f36106ed366004613fe1565b6111ca565b3480156106fe57600080fd5b50600454610568906001600160a01b031681565b34801561071e57600080fd5b506104b161072d36600461400d565b611200565b34801561073e57600080fd5b5061044161074d366004614079565b61127e565b34801561075e57600080fd5b50602c54610568906001600160a01b031681565b34801561077e57600080fd5b50600e546104f39060ff1681565b34801561079857600080fd5b50602c546104f390600160a81b900460ff1681565b3480156107b957600080fd5b506104b16107c8366004613fb0565b611316565b3480156107d957600080fd5b506104b16107e836600461400d565b61138a565b3480156107f957600080fd5b506104b161080836600461400d565b611578565b34801561081957600080fd5b506104f361082836600461400d565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085257600080fd5b5042610441565b34801561086557600080fd5b5061056861087436600461400d565b61166e565b34801561088557600080fd5b5061044160265481565b34801561089b57600080fd5b506104b16108aa36600461400d565b611a48565b3480156108bb57600080fd5b50600254610441565b3480156108d057600080fd5b506104416108df36600461400d565b611abb565b3480156108f057600080fd5b506104b1611b1a565b34801561090557600080fd5b506104f3611b8e565b34801561091a57600080fd5b506104b16109293660046140a9565b611bd5565b34801561093a57600080fd5b50610441601b5481565b34801561095057600080fd5b506104f361095f3660046140d7565b611c2a565b34801561097057600080fd5b506104f361097f36600461400d565b601d6020526000908152604090205460ff1681565b3480156109a057600080fd5b5061044160195481565b3480156109b657600080fd5b506104f36109c536600461400d565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109ef57600080fd5b506104b1611e50565b348015610a0457600080fd5b506104b1610a13366004614105565b611ea5565b348015610a2457600080fd5b50610568611f9c565b348015610a3957600080fd5b506000546001600160a01b0316610568565b348015610a5757600080fd5b506104b1610a6636600461400d565b611fd7565b348015610a7757600080fd5b506040805180820190915260048152632326a0a760e11b6020820152610484565b348015610aa457600080fd5b506104b1610ab33660046140a9565b6120cd565b348015610ac457600080fd5b506104b1610ad3366004614137565b612185565b348015610ae457600080fd5b50602a54610441565b348015610af957600080fd5b506104f3610b08366004613fe1565b6121c2565b348015610b1957600080fd5b50600354610568906001600160a01b031681565b348015610b3957600080fd5b506104f3610b48366004613fe1565b612211565b348015610b5957600080fd5b506104b1610b683660046140d7565b61221e565b348015610b7957600080fd5b506104f3610b8836600461400d565b60296020526000908152604090205460ff1681565b348015610ba957600080fd5b50602c546104f390600160b01b900460ff1681565b348015610bca57600080fd5b506104b1610bd9366004613fb0565b6122a8565b348015610bea57600080fd5b506104b1610bf9366004614137565b61237a565b348015610c0a57600080fd5b5061044160165481565b348015610c2057600080fd5b50610441601a5481565b348015610c3657600080fd5b506104b1610c45366004613fb0565b6123f1565b348015610c5657600080fd5b5061044160155481565b348015610c6c57600080fd5b50610441610c7b3660046140d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610cb257600080fd5b506104b1610cc1366004614105565b61243e565b348015610cd257600080fd5b506104b1610ce136600461400d565b61252d565b348015610cf257600080fd5b50610441601c5481565b348015610d0857600080fd5b5061044160145481565b348015610d1e57600080fd5b506104b1610d2d36600461400d565b6125a8565b348015610d3e57600080fd5b5061044160255481565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b8152600401610d7290614154565b60405180910390fd5b604b811015610d8957600080fd5b610d9781633b9aca0061419f565b60235550565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610d7290614154565b60148111610de75760405162461bcd60e51b8152600401610d72906141be565b612710610e01826904ee2d6d415b85acef8160201b61419f565b610e0b9190614212565b60265550565b6000610e1e338484612716565b5060015b92915050565b6000610e3584848461283a565b610e878433610e82856040518060600160405280602881526020016143cd602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190613046565b612716565b5060019392505050565b6000600c54821115610ef85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d72565b6000610f02613080565b9050610f0e8382612692565b9392505050565b6000546001600160a01b03163314610f3f5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff16610fa75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d72565b60005b600b548110156110c857816001600160a01b0316600b8281548110610fd157610fd1614234565b6000918252602090912001546001600160a01b031614156110b657600b8054610ffc9060019061424a565b8154811061100c5761100c614234565b600091825260209091200154600b80546001600160a01b03909216918390811061103857611038614234565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061109057611090614261565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c081614277565b915050610faa565b5050565b6000546001600160a01b031633146110f65760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602360248201527f5f4e46544661726d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610d72565b600480546001600160a01b0319166001600160a01b038381169182178355600091825260096020908152604092839020805460ff1916600117905592549151911681527f0c9d4410b0c18b908731a2214ad5d5344fa43a8ca734c3fd0ab11a9c8695c33c91015b60405180910390a150565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e1e918590610e8290866130a3565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016111bf565b60006904ee2d6d415b85acef8160201b8311156112dd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d72565b816112fc5760006112ed84613102565b50939550610e22945050505050565b600061130784613102565b50929550610e22945050505050565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610d7290614154565b601481116113605760405162461bcd60e51b8152600401610d72906141be565b61271061137a826904ee2d6d415b85acef8160201b61419f565b6113849190614212565b60275550565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff161561141d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d72565b600b5460329061142e906001614292565b11156114b85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d72565b6001600160a01b03811660009081526006602052604090205415611512576001600160a01b0381166000908152600660205260409020546114f890610e91565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115a25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016111bf565b600080546001600160a01b031633146116995760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610d72565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176591906142aa565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906142aa565b91506001600160a01b0382166119e757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906142aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561192c57600080fd5b505afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196491906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906142aa565b91505b602c80546001600160a01b038085166001600160a01b031992831617909255602b80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b03163314611a725760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff1615611af857506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610e2290610e91565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610d7290614154565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d7290614154565b50600e805460ff19908116909155602280549091169055600190565b6000546001600160a01b03163314611bff5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c555760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038316611cab5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d72565b6001600160a01b038316301415611d045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d72565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611d4657600080fd5b505afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7e91906142c7565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906142e0565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610d7290614154565b602c805461ffff60a81b191661010160a81b17905543601c55611ea0426203f480614292565b601e55565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610d7290614154565b60148481556015849055601683905560178290558183611eef8688614292565b611ef99190614292565b611f039190614292565b1115611f4d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610d7290614154565b50602c546001600160a01b031690565b6000546001600160a01b031633146120015760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166120655760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016111bf565b6000546001600160a01b031633146120f75760405162461bcd60e51b8152600401610d7290614154565b602c546001600160a01b038381169116141561217b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d72565b6110c88282613151565b6000546001600160a01b031633146121af5760405162461bcd60e51b8152600401610d7290614154565b6022805460ff1916911515919091179055565b6000610e1e3384610e82856040518060600160405280602581526020016143f5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190613046565b6000610e1e33848461283a565b6000546001600160a01b031633146122485760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0391821660008181526009602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352602890915280822080548516861790559181522080549091169091179055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610d7290614154565b670de0b6b3a764000060646122f56904ee2d6d415b85acef8160201b600161419f565b6122ff9190614212565b6123099190614212565b81116123625760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610d72565b61237481670de0b6b3a764000061419f565b60255550565b6000546001600160a01b031633146123a45760405162461bcd60e51b8152600401610d7290614154565b602c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111bf90831515815260200190565b6000546001600160a01b0316331461241b5760405162461bcd60e51b8152600401610d7290614154565b620b71b081101561242b57600080fd5b602354612438908261419f565b60245550565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610d7290614154565b60188490556019839055601a829055601b8190556014818361248a8688614292565b6124949190614292565b61249e9190614292565b11156124e85760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611f8e565b6000546001600160a01b031633146125575760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016111bf565b6000546001600160a01b031633146125d25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166126375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d72565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e3565b6000610f0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613046565b6001600160a01b0383166127785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d72565b6001600160a01b0382166127d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d72565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661289e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d72565b6001600160a01b0382166129005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d72565b600081116129625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d72565b602c54600160b01b900460ff166129fe576001600160a01b03831660009081526009602052604090205460ff16806129b257506001600160a01b03821660009081526009602052604090205460ff165b6129fe5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d72565b600e5460ff1615612dc1576000546001600160a01b03848116911614801590612a3557506000546001600160a01b03838116911614155b8015612a4957506001600160a01b03821615155b8015612a6057506001600160a01b03821661dead14155b8015612a765750602c54600160a01b900460ff16155b15612dc1576000546001600160a01b03848116911614801590612aa75750602c546001600160a01b03838116911614155b8015612ab45750601c5443145b15612b03576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60225460ff168015612b2d57506001600160a01b03831660009081526029602052604090205460ff165b15612b84576023543a1115612b845760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d72565b6001600160a01b03831660009081526029602052604090205460ff168015612bc557506001600160a01b03821660009081526028602052604090205460ff16155b15612c7657602654811115612c425760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e00000000000000006064820152608401610d72565b602554612c4e83611abb565b612c589083614292565b1115612c765760405162461bcd60e51b8152600401610d72906142fd565b6001600160a01b03821660009081526029602052604090205460ff168015612cb757506001600160a01b03831660009081526028602052604090205460ff16155b15612d6d57602754811115612d345760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610d72565b602554612d4083611abb565b612d4a9083614292565b1115612d685760405162461bcd60e51b8152600401610d72906142fd565b612dc1565b6001600160a01b03821660009081526028602052604090205460ff16612dc157602554612d9983611abb565b612da39083614292565b1115612dc15760405162461bcd60e51b8152600401610d72906142fd565b6000602154602054601f54612dd69190614292565b612de09190614292565b90506000612ded30611abb565b602a54602c5491925082101590600160a01b900460ff16158015612e1a5750602c54600160a81b900460ff165b8015612e3b5750602c54600090612e39906001600160a01b0316611abb565b115b8015612e475750600083115b8015612e6c57506001600160a01b03851660009081526009602052604090205460ff16155b8015612e9157506001600160a01b03861660009081526009602052604090205460ff16155b8015612eb557506001600160a01b03851660009081526029602052604090205460ff165b8015612ebe5750805b15612ecb57612ecb613211565b6001600160a01b03861660009081526009602052604090205460019060ff1680612f0d57506001600160a01b03861660009081526009602052604090205460ff165b15612f1f57506003600f556000613031565b6001600160a01b03871660009081526029602052604090205460ff1615612f7857612f4861347c565b601454601055601754601654601554612f619190614292565b612f6b9190614292565b6012556001600f55613031565b6001600160a01b03861660009081526029602052604090205460ff161561302357612fa161347c565b601854601055601b54601a54601954612fba9190614292565b612fc49190614292565b6012556002600f556001600160a01b0387166000908152601d602052604090205460ff168015612ff6575043601e5411155b1561301e5760105461300990600361419f565b60105560125461301a90600361419f565b6012555b613031565b61302b61347c565b6003600f555b61303d878787846134aa565b50505050505050565b6000818484111561306a5760405162461bcd60e51b8152600401610d729190613f5b565b506000613077848661424a565b95945050505050565b600080600061308d6135d0565b909250905061309c8282612692565b9250505090565b6000806130b08385614292565b905083811015610f0e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d72565b60008060008060008060008060006131198a61377c565b92509250925060008060006131378d8686613132613080565b6137b8565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561317f8282611bd5565b801561318e5761318e8261138a565b8061319c5761319c82610f15565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b600081836132045760405162461bcd60e51b8152600401610d729190613f5b565b5060006130778486614212565b602c805460ff60a01b1916600160a01b179055600061322f30611abb565b90506000613256602054613250602154601f546130a390919063ffffffff16565b906130a3565b905060006132706002601f5461269290919063ffffffff16565b9050600061327e84836126d4565b90504761328a82613808565b600061329647836126d4565b905060006132b9866132b36020548561397190919063ffffffff16565b90612692565b905060006132d6876132b36021548661397190919063ffffffff16565b905060006132ee826132e886866126d4565b906126d4565b6000601f8190556020819055602181905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613350576040519150601f19603f3d011682016040523d82523d6000602084013e613355565b606091505b50506003546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146133a5576040519150601f19603f3d011682016040523d82523d6000602084013e6133aa565b606091505b5050809150506133ba88836139f0565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613463576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613458576040519150601f19603f3d011682016040523d82523d6000602084013e61345d565b606091505b50909150505b5050602c805460ff60a01b191690555050505050505050565b60105415801561348c5750601254155b1561349357565b601080546011556012805460135560009182905555565b806134b7576134b761347c565b6001600160a01b0384166000908152600a602052604090205460ff1680156134f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561350d57613508848484613ab3565b6135b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561354e57506001600160a01b0383166000908152600a602052604090205460ff165b1561355e57613508848484613bd9565b6001600160a01b0384166000908152600a602052604090205460ff16801561359e57506001600160a01b0383166000908152600a602052604090205460ff165b156135ae57613508848484613c82565b6135b9848484613cf5565b6135ca601154601055601354601255565b50505050565b600c5460009081906904ee2d6d415b85acef8160201b825b600b54811015613737578260066000600b848154811061360a5761360a614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061367557508160076000600b848154811061364e5761364e614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613695575050600c54936904ee2d6d415b85acef8160201b9350915050565b6136db60066000600b84815481106136af576136af614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d4565b925061372360076000600b84815481106136f7576136f7614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d4565b91508061372f81614277565b9150506135e8565b50600c54613752906904ee2d6d415b85acef8160201b612692565b821015613773575050600c54926904ee2d6d415b85acef8160201b92509050565b90939092509050565b60008060008061378b85613d39565b9050600061379886613d55565b905060006137aa826132e889866126d4565b979296509094509092505050565b60008080806137c78886613971565b905060006137d58887613971565b905060006137e38888613971565b905060006137f5826132e886866126d4565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061383d5761383d614234565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389157600080fd5b505afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906142aa565b816001815181106138dc576138dc614234565b6001600160a01b039283166020918202929092010152602b546139029130911684612716565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061393b90859060009086903090429060040161432d565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b60008261398057506000610e22565b600061398c838561419f565b9050826139998583614212565b14610f0e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d72565b602b54613a089030906001600160a01b031684612716565b602b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aac919061439e565b5050505050565b600080600080600080613ac587613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613af790886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613b2690876126d4565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054613b5590866130a3565b6001600160a01b038916600090815260066020526040902055613b7781613d71565b613b818483613f37565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc691815260200190565b60405180910390a3505050505050505050565b600080600080600080613beb87613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613c1d90876126d4565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613c5390846130a3565b6001600160a01b038916600090815260076020908152604080832093909355600690522054613b5590866130a3565b600080600080600080613c9487613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613cc690886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613c1d90876126d4565b600080600080600080613d0787613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613b2690876126d4565b6000610e2260646132b36010548561397190919063ffffffff16565b6000610e2260646132b36012548561397190919063ffffffff16565b6001600f541415613e1257601254601554613d8c908361419f565b613d969190614212565b601f6000828254613da79190614292565b9091555050601254601754613dbc908361419f565b613dc69190614212565b60216000828254613dd79190614292565b9091555050601254601654613dec908361419f565b613df69190614212565b60206000828254613e079190614292565b90915550613eae9050565b6002600f541415613eae57601254601954613e2d908361419f565b613e379190614212565b601f6000828254613e489190614292565b9091555050601254601b54613e5d908361419f565b613e679190614212565b60216000828254613e789190614292565b9091555050601254601a54613e8d908361419f565b613e979190614212565b60206000828254613ea89190614292565b90915550505b6000613eb8613080565b90506000613ec68383613971565b30600090815260066020526040902054909150613ee390826130a3565b30600090815260066020908152604080832093909355600a9052205460ff1615613f325730600090815260076020526040902054613f2190846130a3565b306000908152600760205260409020555b505050565b600c54613f4490836126d4565b600c55600d54613f5490826130a3565b600d555050565b600060208083528351808285015260005b81811015613f8857858101830151858201604001528201613f6c565b81811115613f9a576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613fc257600080fd5b5035919050565b6001600160a01b0381168114613fde57600080fd5b50565b60008060408385031215613ff457600080fd5b8235613fff81613fc9565b946020939093013593505050565b60006020828403121561401f57600080fd5b8135610f0e81613fc9565b60008060006060848603121561403f57600080fd5b833561404a81613fc9565b9250602084013561405a81613fc9565b929592945050506040919091013590565b8015158114613fde57600080fd5b6000806040838503121561408c57600080fd5b82359150602083013561409e8161406b565b809150509250929050565b600080604083850312156140bc57600080fd5b82356140c781613fc9565b9150602083013561409e8161406b565b600080604083850312156140ea57600080fd5b82356140f581613fc9565b9150602083013561409e81613fc9565b6000806000806080858703121561411b57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561414957600080fd5b8135610f0e8161406b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141b9576141b9614189565b500290565b60208082526034908201527f43616e6e6f742073657420746865206d61785472616e73616374696f6e50657260408201527363656e74206c6f776572207468616e20302e322560601b606082015260800190565b60008261422f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561425c5761425c614189565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561428b5761428b614189565b5060010190565b600082198211156142a5576142a5614189565b500190565b6000602082840312156142bc57600080fd5b8151610f0e81613fc9565b6000602082840312156142d957600080fd5b5051919050565b6000602082840312156142f257600080fd5b8151610f0e8161406b565b60208082526016908201527510d85b89dd08195e18d95959081b585e15d85b1b195d60521b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437d5784516001600160a01b031683529383019391830191600101614358565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206979e97137a82a60d9b9a153481556d19bee77245f50dc0961ba5a7daa473cac64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063715018a61161021e578063a5ece94111610123578063d00dc589116100ab578063ea2f0b371161007a578063ea2f0b3714610cc6578063ee40166e14610ce6578063efcc52de14610cfc578063f2fde38b14610d12578063f8b45b0514610d3257600080fd5b8063d00dc58914610c2a578063dc44b6a014610c4a578063dd62ed3e14610c60578063e653da0814610ca657600080fd5b8063bbc0c742116100f2578063bbc0c74214610b9d578063c18bc19514610bbe578063c49b9a8014610bde578063c5d2418914610bfe578063c860795214610c1457600080fd5b8063a5ece94114610b0d578063a9059cbb14610b2d578063b1a8361014610b4d578063b62496f514610b6d57600080fd5b80638c5a133d116101a657806395d89b411161017557806395d89b4114610a6b5780639a7a23d614610a98578063a0263c8914610ab8578063a073d37f14610ad8578063a457c2d714610aed57600080fd5b80638c5a133d146109f85780638d5f81e214610a185780638da5cb5b14610a2d578063906e9dd014610a4b57600080fd5b80638366e79a116101ed5780638366e79a1461094457806385ecfd281461096457806388790a681461099457806388f82020146109aa5780638a8c523c146109e357600080fd5b8063715018a6146108e4578063751039fc146108f95780637571336a1461090e57806377fd00031461092e57600080fd5b806338acb20e1161032457806352390c02116102ac5780635881f3ef1161027b5780635881f3ef146108595780635aa821a9146108795780635bb988c91461088f578063602bc62b146108af57806370a08231146108c457600080fd5b806352390c02146107cd578063525fa81f146107ed5780635342acb41461080d578063557ed1ba1461084657600080fd5b80634549b039116102f35780634549b0391461073257806349bd5a5e146107525780634a62bb65146107725780634a74bb021461078c5780634b228c52146107ad57600080fd5b806338acb20e146106b257806339509351146106d25780634093746c146106f2578063437823ec1461071257600080fd5b80631fc851bd116103a757806327c8f8351161037657806327c8f835146106025780632d83811914610636578063313ce567146106565780633221c93f146106725780633685d4191461069257600080fd5b80631fc851bd146105a0578063200a692d146105b65780632142daff146105cc57806323b872dd146105e257600080fd5b8063095ea7b3116103ee578063095ea7b3146104d357806310d5de531461050357806313114a9d146105335780631694505e1461054857806318160ddd1461058057600080fd5b806302259e9e1461042b57806306fdde03146104545780630923160214610491578063092b2e4e146104b357600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160275481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152600b81526a233637b934b2309026b0b760a91b60208201525b60405161044b9190613f5b565b34801561049d57600080fd5b506104b16104ac366004613fb0565b610d48565b005b3480156104bf57600080fd5b506104b16104ce366004613fb0565b610d9d565b3480156104df57600080fd5b506104f36104ee366004613fe1565b610e11565b604051901515815260200161044b565b34801561050f57600080fd5b506104f361051e36600461400d565b60286020526000908152604090205460ff1681565b34801561053f57600080fd5b50600d54610441565b34801561055457600080fd5b50602b54610568906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b34801561058c57600080fd5b506904ee2d6d415b85acef8160201b610441565b3480156105ac57600080fd5b50610441601e5481565b3480156105c257600080fd5b5061044160185481565b3480156105d857600080fd5b5061044160175481565b3480156105ee57600080fd5b506104f36105fd36600461402a565b610e28565b34801561060e57600080fd5b506105687f000000000000000000000000000000000000000000000000000000000000dead81565b34801561064257600080fd5b50610441610651366004613fb0565b610e91565b34801561066257600080fd5b506040516012815260200161044b565b34801561067e57600080fd5b50600554610568906001600160a01b031681565b34801561069e57600080fd5b506104b16106ad36600461400d565b610f15565b3480156106be57600080fd5b506104b16106cd36600461400d565b6110cc565b3480156106de57600080fd5b506104f36106ed366004613fe1565b6111ca565b3480156106fe57600080fd5b50600454610568906001600160a01b031681565b34801561071e57600080fd5b506104b161072d36600461400d565b611200565b34801561073e57600080fd5b5061044161074d366004614079565b61127e565b34801561075e57600080fd5b50602c54610568906001600160a01b031681565b34801561077e57600080fd5b50600e546104f39060ff1681565b34801561079857600080fd5b50602c546104f390600160a81b900460ff1681565b3480156107b957600080fd5b506104b16107c8366004613fb0565b611316565b3480156107d957600080fd5b506104b16107e836600461400d565b61138a565b3480156107f957600080fd5b506104b161080836600461400d565b611578565b34801561081957600080fd5b506104f361082836600461400d565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085257600080fd5b5042610441565b34801561086557600080fd5b5061056861087436600461400d565b61166e565b34801561088557600080fd5b5061044160265481565b34801561089b57600080fd5b506104b16108aa36600461400d565b611a48565b3480156108bb57600080fd5b50600254610441565b3480156108d057600080fd5b506104416108df36600461400d565b611abb565b3480156108f057600080fd5b506104b1611b1a565b34801561090557600080fd5b506104f3611b8e565b34801561091a57600080fd5b506104b16109293660046140a9565b611bd5565b34801561093a57600080fd5b50610441601b5481565b34801561095057600080fd5b506104f361095f3660046140d7565b611c2a565b34801561097057600080fd5b506104f361097f36600461400d565b601d6020526000908152604090205460ff1681565b3480156109a057600080fd5b5061044160195481565b3480156109b657600080fd5b506104f36109c536600461400d565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109ef57600080fd5b506104b1611e50565b348015610a0457600080fd5b506104b1610a13366004614105565b611ea5565b348015610a2457600080fd5b50610568611f9c565b348015610a3957600080fd5b506000546001600160a01b0316610568565b348015610a5757600080fd5b506104b1610a6636600461400d565b611fd7565b348015610a7757600080fd5b506040805180820190915260048152632326a0a760e11b6020820152610484565b348015610aa457600080fd5b506104b1610ab33660046140a9565b6120cd565b348015610ac457600080fd5b506104b1610ad3366004614137565b612185565b348015610ae457600080fd5b50602a54610441565b348015610af957600080fd5b506104f3610b08366004613fe1565b6121c2565b348015610b1957600080fd5b50600354610568906001600160a01b031681565b348015610b3957600080fd5b506104f3610b48366004613fe1565b612211565b348015610b5957600080fd5b506104b1610b683660046140d7565b61221e565b348015610b7957600080fd5b506104f3610b8836600461400d565b60296020526000908152604090205460ff1681565b348015610ba957600080fd5b50602c546104f390600160b01b900460ff1681565b348015610bca57600080fd5b506104b1610bd9366004613fb0565b6122a8565b348015610bea57600080fd5b506104b1610bf9366004614137565b61237a565b348015610c0a57600080fd5b5061044160165481565b348015610c2057600080fd5b50610441601a5481565b348015610c3657600080fd5b506104b1610c45366004613fb0565b6123f1565b348015610c5657600080fd5b5061044160155481565b348015610c6c57600080fd5b50610441610c7b3660046140d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610cb257600080fd5b506104b1610cc1366004614105565b61243e565b348015610cd257600080fd5b506104b1610ce136600461400d565b61252d565b348015610cf257600080fd5b50610441601c5481565b348015610d0857600080fd5b5061044160145481565b348015610d1e57600080fd5b506104b1610d2d36600461400d565b6125a8565b348015610d3e57600080fd5b5061044160255481565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b8152600401610d7290614154565b60405180910390fd5b604b811015610d8957600080fd5b610d9781633b9aca0061419f565b60235550565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610d7290614154565b60148111610de75760405162461bcd60e51b8152600401610d72906141be565b612710610e01826904ee2d6d415b85acef8160201b61419f565b610e0b9190614212565b60265550565b6000610e1e338484612716565b5060015b92915050565b6000610e3584848461283a565b610e878433610e82856040518060600160405280602881526020016143cd602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190613046565b612716565b5060019392505050565b6000600c54821115610ef85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d72565b6000610f02613080565b9050610f0e8382612692565b9392505050565b6000546001600160a01b03163314610f3f5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff16610fa75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d72565b60005b600b548110156110c857816001600160a01b0316600b8281548110610fd157610fd1614234565b6000918252602090912001546001600160a01b031614156110b657600b8054610ffc9060019061424a565b8154811061100c5761100c614234565b600091825260209091200154600b80546001600160a01b03909216918390811061103857611038614234565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061109057611090614261565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c081614277565b915050610faa565b5050565b6000546001600160a01b031633146110f65760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602360248201527f5f4e46544661726d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610d72565b600480546001600160a01b0319166001600160a01b038381169182178355600091825260096020908152604092839020805460ff1916600117905592549151911681527f0c9d4410b0c18b908731a2214ad5d5344fa43a8ca734c3fd0ab11a9c8695c33c91015b60405180910390a150565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e1e918590610e8290866130a3565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016111bf565b60006904ee2d6d415b85acef8160201b8311156112dd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d72565b816112fc5760006112ed84613102565b50939550610e22945050505050565b600061130784613102565b50929550610e22945050505050565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610d7290614154565b601481116113605760405162461bcd60e51b8152600401610d72906141be565b61271061137a826904ee2d6d415b85acef8160201b61419f565b6113849190614212565b60275550565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff161561141d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d72565b600b5460329061142e906001614292565b11156114b85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d72565b6001600160a01b03811660009081526006602052604090205415611512576001600160a01b0381166000908152600660205260409020546114f890610e91565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115a25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016111bf565b600080546001600160a01b031633146116995760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610d72565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176591906142aa565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906142aa565b91506001600160a01b0382166119e757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906142aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561192c57600080fd5b505afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196491906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906142aa565b91505b602c80546001600160a01b038085166001600160a01b031992831617909255602b80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b03163314611a725760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff1615611af857506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610e2290610e91565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610d7290614154565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d7290614154565b50600e805460ff19908116909155602280549091169055600190565b6000546001600160a01b03163314611bff5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c555760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038316611cab5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d72565b6001600160a01b038316301415611d045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d72565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611d4657600080fd5b505afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7e91906142c7565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906142e0565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610d7290614154565b602c805461ffff60a81b191661010160a81b17905543601c55611ea0426203f480614292565b601e55565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610d7290614154565b60148481556015849055601683905560178290558183611eef8688614292565b611ef99190614292565b611f039190614292565b1115611f4d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610d7290614154565b50602c546001600160a01b031690565b6000546001600160a01b031633146120015760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166120655760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016111bf565b6000546001600160a01b031633146120f75760405162461bcd60e51b8152600401610d7290614154565b602c546001600160a01b038381169116141561217b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d72565b6110c88282613151565b6000546001600160a01b031633146121af5760405162461bcd60e51b8152600401610d7290614154565b6022805460ff1916911515919091179055565b6000610e1e3384610e82856040518060600160405280602581526020016143f5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190613046565b6000610e1e33848461283a565b6000546001600160a01b031633146122485760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0391821660008181526009602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352602890915280822080548516861790559181522080549091169091179055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610d7290614154565b670de0b6b3a764000060646122f56904ee2d6d415b85acef8160201b600161419f565b6122ff9190614212565b6123099190614212565b81116123625760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610d72565b61237481670de0b6b3a764000061419f565b60255550565b6000546001600160a01b031633146123a45760405162461bcd60e51b8152600401610d7290614154565b602c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111bf90831515815260200190565b6000546001600160a01b0316331461241b5760405162461bcd60e51b8152600401610d7290614154565b620b71b081101561242b57600080fd5b602354612438908261419f565b60245550565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610d7290614154565b60188490556019839055601a829055601b8190556014818361248a8688614292565b6124949190614292565b61249e9190614292565b11156124e85760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611f8e565b6000546001600160a01b031633146125575760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016111bf565b6000546001600160a01b031633146125d25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166126375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d72565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e3565b6000610f0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613046565b6001600160a01b0383166127785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d72565b6001600160a01b0382166127d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d72565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661289e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d72565b6001600160a01b0382166129005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d72565b600081116129625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d72565b602c54600160b01b900460ff166129fe576001600160a01b03831660009081526009602052604090205460ff16806129b257506001600160a01b03821660009081526009602052604090205460ff165b6129fe5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d72565b600e5460ff1615612dc1576000546001600160a01b03848116911614801590612a3557506000546001600160a01b03838116911614155b8015612a4957506001600160a01b03821615155b8015612a6057506001600160a01b03821661dead14155b8015612a765750602c54600160a01b900460ff16155b15612dc1576000546001600160a01b03848116911614801590612aa75750602c546001600160a01b03838116911614155b8015612ab45750601c5443145b15612b03576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60225460ff168015612b2d57506001600160a01b03831660009081526029602052604090205460ff165b15612b84576023543a1115612b845760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d72565b6001600160a01b03831660009081526029602052604090205460ff168015612bc557506001600160a01b03821660009081526028602052604090205460ff16155b15612c7657602654811115612c425760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e00000000000000006064820152608401610d72565b602554612c4e83611abb565b612c589083614292565b1115612c765760405162461bcd60e51b8152600401610d72906142fd565b6001600160a01b03821660009081526029602052604090205460ff168015612cb757506001600160a01b03831660009081526028602052604090205460ff16155b15612d6d57602754811115612d345760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610d72565b602554612d4083611abb565b612d4a9083614292565b1115612d685760405162461bcd60e51b8152600401610d72906142fd565b612dc1565b6001600160a01b03821660009081526028602052604090205460ff16612dc157602554612d9983611abb565b612da39083614292565b1115612dc15760405162461bcd60e51b8152600401610d72906142fd565b6000602154602054601f54612dd69190614292565b612de09190614292565b90506000612ded30611abb565b602a54602c5491925082101590600160a01b900460ff16158015612e1a5750602c54600160a81b900460ff165b8015612e3b5750602c54600090612e39906001600160a01b0316611abb565b115b8015612e475750600083115b8015612e6c57506001600160a01b03851660009081526009602052604090205460ff16155b8015612e9157506001600160a01b03861660009081526009602052604090205460ff16155b8015612eb557506001600160a01b03851660009081526029602052604090205460ff165b8015612ebe5750805b15612ecb57612ecb613211565b6001600160a01b03861660009081526009602052604090205460019060ff1680612f0d57506001600160a01b03861660009081526009602052604090205460ff165b15612f1f57506003600f556000613031565b6001600160a01b03871660009081526029602052604090205460ff1615612f7857612f4861347c565b601454601055601754601654601554612f619190614292565b612f6b9190614292565b6012556001600f55613031565b6001600160a01b03861660009081526029602052604090205460ff161561302357612fa161347c565b601854601055601b54601a54601954612fba9190614292565b612fc49190614292565b6012556002600f556001600160a01b0387166000908152601d602052604090205460ff168015612ff6575043601e5411155b1561301e5760105461300990600361419f565b60105560125461301a90600361419f565b6012555b613031565b61302b61347c565b6003600f555b61303d878787846134aa565b50505050505050565b6000818484111561306a5760405162461bcd60e51b8152600401610d729190613f5b565b506000613077848661424a565b95945050505050565b600080600061308d6135d0565b909250905061309c8282612692565b9250505090565b6000806130b08385614292565b905083811015610f0e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d72565b60008060008060008060008060006131198a61377c565b92509250925060008060006131378d8686613132613080565b6137b8565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561317f8282611bd5565b801561318e5761318e8261138a565b8061319c5761319c82610f15565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b600081836132045760405162461bcd60e51b8152600401610d729190613f5b565b5060006130778486614212565b602c805460ff60a01b1916600160a01b179055600061322f30611abb565b90506000613256602054613250602154601f546130a390919063ffffffff16565b906130a3565b905060006132706002601f5461269290919063ffffffff16565b9050600061327e84836126d4565b90504761328a82613808565b600061329647836126d4565b905060006132b9866132b36020548561397190919063ffffffff16565b90612692565b905060006132d6876132b36021548661397190919063ffffffff16565b905060006132ee826132e886866126d4565b906126d4565b6000601f8190556020819055602181905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613350576040519150601f19603f3d011682016040523d82523d6000602084013e613355565b606091505b50506003546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146133a5576040519150601f19603f3d011682016040523d82523d6000602084013e6133aa565b606091505b5050809150506133ba88836139f0565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613463576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613458576040519150601f19603f3d011682016040523d82523d6000602084013e61345d565b606091505b50909150505b5050602c805460ff60a01b191690555050505050505050565b60105415801561348c5750601254155b1561349357565b601080546011556012805460135560009182905555565b806134b7576134b761347c565b6001600160a01b0384166000908152600a602052604090205460ff1680156134f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561350d57613508848484613ab3565b6135b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561354e57506001600160a01b0383166000908152600a602052604090205460ff165b1561355e57613508848484613bd9565b6001600160a01b0384166000908152600a602052604090205460ff16801561359e57506001600160a01b0383166000908152600a602052604090205460ff165b156135ae57613508848484613c82565b6135b9848484613cf5565b6135ca601154601055601354601255565b50505050565b600c5460009081906904ee2d6d415b85acef8160201b825b600b54811015613737578260066000600b848154811061360a5761360a614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061367557508160076000600b848154811061364e5761364e614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613695575050600c54936904ee2d6d415b85acef8160201b9350915050565b6136db60066000600b84815481106136af576136af614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d4565b925061372360076000600b84815481106136f7576136f7614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d4565b91508061372f81614277565b9150506135e8565b50600c54613752906904ee2d6d415b85acef8160201b612692565b821015613773575050600c54926904ee2d6d415b85acef8160201b92509050565b90939092509050565b60008060008061378b85613d39565b9050600061379886613d55565b905060006137aa826132e889866126d4565b979296509094509092505050565b60008080806137c78886613971565b905060006137d58887613971565b905060006137e38888613971565b905060006137f5826132e886866126d4565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061383d5761383d614234565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389157600080fd5b505afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906142aa565b816001815181106138dc576138dc614234565b6001600160a01b039283166020918202929092010152602b546139029130911684612716565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061393b90859060009086903090429060040161432d565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b60008261398057506000610e22565b600061398c838561419f565b9050826139998583614212565b14610f0e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d72565b602b54613a089030906001600160a01b031684612716565b602b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aac919061439e565b5050505050565b600080600080600080613ac587613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613af790886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613b2690876126d4565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054613b5590866130a3565b6001600160a01b038916600090815260066020526040902055613b7781613d71565b613b818483613f37565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc691815260200190565b60405180910390a3505050505050505050565b600080600080600080613beb87613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613c1d90876126d4565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613c5390846130a3565b6001600160a01b038916600090815260076020908152604080832093909355600690522054613b5590866130a3565b600080600080600080613c9487613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613cc690886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613c1d90876126d4565b600080600080600080613d0787613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613b2690876126d4565b6000610e2260646132b36010548561397190919063ffffffff16565b6000610e2260646132b36012548561397190919063ffffffff16565b6001600f541415613e1257601254601554613d8c908361419f565b613d969190614212565b601f6000828254613da79190614292565b9091555050601254601754613dbc908361419f565b613dc69190614212565b60216000828254613dd79190614292565b9091555050601254601654613dec908361419f565b613df69190614212565b60206000828254613e079190614292565b90915550613eae9050565b6002600f541415613eae57601254601954613e2d908361419f565b613e379190614212565b601f6000828254613e489190614292565b9091555050601254601b54613e5d908361419f565b613e679190614212565b60216000828254613e789190614292565b9091555050601254601a54613e8d908361419f565b613e979190614212565b60206000828254613ea89190614292565b90915550505b6000613eb8613080565b90506000613ec68383613971565b30600090815260066020526040902054909150613ee390826130a3565b30600090815260066020908152604080832093909355600a9052205460ff1615613f325730600090815260076020526040902054613f2190846130a3565b306000908152600760205260409020555b505050565b600c54613f4490836126d4565b600c55600d54613f5490826130a3565b600d555050565b600060208083528351808285015260005b81811015613f8857858101830151858201604001528201613f6c565b81811115613f9a576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613fc257600080fd5b5035919050565b6001600160a01b0381168114613fde57600080fd5b50565b60008060408385031215613ff457600080fd5b8235613fff81613fc9565b946020939093013593505050565b60006020828403121561401f57600080fd5b8135610f0e81613fc9565b60008060006060848603121561403f57600080fd5b833561404a81613fc9565b9250602084013561405a81613fc9565b929592945050506040919091013590565b8015158114613fde57600080fd5b6000806040838503121561408c57600080fd5b82359150602083013561409e8161406b565b809150509250929050565b600080604083850312156140bc57600080fd5b82356140c781613fc9565b9150602083013561409e8161406b565b600080604083850312156140ea57600080fd5b82356140f581613fc9565b9150602083013561409e81613fc9565b6000806000806080858703121561411b57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561414957600080fd5b8135610f0e8161406b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141b9576141b9614189565b500290565b60208082526034908201527f43616e6e6f742073657420746865206d61785472616e73616374696f6e50657260408201527363656e74206c6f776572207468616e20302e322560601b606082015260800190565b60008261422f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561425c5761425c614189565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561428b5761428b614189565b5060010190565b600082198211156142a5576142a5614189565b500190565b6000602082840312156142bc57600080fd5b8151610f0e81613fc9565b6000602082840312156142d957600080fd5b5051919050565b6000602082840312156142f257600080fd5b8151610f0e8161406b565b60208082526016908201527510d85b89dd08195e18d95959081b585e15d85b1b195d60521b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437d5784516001600160a01b031683529383019391830191600101614358565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206979e97137a82a60d9b9a153481556d19bee77245f50dc0961ba5a7daa473cac64736f6c63430008090033

Deployed ByteCode Sourcemap

16517:33390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19352:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19352:39:0;;;;;;;;22731:85;;;;;;;;;;-1:-1:-1;22803:5:0;;;;;;;;;;;;-1:-1:-1;;;22803:5:0;;;;22731:85;;;;;;;:::i;28057:134::-;;;;;;;;;;-1:-1:-1;28057:134:0;;;;;:::i;:::-;;:::i;:::-;;25875:260;;;;;;;;;;-1:-1:-1;25875:260:0;;;;;:::i;:::-;;:::i;23728:195::-;;;;;;;;;;-1:-1:-1;23728:195:0;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;23728:195:0;1439:187:1;19398:64:0;;;;;;;;;;-1:-1:-1;19398:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25269:89;;;;;;;;;;-1:-1:-1;25340:10:0;;25269:89;;19770:41;;;;;;;;;;-1:-1:-1;19770:41:0;;;;-1:-1:-1;;;;;19770:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;19770:41:0;1883:230:1;23014:97:0;;;;;;;;;;-1:-1:-1;;;;23014:97:0;;18866:33;;;;;;;;;;;;;;;;18568:30;;;;;;;;;;;;;;;;18526:33;;;;;;;;;;;;;;;;23931:448;;;;;;;;;;-1:-1:-1;23931:448:0;;;;;:::i;:::-;;:::i;17056:90::-;;;;;;;;;;;;;;;29066:322;;;;;;;;;;-1:-1:-1;29066:322:0;;;;;:::i;:::-;;:::i;22921:85::-;;;;;;;;;;-1:-1:-1;22921:85:0;;17893:2;2929:36:1;;2917:2;2902:18;22921:85:0;2787:184:1;16916:102:0;;;;;;;;;;-1:-1:-1;16916:102:0;;;;-1:-1:-1;;;;;16916:102:0;;;29863:471;;;;;;;;;;-1:-1:-1;29863:471:0;;;;;:::i;:::-;;:::i;47484:324::-;;;;;;;;;;-1:-1:-1;47484:324:0;;;;;:::i;:::-;;:::i;24387:302::-;;;;;;;;;;-1:-1:-1;24387:302:0;;;;;:::i;:::-;;:::i;16780:100::-;;;;;;;;;;-1:-1:-1;16780:100:0;;;;-1:-1:-1;;;;;16780:100:0;;;45552:152;;;;;;;;;;-1:-1:-1;45552:152:0;;;;;:::i;:::-;;:::i;28577:481::-;;;;;;;;;;-1:-1:-1;28577:481:0;;;;;:::i;:::-;;:::i;19818:28::-;;;;;;;;;;-1:-1:-1;19818:28:0;;;;-1:-1:-1;;;;;19818:28:0;;;17707:33;;;;;;;;;;-1:-1:-1;17707:33:0;;;;;;;;19883:41;;;;;;;;;;-1:-1:-1;19883:41:0;;;;-1:-1:-1;;;19883:41:0;;;;;;26147:262;;;;;;;;;;-1:-1:-1;26147:262:0;;;;;:::i;:::-;;:::i;29396:459::-;;;;;;;;;;-1:-1:-1;29396:459:0;;;;;:::i;:::-;;:::i;47820:343::-;;;;;;;;;;-1:-1:-1;47820:343:0;;;;;:::i;:::-;;:::i;45418:126::-;;;;;;;;;;-1:-1:-1;45418:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45509:27:0;45485:4;45509:27;;;:18;:27;;;;;;;;;45418:126;7219:90;;;;;;;;;;-1:-1:-1;7286:15:0;7219:90;;48465:848;;;;;;;;;;-1:-1:-1;48465:848:0;;;;;:::i;:::-;;:::i;19307:38::-;;;;;;;;;;;;;;;;45873:148;;;;;;;;;;-1:-1:-1;45873:148:0;;;;;:::i;:::-;;:::i;7121:90::-;;;;;;;;;;-1:-1:-1;7194:9:0;;7121:90;;23119:198;;;;;;;;;;-1:-1:-1;23119:198:0;;;;;:::i;:::-;;:::i;6672:150::-;;;;;;;;;;;;;:::i;28416:153::-;;;;;;;;;;;;;:::i;30346:144::-;;;;;;;;;;-1:-1:-1;30346:144:0;;;;;:::i;:::-;;:::i;18692:34::-;;;;;;;;;;;;;;;;49416:488;;;;;;;;;;-1:-1:-1;49416:488:0;;;;;:::i;:::-;;:::i;18816:43::-;;;;;;;;;;-1:-1:-1;18816:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18605:36;;;;;;;;;;;;;;;;25107:154;;;;;;;;;;-1:-1:-1;25107:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;25233:20:0;25204:4;25233:20;;;:11;:20;;;;;;;;;25107:154;26463:224;;;;;;;;;;;;;:::i;46029:530::-;;;;;;;;;;-1:-1:-1;46029:530:0;;;;;:::i;:::-;;:::i;48350:107::-;;;;;;;;;;;;;:::i;6458:79::-;;;;;;;;;;-1:-1:-1;6496:7:0;6523:6;-1:-1:-1;;;;;6523:6:0;6458:79;;47129:343;;;;;;;;;;-1:-1:-1;47129:343:0;;;;;:::i;:::-;;:::i;22824:89::-;;;;;;;;;;-1:-1:-1;22898:7:0;;;;;;;;;;;;-1:-1:-1;;;22898:7:0;;;;22824:89;;27346:246;;;;;;;;;;-1:-1:-1;27346:246:0;;;;;:::i;:::-;;:::i;27936:109::-;;;;;;;;;;-1:-1:-1;27936:109:0;;;;;:::i;:::-;;:::i;27212:122::-;;;;;;;;;;-1:-1:-1;27303:23:0;;27212:122;;24697:402;;;;;;;;;;-1:-1:-1;24697:402:0;;;;;:::i;:::-;;:::i;16640:102::-;;;;;;;;;;-1:-1:-1;16640:102:0;;;;-1:-1:-1;;;;;16640:102:0;;;23325:201;;;;;;;;;;-1:-1:-1;23325:201:0;;;;;:::i;:::-;;:::i;26815:373::-;;;;;;;;;;-1:-1:-1;26815:373:0;;;;;:::i;:::-;;:::i;19624:58::-;;;;;;;;;;-1:-1:-1;19624:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19931:33;;;;;;;;;;-1:-1:-1;19931:33:0;;;;-1:-1:-1;;;19931:33:0;;;;;;25370:205;;;;;;;;;;-1:-1:-1;25370:205:0;;;;;:::i;:::-;;:::i;48171:171::-;;;;;;;;;;-1:-1:-1;48171:171:0;;;;;:::i;:::-;;:::i;18483:36::-;;;;;;;;;;;;;;;;18648:37;;;;;;;;;;;;;;;;28203:141;;;;;;;;;;-1:-1:-1;28203:141:0;;;;;:::i;:::-;;:::i;18441:35::-;;;;;;;;;;;;;;;;23534:186;;;;;;;;;;-1:-1:-1;23534:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23685:18:0;;;23653:7;23685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23534:186;46567:552;;;;;;;;;;-1:-1:-1;46567:552:0;;;;;:::i;:::-;;:::i;45712:149::-;;;;;;;;;;-1:-1:-1;45712:149:0;;;;;:::i;:::-;;:::i;18739:37::-;;;;;;;;;;;;;;;;18405:29;;;;;;;;;;;;;;;;6830:283;;;;;;;;;;-1:-1:-1;6830:283:0;;;;;:::i;:::-;;:::i;19276:24::-;;;;;;;;;;;;;;;;28057:134;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;;;;;;;;;28141:2:::1;28134:3;:9;;28126:18;;;::::0;::::1;;28171:12;:3:::0;28177:6:::1;28171:12;:::i;:::-;28155:13;:28:::0;-1:-1:-1;28057:134:0:o;25875:260::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;26000:2:::1;25980:17;:22;25972:87;;;;-1:-1:-1::0;;;25972:87:0::1;;;;;;;:::i;:::-;26122:5;26096:25;26104:17:::0;-1:-1:-1;;;26096:25:0::1;:::i;:::-;:31;;;;:::i;:::-;26070:23;:57:::0;-1:-1:-1;25875:260:0:o;23728:195::-;23832:4;23854:39;197:10;23877:7;23886:6;23854:8;:39::i;:::-;-1:-1:-1;23911:4:0;23728:195;;;;;:::o;23931:448::-;24065:4;24082:36;24092:6;24100:9;24111:6;24082:9;:36::i;:::-;24129:220;24152:6;197:10;24200:138;24256:6;24200:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24200:19:0;;;;;;:11;:19;;;;;;;;197:10;24200:33;;;;;;;;;;:37;:138::i;:::-;24129:8;:220::i;:::-;-1:-1:-1;24367:4:0;23931:448;;;;;:::o;29066:322::-;29160:7;29218;;29207;:18;;29185:110;;;;-1:-1:-1;;;29185:110:0;;6564:2:1;29185:110:0;;;6546:21:1;6603:2;6583:18;;;6576:30;6642:34;6622:18;;;6615:62;-1:-1:-1;;;6693:18:1;;;6686:40;6743:19;;29185:110:0;6362:406:1;29185:110:0;29306:19;29328:10;:8;:10::i;:::-;29306:32;-1:-1:-1;29356:24:0;:7;29306:32;29356:11;:24::i;:::-;29349:31;29066:322;-1:-1:-1;;;29066:322:0:o;29863:471::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29941:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29933:56;;;::::0;-1:-1:-1;;;29933:56:0;;6975:2:1;29933:56:0::1;::::0;::::1;6957:21:1::0;7014:2;6994:18;;;6987:30;7053:25;7033:18;;;7026:53;7096:18;;29933:56:0::1;6773:347:1::0;29933:56:0::1;30005:9;30000:327;30024:9;:16:::0;30020:20;::::1;30000:327;;;30082:7;-1:-1:-1::0;;;;;30066:23:0::1;:9;30076:1;30066:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30066:12:0::1;:23;30062:254;;;30125:9;30135:16:::0;;:20:::1;::::0;30154:1:::1;::::0;30135:20:::1;:::i;:::-;30125:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30110:9:::1;:12:::0;;-1:-1:-1;;;;;30125:31:0;;::::1;::::0;30120:1;;30110:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30110:46:0::1;-1:-1:-1::0;;;;;30110:46:0;;::::1;;::::0;;30175:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30214:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30214:28:0::1;::::0;;30261:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30261:15:0;;;;;-1:-1:-1;;;;;;30261:15:0::1;::::0;;;;;30000:327:::1;29863:471:::0;:::o;30062:254::-:1;30042:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30000:327;;;;29863:471:::0;:::o;47484:324::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47574:29:0;::::1;47566:77;;;::::0;-1:-1:-1;;;47566:77:0;;7861:2:1;47566:77:0::1;::::0;::::1;7843:21:1::0;7900:2;7880:18;;;7873:30;7939:34;7919:18;;;7912:62;-1:-1:-1;;;7990:18:1;;;7983:33;8033:19;;47566:77:0::1;7659:399:1::0;47566:77:0::1;47654:14;:41:::0;;-1:-1:-1;;;;;;47654:41:0::1;-1:-1:-1::0;;;;;47654:41:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;47706:34:0;;;:18:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;47706:41:0::1;-1:-1:-1::0;47706:41:0::1;::::0;;47785:14;;47763:37;;47785:14;::::1;2056:51:1::0;;47763:37:0::1;::::0;2029:18:1;47763:37:0::1;;;;;;;;47484:324:::0;:::o;24387:302::-;197:10;24504:4;24598:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24598:34:0;;;;;;;;;;24504:4;;24526:133;;24576:7;;24598:50;;24637:10;24598:38;:50::i;45552:152::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45623:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;45623:34:0::1;45653:4;45623:34;::::0;;45673:23;;2056:51:1;;;45673:23:0::1;::::0;2029:18:1;45673:23:0::1;1883:230:1::0;28577:481:0;28697:7;-1:-1:-1;;;28730:7:0;:18;;28722:62;;;;-1:-1:-1;;;28722:62:0;;8481:2:1;28722:62:0;;;8463:21:1;8520:2;8500:18;;;8493:30;8559:33;8539:18;;;8532:61;8610:18;;28722:62:0;8279:355:1;28722:62:0;28800:17;28795:256;;28835:15;28864:19;28875:7;28864:10;:19::i;:::-;-1:-1:-1;28834:49:0;;-1:-1:-1;28898:14:0;;-1:-1:-1;;;;;28898:14:0;28795:256;28948:23;28983:19;28994:7;28983:10;:19::i;:::-;-1:-1:-1;28945:57:0;;-1:-1:-1;29017:22:0;;-1:-1:-1;;;;;29017:22:0;26147:262;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;26273:2:::1;26253:17;:22;26245:87;;;;-1:-1:-1::0;;;26245:87:0::1;;;;;;;:::i;:::-;26396:5;26370:25;26378:17:::0;-1:-1:-1;;;26370:25:0::1;:::i;:::-;:31;;;;:::i;:::-;26343:24;:58:::0;-1:-1:-1;26147:262:0:o;29396:459::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29477:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29476:21;29468:61;;;::::0;-1:-1:-1;;;29468:61:0;;8841:2:1;29468:61:0::1;::::0;::::1;8823:21:1::0;8880:2;8860:18;;;8853:30;8919:29;8899:18;;;8892:57;8966:18;;29468:61:0::1;8639:351:1::0;29468:61:0::1;29548:9;:16:::0;29572:2:::1;::::0;29548:20:::1;::::0;29567:1:::1;29548:20;:::i;:::-;:26;;29540:116;;;::::0;-1:-1:-1;;;29540:116:0;;9330:2:1;29540:116:0::1;::::0;::::1;9312:21:1::0;9369:2;9349:18;;;9342:30;9408:34;9388:18;;;9381:62;9479:34;9459:18;;;9452:62;-1:-1:-1;;;9530:19:1;;;9523:44;9584:19;;29540:116:0::1;9128:481:1::0;29540:116:0::1;-1:-1:-1::0;;;;;29671:16:0;::::1;29690:1;29671:16:::0;;;:7:::1;:16;::::0;;;;;:20;29667:109:::1;;-1:-1:-1::0;;;;;29747:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29727:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29708:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29667:109:::1;-1:-1:-1::0;;;;;29786:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29786:27:0::1;29809:4;29786:27:::0;;::::1;::::0;;;29824:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29824:23:0::1;::::0;;::::1;::::0;;29396:459::o;47820:343::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47914:31:0;::::1;47906:81;;;::::0;-1:-1:-1;;;47906:81:0;;9816:2:1;47906:81:0::1;::::0;::::1;9798:21:1::0;9855:2;9835:18;;;9828:30;9894:34;9874:18;;;9867:62;-1:-1:-1;;;9945:18:1;;;9938:35;9990:19;;47906:81:0::1;9614:401:1::0;47906:81:0::1;47998:16;:45:::0;;-1:-1:-1;;;;;;47998:45:0::1;-1:-1:-1::0;;;;;47998:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;48054:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;48054:43:0::1;-1:-1:-1::0;48054:43:0::1;::::0;;48113:42;;2056:51:1;;;48113:42:0::1;::::0;2029:18:1;48113:42:0::1;1883:230:1::0;48465:848:0;48566:13;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48605:21:0;::::1;48597:61;;;::::0;-1:-1:-1;;;48597:61:0;;10222:2:1;48597:61:0::1;::::0;::::1;10204:21:1::0;10261:2;10241:18;;;10234:30;10300:29;10280:18;;;10273:57;10347:18;;48597:61:0::1;10020:351:1::0;48597:61:0::1;48669:35;48726:7;48669:65;;48773:16;-1:-1:-1::0;;;;;48773:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48755:53:0::1;;48831:4;48851:16;-1:-1:-1::0;;;;;48851:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48755:130;::::0;-1:-1:-1;;;;;;48755:130:0::1;::::0;;;;;;-1:-1:-1;;;;;10862:15:1;;;48755:130:0::1;::::0;::::1;10844:34:1::0;10914:15;;10894:18;;;10887:43;10779:18;;48755:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48747:138:::0;-1:-1:-1;;;;;;48900:19:0;::::1;48896:240;;48997:16;-1:-1:-1::0;;;;;48997:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48979:56:0::1;;49062:4;49086:16;-1:-1:-1::0;;;;;49086:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48979:145;::::0;-1:-1:-1;;;;;;48979:145:0::1;::::0;;;;;;-1:-1:-1;;;;;10862:15:1;;;48979:145:0::1;::::0;::::1;10844:34:1::0;10914:15;;10894:18;;;10887:43;10779:18;;48979:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48971:153;;48896:240;49146:13;:21:::0;;-1:-1:-1;;;;;49146:21:0;;::::1;-1:-1:-1::0;;;;;;49146:21:0;;::::1;;::::0;;;49233:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;49283:22:::1;::::0;;;::::1;::::0;::::1;::::0;49146:13:::1;::::0;49283:22:::1;48586:727;48465:848:::0;;;:::o;45873:148::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45947:20:0;::::1;45970:5;45947:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;45947:28:0::1;::::0;;45991:22;::::1;::::0;45970:5;45991:22:::1;45873:148:::0;:::o;23119:198::-;-1:-1:-1;;;;;23209:20:0;;23185:7;23209:20;;;:11;:20;;;;;;;;23205:49;;;-1:-1:-1;;;;;;23238:16:0;;;;;:7;:16;;;;;;;23119:198::o;23205:49::-;-1:-1:-1;;;;;23292:16:0;;;;;;:7;:16;;;;;;23272:37;;:19;:37::i;6672:150::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;6781:1:::1;6765:6:::0;;6744:40:::1;::::0;-1:-1:-1;;;;;6765:6:0;;::::1;::::0;6744:40:::1;::::0;6781:1;;6744:40:::1;6812:1;6795:19:::0;;-1:-1:-1;;;;;;6795:19:0::1;::::0;;6672:150::o;28416:153::-;28468:4;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;28484:14:0::1;:22:::0;;-1:-1:-1;;28484:22:0;;::::1;::::0;;;28517:14:::1;:22:::0;;;;::::1;::::0;;28484;28416:153;:::o;30346:144::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30436:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;30436:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30346:144::o;49416:488::-;49530:10;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49566:20:0;::::1;49558:59;;;::::0;-1:-1:-1;;;49558:59:0;;11143:2:1;49558:59:0::1;::::0;::::1;11125:21:1::0;11182:2;11162:18;;;11155:30;11221:28;11201:18;;;11194:56;11267:18;;49558:59:0::1;10941:350:1::0;49558:59:0::1;-1:-1:-1::0;;;;;49636:23:0;::::1;49654:4;49636:23;;49628:64;;;::::0;-1:-1:-1;;;49628:64:0;;11498:2:1;49628:64:0::1;::::0;::::1;11480:21:1::0;11537:2;11517:18;;;11510:30;11576;11556:18;;;11549:58;11624:18;;49628:64:0::1;11296:352:1::0;49628:64:0::1;49730:39;::::0;-1:-1:-1;;;49730:39:0;;49763:4:::1;49730:39;::::0;::::1;2056:51:1::0;49703:24:0::1;::::0;-1:-1:-1;;;;;49730:24:0;::::1;::::0;::::1;::::0;2029:18:1;;49730:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49788:46;::::0;-1:-1:-1;;;49788:46:0;;-1:-1:-1;;;;;12034:32:1;;;49788:46:0::1;::::0;::::1;12016:51:1::0;12083:18;;;12076:34;;;49703:66:0;;-1:-1:-1;49788:23:0;;::::1;::::0;::::1;::::0;11989:18:1;;49788:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49850;::::0;;-1:-1:-1;;;;;12034:32:1;;12016:51;;12098:2;12083:18;;12076:34;;;49780:54:0;;-1:-1:-1;49850:46:0::1;::::0;11989:18:1;49850:46:0::1;;;;;;;49547:357;49416:488:::0;;;;:::o;26463:224::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;26518:13:::1;:20:::0;;-1:-1:-1;;;;26549:28:0;-1:-1:-1;;;26549:28:0;;;26609:12:::1;26588:18;:33:::0;26653:26:::1;:15;26671:8;26653:26;:::i;:::-;26632:18;:47:::0;26463:224::o;46029:530::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;46193:10:::1;:22:::0;;;46226:16:::1;:34:::0;;;46271:16:::1;:34:::0;;;46316:14:::1;:30:::0;;;46333:13;46290:15;46365:29:::1;46245:15:::0;46206:9;46365:29:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:71;;46357:109;;;::::0;-1:-1:-1;;;46357:109:0;;12573:2:1;46357:109:0::1;::::0;::::1;12555:21:1::0;12612:2;12592:18;;;12585:30;-1:-1:-1;;;12631:18:1;;;12624:55;12696:18;;46357:109:0::1;12371:349:1::0;46357:109:0::1;46482:69;::::0;;12956:25:1;;;13012:2;12997:18;;12990:34;;;13040:18;;;13033:34;;;13098:2;13083:18;;13076:34;;;46482:69:0::1;::::0;12943:3:1;12928:19;46482:69:0::1;;;;;;;;46029:530:::0;;;;:::o;48350:107::-;48409:7;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;48436:13:0::1;::::0;-1:-1:-1;;;;;48436:13:0::1;48350:107:::0;:::o;47129:343::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47223:31:0;::::1;47215:81;;;::::0;-1:-1:-1;;;47215:81:0;;13323:2:1;47215:81:0::1;::::0;::::1;13305:21:1::0;13362:2;13342:18;;;13335:30;13401:34;13381:18;;;13374:62;-1:-1:-1;;;13452:18:1;;;13445:35;13497:19;;47215:81:0::1;13121:401:1::0;47215:81:0::1;47307:16;:45:::0;;-1:-1:-1;;;;;;47307:45:0::1;-1:-1:-1::0;;;;;47307:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;47363:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;47363:43:0::1;-1:-1:-1::0;47363:43:0::1;::::0;;47422:42;;2056:51:1;;;47422:42:0::1;::::0;2029:18:1;47422:42:0::1;1883:230:1::0;27346:246:0;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;27455:13:::1;::::0;-1:-1:-1;;;;;27447:21:0;;::::1;27455:13:::0;::::1;27447:21;;27439:91;;;::::0;-1:-1:-1;;;27439:91:0;;13729:2:1;27439:91:0::1;::::0;::::1;13711:21:1::0;13768:2;13748:18;;;13741:30;13807:34;13787:18;;;13780:62;13878:27;13858:18;;;13851:55;13923:19;;27439:91:0::1;13527:421:1::0;27439:91:0::1;27543:41;27572:4;27578:5;27543:28;:41::i;27936:109::-:0;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;28013:14:::1;:24:::0;;-1:-1:-1;;28013:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27936:109::o;24697:402::-;24819:4;24841:228;197:10;24891:7;24913:145;24970:15;24913:145;;;;;;;;;;;;;;;;;197:10;24913:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24913:34:0;;;;;;;;;;;;:38;:145::i;23325:201::-;23432:4;23454:42;197:10;23478:9;23489:6;23454:9;:42::i;26815:373::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26941:35:0;;::::1;;::::0;;;:18:::1;:35;::::0;;;;;;;:42;;26979:4:::1;-1:-1:-1::0;;26941:42:0;;::::1;::::0;::::1;::::0;;;26994:41;;;::::1;::::0;;;;;;:48;;;::::1;::::0;::::1;::::0;;27053;;;:31:::1;:48:::0;;;;;;:55;;;::::1;::::0;::::1;::::0;;27119:54;;;;:61;;;;::::1;::::0;;::::1;::::0;;26815:373::o;25370:205::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;25484:4:::1;25479:3;25465:11;-1:-1:-1::0;;;25475:1:0::1;25465:11;:::i;:::-;:17;;;;:::i;:::-;25464:24;;;;:::i;:::-;25455:6;:33;25447:80;;;::::0;-1:-1:-1;;;25447:80:0;;14155:2:1;25447:80:0::1;::::0;::::1;14137:21:1::0;14194:2;14174:18;;;14167:30;14233:34;14213:18;;;14206:62;-1:-1:-1;;;14284:18:1;;;14277:32;14326:19;;25447:80:0::1;13953:398:1::0;25447:80:0::1;25550:17;:6:::0;25560::::1;25550:17;:::i;:::-;25538:9;:29:::0;-1:-1:-1;25370:205:0:o;48171:171::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;48248:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;48248:32:0::1;-1:-1:-1::0;;;;48248:32:0;;::::1;;::::0;;48296:38:::1;::::0;::::1;::::0;::::1;::::0;48272:8;1604:14:1;1597:22;1579:41;;1567:2;1552:18;;1439:187;28203:141:0;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;28285:6:::1;28278:3;:13;;28270:22;;;::::0;::::1;;28323:13;::::0;28317:19:::1;::::0;:3;:19:::1;:::i;:::-;28303:11;:33:::0;-1:-1:-1;28203:141:0:o;46567:552::-;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;46736:11:::1;:24:::0;;;46771:17:::1;:36:::0;;;46818:17:::1;:36:::0;;;46865:15:::1;:32:::0;;;46989:2:::1;46883:14:::0;46838:16;46916:31:::1;46791:16:::0;46750:10;46916:31:::1;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;:75;;46908:113;;;::::0;-1:-1:-1;;;46908:113:0;;12573:2:1;46908:113:0::1;::::0;::::1;12555:21:1::0;12612:2;12592:18;;;12585:30;-1:-1:-1;;;12631:18:1;;;12624:55;12696:18;;46908:113:0::1;12371:349:1::0;46908:113:0::1;47037:74;::::0;;12956:25:1;;;13012:2;12997:18;;12990:34;;;13040:18;;;13033:34;;;13098:2;13083:18;;13076:34;;;47037:74:0::1;::::0;12943:3:1;12928:19;47037:74:0::1;12725:391:1::0;45712:149:0;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45781:27:0;::::1;45811:5;45781:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;45781:35:0::1;::::0;;45832:21;;2056:51:1;;;45832:21:0::1;::::0;2029:18:1;45832:21:0::1;1883:230:1::0;6830:283:0;6585:6;;-1:-1:-1;;;;;6585:6:0;197:10;6585:22;6577:67;;;;-1:-1:-1;;;6577:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6935:22:0;::::1;6913:110;;;::::0;-1:-1:-1;;;6913:110:0;;14558:2:1;6913:110:0::1;::::0;::::1;14540:21:1::0;14597:2;14577:18;;;14570:30;14636:34;14616:18;;;14609:62;-1:-1:-1;;;14687:18:1;;;14680:36;14733:19;;6913:110:0::1;14356:402:1::0;6913:110:0::1;7060:6;::::0;;7039:38:::1;::::0;-1:-1:-1;;;;;7039:38:0;;::::1;::::0;7060:6;::::1;::::0;7039:38:::1;::::0;::::1;7088:6;:17:::0;;-1:-1:-1;;;;;;7088:17:0::1;-1:-1:-1::0;;;;;7088:17:0;;;::::1;::::0;;;::::1;::::0;;6830:283::o;2115:132::-;2173:7;2200:39;2204:1;2207;2200:39;;;;;;;;;;;;;;;;;:3;:39::i;1479:136::-;1537:7;1564:43;1568:1;1571;1564:43;;;;;;;;;;;;;;;;;:3;:43::i;30499:371::-;-1:-1:-1;;;;;30626:19:0;;30618:68;;;;-1:-1:-1;;;30618:68:0;;14965:2:1;30618:68:0;;;14947:21:1;15004:2;14984:18;;;14977:30;15043:34;15023:18;;;15016:62;-1:-1:-1;;;15094:18:1;;;15087:34;15138:19;;30618:68:0;14763:400:1;30618:68:0;-1:-1:-1;;;;;30705:21:0;;30697:68;;;;-1:-1:-1;;;30697:68:0;;15370:2:1;30697:68:0;;;15352:21:1;15409:2;15389:18;;;15382:30;15448:34;15428:18;;;15421:62;-1:-1:-1;;;15499:18:1;;;15492:32;15541:19;;30697:68:0;15168:398:1;30697:68:0;-1:-1:-1;;;;;30778:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30830:32;;160:25:1;;;30830:32:0;;133:18:1;30830:32:0;;;;;;;30499:371;;;:::o;30878:4103::-;-1:-1:-1;;;;;31000:18:0;;30992:68;;;;-1:-1:-1;;;30992:68:0;;15773:2:1;30992:68:0;;;15755:21:1;15812:2;15792:18;;;15785:30;15851:34;15831:18;;;15824:62;-1:-1:-1;;;15902:18:1;;;15895:35;15947:19;;30992:68:0;15571:401:1;30992:68:0;-1:-1:-1;;;;;31079:16:0;;31071:64;;;;-1:-1:-1;;;31071:64:0;;16179:2:1;31071:64:0;;;16161:21:1;16218:2;16198:18;;;16191:30;16257:34;16237:18;;;16230:62;-1:-1:-1;;;16308:18:1;;;16301:33;16351:19;;31071:64:0;15977:399:1;31071:64:0;31163:1;31154:6;:10;31146:64;;;;-1:-1:-1;;;31146:64:0;;16583:2:1;31146:64:0;;;16565:21:1;16622:2;16602:18;;;16595:30;16661:34;16641:18;;;16634:62;-1:-1:-1;;;16712:18:1;;;16705:39;16761:19;;31146:64:0;16381:405:1;31146:64:0;31235:13;;-1:-1:-1;;;31235:13:0;;;;31231:134;;-1:-1:-1;;;;;31272:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;31300:22:0;;;;;;:18;:22;;;;;;;;31272:50;31264:89;;;;-1:-1:-1;;;31264:89:0;;16993:2:1;31264:89:0;;;16975:21:1;17032:2;17012:18;;;17005:30;17071:28;17051:18;;;17044:56;17117:18;;31264:89:0;16791:350:1;31264:89:0;31385:14;;;;31382:1526;;;6496:7;6523:6;-1:-1:-1;;;;;31429:15:0;;;6523:6;;31429:15;;;;:45;;-1:-1:-1;6496:7:0;6523:6;-1:-1:-1;;;;;31461:13:0;;;6523:6;;31461:13;;31429:45;:78;;;;-1:-1:-1;;;;;;31491:16:0;;;;31429:78;:116;;;;-1:-1:-1;;;;;;31524:21:0;;31538:6;31524:21;;31429:116;:150;;;;-1:-1:-1;31563:16:0;;-1:-1:-1;;;31563:16:0;;;;31562:17;31429:150;31411:1490;;;6496:7;6523:6;-1:-1:-1;;;;;31622:15:0;;;6523:6;;31622:15;;;;:38;;-1:-1:-1;31647:13:0;;-1:-1:-1;;;;;31641:19:0;;;31647:13;;31641:19;;31622:38;:76;;;;;31680:18;;31664:12;:34;31622:76;31619:176;;;-1:-1:-1;;;;;31718:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;31718:22:0;31736:4;31718:22;;;31764:15;;;31718;31764;31619:176;31827:14;;;;:49;;;;-1:-1:-1;;;;;;31845:31:0;;;;;;:25;:31;;;;;;;;31827:49;31823:155;;;31920:13;;31905:11;:28;;31897:65;;;;-1:-1:-1;;;31897:65:0;;17348:2:1;31897:65:0;;;17330:21:1;17387:2;17367:18;;;17360:30;17426:26;17406:18;;;17399:54;17470:18;;31897:65:0;17146:348:1;31897:65:0;-1:-1:-1;;;;;32026:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;32062:35:0;;;;;;:31;:35;;;;;;;;32061:36;32026:71;32022:311;;;32140:23;;32130:6;:33;;32122:102;;;;-1:-1:-1;;;32122:102:0;;17701:2:1;32122:102:0;;;17683:21:1;17740:2;17720:18;;;17713:30;17779:34;17759:18;;;17752:62;17850:26;17830:18;;;17823:54;17894:19;;32122:102:0;17499:420:1;32122:102:0;32281:9;;32264:13;32274:2;32264:9;:13::i;:::-;32255:22;;:6;:22;:::i;:::-;:35;;32247:70;;;;-1:-1:-1;;;32247:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32380:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;32414:37:0;;;;;;:31;:37;;;;;;;;32413:38;32380:71;32376:514;;;32494:24;;32484:6;:34;;32476:105;;;;-1:-1:-1;;;32476:105:0;;18477:2:1;32476:105:0;;;18459:21:1;18516:2;18496:18;;;18489:30;18555:34;18535:18;;;18528:62;18626:28;18606:18;;;18599:56;18672:19;;32476:105:0;18275:422:1;32476:105:0;32638:9;;32621:13;32631:2;32621:9;:13::i;:::-;32612:22;;:6;:22;:::i;:::-;:35;;32604:70;;;;-1:-1:-1;;;32604:70:0;;;;;;;:::i;:::-;32376:514;;;-1:-1:-1;;;;;32745:35:0;;;;;;:31;:35;;;;;;;;32740:150;;32838:9;;32821:13;32831:2;32821:9;:13::i;:::-;32812:22;;:6;:22;:::i;:::-;:35;;32804:70;;;;-1:-1:-1;;;32804:70:0;;;;;;;:::i;:::-;32928:25;33006:20;;32981:22;;32956;;:47;;;;:::i;:::-;:70;;;;:::i;:::-;32928:98;;33037:28;33068:24;33086:4;33068:9;:24::i;:::-;33158:23;;33242:16;;33037:55;;-1:-1:-1;33134:47:0;;;;-1:-1:-1;;;33242:16:0;;;;33241:17;:55;;;;-1:-1:-1;33275:21:0;;-1:-1:-1;;;33275:21:0;;;;33241:55;:100;;;;-1:-1:-1;33323:13:0;;33340:1;;33313:24;;-1:-1:-1;;;;;33323:13:0;33313:9;:24::i;:::-;:28;33241:100;:138;;;;;33378:1;33358:17;:21;33241:138;:178;;;;-1:-1:-1;;;;;;33397:22:0;;;;;;:18;:22;;;;;;;;33396:23;33241:178;:220;;;;-1:-1:-1;;;;;;33437:24:0;;;;;;:18;:24;;;;;;;;33436:25;33241:220;:266;;;;-1:-1:-1;;;;;;33478:29:0;;;;;;:25;:29;;;;;;;;33241:266;:306;;;;;33524:23;33241:306;33223:373;;;33574:10;:8;:10::i;:::-;-1:-1:-1;;;;;33729:24:0;;33608:12;33729:24;;;:18;:24;;;;;;33623:4;;33729:24;;;:50;;-1:-1:-1;;;;;;33757:22:0;;;;;;:18;:22;;;;;;;;33729:50;33725:1177;;;-1:-1:-1;18023:1:0;33826:15;:26;33806:5;33725:1177;;;-1:-1:-1;;;;;33909:31:0;;;;;;:25;:31;;;;;;;;33905:986;;;33961:14;:12;:14::i;:::-;34004:10;;33994:7;:20;34087:14;;34068:16;;34049;;:35;;34068:16;34049:35;:::i;:::-;:52;;;;:::i;:::-;34033:13;:68;17939:1;34120:15;:21;33905:986;;;-1:-1:-1;;;;;34202:29:0;;;;;;:25;:29;;;;;;;;34198:693;;;34252:14;:12;:14::i;:::-;34295:11;;34285:7;:21;34381:15;;34361:17;;34341;;:37;;34361:17;34341:37;:::i;:::-;:55;;;;:::i;:::-;34325:13;:71;17979:1;34415:15;:22;-1:-1:-1;;;;;34549:17:0;;-1:-1:-1;34549:17:0;;;:11;:17;;;;;;;;:56;;;;;34593:12;34571:18;;:34;;34549:56;34546:180;;;34639:7;;:11;;34649:1;34639:11;:::i;:::-;34629:7;:21;34689:13;;:17;;34705:1;34689:17;:::i;:::-;34673:13;:33;34546:180;34198:693;;;34816:14;:12;:14::i;:::-;18023:1;34849:15;:26;34198:693;34922:41;34937:4;34943:2;34947:6;34955:7;34922:14;:41::i;:::-;30981:4000;;;;30878:4103;;;:::o;1623:226::-;1743:7;1779:12;1771:6;;;;1763:29;;;;-1:-1:-1;;;1763:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1803:9:0;1815:5;1819:1;1815;:5;:::i;:::-;1803:17;1623:226;-1:-1:-1;;;;;1623:226:0:o;42970:164::-;43012:7;43033:15;43050;43069:19;:17;:19::i;:::-;43032:56;;-1:-1:-1;43032:56:0;-1:-1:-1;43106:20:0;43032:56;;43106:11;:20::i;:::-;43099:27;;;;42970:164;:::o;1290:181::-;1348:7;;1380:5;1384:1;1380;:5;:::i;:::-;1368:17;;1409:1;1404;:6;;1396:46;;;;-1:-1:-1;;;1396:46:0;;18904:2:1;1396:46:0;;;18886:21:1;18943:2;18923:18;;;18916:30;18982:29;18962:18;;;18955:57;19029:18;;1396:46:0;18702:351:1;41238:742:0;41338:7;41360;41382;41404;41426;41448;41498:23;41536:12;41563:18;41595:20;41607:7;41595:11;:20::i;:::-;41483:132;;;;;;41627:15;41644:23;41669:12;41685:113;41711:7;41733:4;41752:10;41777;:8;:10::i;:::-;41685:11;:113::i;:::-;41626:172;;;;-1:-1:-1;41626:172:0;;-1:-1:-1;41902:15:0;;-1:-1:-1;41932:4:0;;-1:-1:-1;41951:10:0;;-1:-1:-1;41238:742:0;;-1:-1:-1;;;;;41238:742:0:o;27600:324::-;-1:-1:-1;;;;;27683:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;27683:39:0;;;;;;;27733:38;27683:31;:39;27733:25;:38::i;:::-;27785:5;27782:35;;;27792:23;27810:4;27792:17;:23::i;:::-;27831:5;27827:34;;27838:21;27854:4;27838:15;:21::i;:::-;27876:40;;;-1:-1:-1;;;;;19244:32:1;;19226:51;;19320:14;;19313:22;19308:2;19293:18;;19286:50;27876:40:0;;19199:18:1;27876:40:0;;;;;;;27600:324;;:::o;2255:312::-;2375:7;2410:12;2403:5;2395:28;;;;-1:-1:-1;;;2395:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2434:9:0;2446:5;2450:1;2446;:5;:::i;34989:1640::-;21347:16;:23;;-1:-1:-1;;;;21347:23:0;-1:-1:-1;;;21347:23:0;;;;35066:24:::1;35084:4;35066:9;:24::i;:::-;35040:50;;35111:25;35139:76;35192:22;;35139:48;35166:20;;35139:22;;:26;;:48;;;;:::i;:::-;:52:::0;::::1;:76::i;:::-;35111:104;;35285:26;35314:29;35341:1;35314:22;;:26;;:29;;;;:::i;:::-;35285:58:::0;-1:-1:-1;35354:26:0::1;35383:39;:15:::0;35285:58;35383:19:::1;:39::i;:::-;35354:68:::0;-1:-1:-1;35471:21:0::1;35505:36;35354:68:::0;35505:16:::1;:36::i;:::-;35563:18;35584:44;:21;35610:17:::0;35584:25:::1;:44::i;:::-;35563:65;;35649:23;35675:61;35718:17;35675:38;35690:22;;35675:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;35649:87;;35747:21;35771:59;35812:17;35771:36;35786:20;;35771:10;:14;;:36;;;;:::i;:59::-;35747:83:::0;-1:-1:-1;35851:23:0::1;35877:50;35747:83:::0;35877:31:::1;:10:::0;35892:15;35877:14:::1;:31::i;:::-;:35:::0;::::1;:50::i;:::-;35965:1;35940:22;:26:::0;;;35977:22:::1;:26:::0;;;36014:20:::1;:24:::0;;;36085:14:::1;::::0;36077:54:::1;::::0;35851:76;;-1:-1:-1;35965:1:0;;-1:-1:-1;;;;;36085:14:0;;::::1;::::0;36113:13;;35965:1;36077:54;35965:1;36077:54;36113:13;36085:14;36077:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36163:16:0::1;::::0;36155:58:::1;::::0;36059:72;;-1:-1:-1;;;;;;36163:16:0::1;::::0;36193:15;;36155:58:::1;::::0;;;36193:15;36163:16;36155:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36142:71;;;;;36234:49;36247:18;36267:15;36234:12;:49::i;:::-;36299:71;::::0;;19759:25:1;;;19815:2;19800:18;;19793:34;;;19843:18;;;19836:34;;;36299:71:0::1;::::0;19747:2:1;19732:18;36299:71:0::1;;;;;;;36513:4;36489:21;:28;36486:136;;;36554:16;::::0;36546:64:::1;::::0;-1:-1:-1;;;;;36554:16:0;;::::1;::::0;36584:21:::1;::::0;36546:64:::1;::::0;;;36584:21;36554:16;36546:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36533:77:0;;-1:-1:-1;;36486:136:0::1;-1:-1:-1::0;;21393:16:0;:24;;-1:-1:-1;;;;21393:24:0;;;-1:-1:-1;;;;;;;;34989:1640:0:o;45042:235::-;45089:7;;:12;:34;;;;-1:-1:-1;45105:13:0;;:18;45089:34;45085:47;;;45042:235::o;45085:47::-;45162:7;;;45144:15;:25;45204:13;;;45180:21;:37;-1:-1:-1;45230:11:0;;;;45252:17;45042:235::o;37583:694::-;37739:7;37734:28;;37748:14;:12;:14::i;:::-;-1:-1:-1;;;;;37779:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;37803:22:0;;;;;;:11;:22;;;;;;;;37802:23;37779:46;37775:467;;;37842:48;37864:6;37872:9;37883:6;37842:21;:48::i;:::-;37775:467;;;-1:-1:-1;;;;;37913:19:0;;;;;;:11;:19;;;;;;;;37912:20;:46;;;;-1:-1:-1;;;;;;37936:22:0;;;;;;:11;:22;;;;;;;;37912:46;37908:334;;;37975:46;37995:6;38003:9;38014:6;37975:19;:46::i;37908:334::-;-1:-1:-1;;;;;38043:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38066:22:0;;;;;;:11;:22;;;;;;;;38043:45;38039:203;;;38105:48;38127:6;38135:9;38146:6;38105:21;:48::i;38039:203::-;38186:44;38204:6;38212:9;38223:6;38186:17;:44::i;:::-;38254:15;45339;;45329:7;:25;45381:21;;45365:13;:37;45285:125;38254:15;37583:694;;;;:::o;43142:605::-;43240:7;;43193;;;;-1:-1:-1;;;43193:7:0;43294:338;43318:9;:16;43314:20;;43294:338;;;43402:7;43378;:21;43386:9;43396:1;43386:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43386:12:0;43378:21;;;;;;;;;;;;;:31;;:83;;;43454:7;43430;:21;43438:9;43448:1;43438:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43438:12:0;43430:21;;;;;;;;;;;;;:31;43378:83;43356:146;;;-1:-1:-1;;43485:7:0;;;-1:-1:-1;;;17590:19:0;-1:-1:-1;43142:605:0;-1:-1:-1;;43142:605:0:o;43356:146::-;43527:34;43539:7;:21;43547:9;43557:1;43547:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43547:12:0;43539:21;;;;;;;;;;;;;43527:7;;:11;:34::i;:::-;43517:44;;43586:34;43598:7;:21;43606:9;43616:1;43606:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43606:12:0;43598:21;;;;;;;;;;;;;43586:7;;:11;:34::i;:::-;43576:44;-1:-1:-1;43336:3:0;;;;:::i;:::-;;;;43294:338;;;-1:-1:-1;43656:7:0;;:20;;-1:-1:-1;;;43656:11:0;:20::i;:::-;43646:7;:30;43642:61;;;-1:-1:-1;;43686:7:0;;;-1:-1:-1;;;17590:19:0;-1:-1:-1;43142:605:0;-1:-1:-1;43142:605:0:o;43642:61::-;43722:7;;43731;;-1:-1:-1;43142:605:0;-1:-1:-1;43142:605:0:o;41988:412::-;42089:7;42111;42133;42168:12;42183:24;42199:7;42183:15;:24::i;:::-;42168:39;;42218:18;42239:30;42261:7;42239:21;:30::i;:::-;42218:51;-1:-1:-1;42280:23:0;42306:33;42218:51;42306:17;:7;42318:4;42306:11;:17::i;:33::-;42280:59;42375:4;;-1:-1:-1;42381:10:0;;-1:-1:-1;41988:412:0;;-1:-1:-1;;;41988:412:0:o;42408:554::-;42607:7;;;;42704:24;:7;42716:11;42704;:24::i;:::-;42686:42;-1:-1:-1;42739:12:0;42754:21;:4;42763:11;42754:8;:21::i;:::-;42739:36;-1:-1:-1;42786:18:0;42807:27;:10;42822:11;42807:14;:27::i;:::-;42786:48;-1:-1:-1;42845:23:0;42871:33;42786:48;42871:17;:7;42883:4;42871:11;:17::i;:33::-;42923:7;;;;-1:-1:-1;42949:4:0;;-1:-1:-1;42408:554:0;;-1:-1:-1;;;;;;;42408:554:0:o;36641:499::-;36731:16;;;36745:1;36731:16;;;;;;;;36707:21;;36731:16;;;;;;;;;;-1:-1:-1;36731:16:0;36707:40;;36776:4;36758;36763:1;36758:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36758:23:0;;;:7;;;;;;;;;;:23;;;;36802:15;;:22;;;-1:-1:-1;;;36802:22:0;;;;:15;;;;;:20;;:22;;;;;36758:7;;36802:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36792:4;36797:1;36792:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36792:32:0;;;:7;;;;;;;;;:32;36867:15;;36835:62;;36852:4;;36867:15;36885:11;36835:8;:62::i;:::-;36908:15;;:224;;-1:-1:-1;;;36908:224:0;;-1:-1:-1;;;;;36908:15:0;;;;:66;;:224;;36989:11;;36908:15;;37059:4;;37086;;37106:15;;36908:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36696:444;36641:499;:::o;1857:250::-;1915:7;1939:6;1935:47;;-1:-1:-1;1969:1:0;1962:8;;1935:47;1994:9;2006:5;2010:1;2006;:5;:::i;:::-;1994:17;-1:-1:-1;2039:1:0;2030:5;2034:1;1994:17;2030:5;:::i;:::-;:10;2022:56;;;;-1:-1:-1;;;2022:56:0;;21200:2:1;2022:56:0;;;21182:21:1;21239:2;21219:18;;;21212:30;21278:34;21258:18;;;21251:62;-1:-1:-1;;;21329:18:1;;;21322:31;21370:19;;2022:56:0;20998:397:1;37152:423:0;37265:15;;37233:62;;37250:4;;-1:-1:-1;;;;;37265:15:0;37283:11;37233:8;:62::i;:::-;37306:15;;37510:16;;37306:261;;-1:-1:-1;;;37306:261:0;;37378:4;37306:261;;;21749:34:1;21799:18;;;21792:34;;;37306:15:0;21842:18:1;;;21835:34;;;21885:18;;;21878:34;-1:-1:-1;;;;;37510:16:0;;;21928:19:1;;;21921:44;37541:15:0;21981:19:1;;;21974:35;37306:15:0;;;:31;;37345:9;;21683:19:1;;37306:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37152:423;;:::o;39624:686::-;39775:15;39805:23;39843:12;39870:23;39908:12;39935:18;39967:19;39978:7;39967:10;:19::i;:::-;-1:-1:-1;;;;;40015:15:0;;;;;;:7;:15;;;;;;39760:226;;-1:-1:-1;39760:226:0;;-1:-1:-1;39760:226:0;;-1:-1:-1;39760:226:0;-1:-1:-1;39760:226:0;-1:-1:-1;39760:226:0;-1:-1:-1;40015:28:0;;40035:7;40015:19;:28::i;:::-;-1:-1:-1;;;;;39997:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40072:7;:15;;;;:28;;40092:7;40072:19;:28::i;:::-;-1:-1:-1;;;;;40054:15:0;;;;;;;:7;:15;;;;;;:46;;;;40132:18;;;;;;;:39;;40155:15;40132:22;:39::i;:::-;-1:-1:-1;;;;;40111:18:0;;;;;;:7;:18;;;;;:60;40182:26;40197:10;40182:14;:26::i;:::-;40219:23;40231:4;40237;40219:11;:23::i;:::-;40275:9;-1:-1:-1;;;;;40258:44:0;40267:6;-1:-1:-1;;;;;40258:44:0;;40286:15;40258:44;;;;160:25:1;;148:2;133:18;;14:177;40258:44:0;;;;;;;;39749:561;;;;;;39624:686;;;:::o;38918:698::-;39067:15;39097:23;39135:12;39162:23;39200:12;39227:18;39259:19;39270:7;39259:10;:19::i;:::-;-1:-1:-1;;;;;39307:15:0;;;;;;:7;:15;;;;;;39052:226;;-1:-1:-1;39052:226:0;;-1:-1:-1;39052:226:0;;-1:-1:-1;39052:226:0;-1:-1:-1;39052:226:0;-1:-1:-1;39052:226:0;-1:-1:-1;39307:28:0;;39052:226;39307:19;:28::i;:::-;-1:-1:-1;;;;;39289:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39367:18;;;;;:7;:18;;;;;:39;;39390:15;39367:22;:39::i;:::-;-1:-1:-1;;;;;39346:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39438:7;:18;;;;:39;;39461:15;39438:22;:39::i;40318:757::-;40469:15;40499:23;40537:12;40564:23;40602:12;40629:18;40661:19;40672:7;40661:10;:19::i;:::-;-1:-1:-1;;;;;40709:15:0;;;;;;:7;:15;;;;;;40454:226;;-1:-1:-1;40454:226:0;;-1:-1:-1;40454:226:0;;-1:-1:-1;40454:226:0;-1:-1:-1;40454:226:0;-1:-1:-1;40454:226:0;-1:-1:-1;40709:28:0;;40729:7;40709:19;:28::i;:::-;-1:-1:-1;;;;;40691:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40766:7;:15;;;;:28;;40786:7;40766:19;:28::i;38285:625::-;38432:15;38462:23;38500:12;38527:23;38565:12;38592:18;38624:19;38635:7;38624:10;:19::i;:::-;-1:-1:-1;;;;;38672:15:0;;;;;;:7;:15;;;;;;38417:226;;-1:-1:-1;38417:226:0;;-1:-1:-1;38417:226:0;;-1:-1:-1;38417:226:0;-1:-1:-1;38417:226:0;-1:-1:-1;38417:226:0;-1:-1:-1;38672:28:0;;38417:226;38672:19;:28::i;44722:130::-;44786:7;44813:31;44838:5;44813:20;44825:7;;44813;:11;;:20;;;;:::i;44860:174::-;44957:7;44989:37;45020:5;44989:26;45001:13;;44989:7;:11;;:26;;;;:::i;43755:959::-;17939:1;43821:15;;:22;43818:594;;;43917:13;;43898:16;;43885:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43859:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;43999:13:0;;43982:14;;43969:27;;:10;:27;:::i;:::-;:43;;;;:::i;:::-;43945:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;44085:13:0;;44066:16;;44053:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44027:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;43818:594:0;;-1:-1:-1;43818:594:0;;17979:1;44119:15;;:23;44116:296;;;44217:13;;44197:17;;44184:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44158:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44300:13:0;;44282:15;;44269:28;;:10;:28;:::i;:::-;:44;;;;:::i;:::-;44245:20;;:68;;;;;;;:::i;:::-;;;;-1:-1:-1;;44387:13:0;;44367:17;;44354:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44328:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44116:296:0;44422:19;44444:10;:8;:10::i;:::-;44422:32;-1:-1:-1;44465:18:0;44486:27;:10;44422:32;44486:14;:27::i;:::-;44565:4;44549:22;;;;:7;:22;;;;;;44465:48;;-1:-1:-1;44549:38:0;;44465:48;44549:26;:38::i;:::-;44540:4;44524:22;;;;:7;:22;;;;;;;;:63;;;;44602:11;:26;;;;;;44598:108;;;44684:4;44668:22;;;;:7;:22;;;;;;:38;;44695:10;44668:26;:38::i;:::-;44659:4;44643:22;;;;:7;:22;;;;;:63;44598:108;43807:907;;43755:959;:::o;41083:147::-;41161:7;;:17;;41173:4;41161:11;:17::i;:::-;41151:7;:27;41202:10;;:20;;41217:4;41202:14;:20::i;:::-;41189:10;:33;-1:-1:-1;;41083:147:0:o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:180::-;857:6;910:2;898:9;889:7;885:23;881:32;878:52;;;926:1;923;916:12;878:52;-1:-1:-1;949:23:1;;798:180;-1:-1:-1;798:180:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1038:70;983:131;:::o;1119:315::-;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;3200:118::-;3286:5;3279:13;3272:21;3265:5;3262:32;3252:60;;3308:1;3305;3298:12;3323:309;3388:6;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3501:9;3488:23;3478:33;;3561:2;3550:9;3546:18;3533:32;3574:28;3596:5;3574:28;:::i;:::-;3621:5;3611:15;;;3323:309;;;;;:::o;3637:382::-;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3818:9;3805:23;3837:31;3862:5;3837:31;:::i;:::-;3887:5;-1:-1:-1;3944:2:1;3929:18;;3916:32;3957:30;3916:32;3957:30;:::i;4024:388::-;4092:6;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4208:9;4195:23;4227:31;4252:5;4227:31;:::i;:::-;4277:5;-1:-1:-1;4334:2:1;4319:18;;4306:32;4347:33;4306:32;4347:33;:::i;4417:385::-;4503:6;4511;4519;4527;4580:3;4568:9;4559:7;4555:23;4551:33;4548:53;;;4597:1;4594;4587:12;4548:53;-1:-1:-1;;4620:23:1;;;4690:2;4675:18;;4662:32;;-1:-1:-1;4741:2:1;4726:18;;4713:32;;4792:2;4777:18;4764:32;;-1:-1:-1;4417:385:1;-1:-1:-1;4417:385:1:o;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:356::-;5255:2;5237:21;;;5274:18;;;5267:30;5333:34;5328:2;5313:18;;5306:62;5400:2;5385:18;;5053:356::o;5414:127::-;5475:10;5470:3;5466:20;5463:1;5456:31;5506:4;5503:1;5496:15;5530:4;5527:1;5520:15;5546:168;5586:7;5652:1;5648;5644:6;5640:14;5637:1;5634:21;5629:1;5622:9;5615:17;5611:45;5608:71;;;5659:18;;:::i;:::-;-1:-1:-1;5699:9:1;;5546:168::o;5719:416::-;5921:2;5903:21;;;5960:2;5940:18;;;5933:30;5999:34;5994:2;5979:18;;5972:62;-1:-1:-1;;;6065:2:1;6050:18;;6043:50;6125:3;6110:19;;5719:416::o;6140:217::-;6180:1;6206;6196:132;;6250:10;6245:3;6241:20;6238:1;6231:31;6285:4;6282:1;6275:15;6313:4;6310:1;6303:15;6196:132;-1:-1:-1;6342:9:1;;6140:217::o;7125:127::-;7186:10;7181:3;7177:20;7174:1;7167:31;7217:4;7214:1;7207:15;7241:4;7238:1;7231:15;7257:125;7297:4;7325:1;7322;7319:8;7316:34;;;7330:18;;:::i;:::-;-1:-1:-1;7367:9:1;;7257:125::o;7387:127::-;7448:10;7443:3;7439:20;7436:1;7429:31;7479:4;7476:1;7469:15;7503:4;7500:1;7493:15;7519:135;7558:3;-1:-1:-1;;7579:17:1;;7576:43;;;7599:18;;:::i;:::-;-1:-1:-1;7646:1:1;7635:13;;7519:135::o;8995:128::-;9035:3;9066:1;9062:6;9059:1;9056:13;9053:39;;;9072:18;;:::i;:::-;-1:-1:-1;9108:9:1;;8995:128::o;10376:251::-;10446:6;10499:2;10487:9;10478:7;10474:23;10470:32;10467:52;;;10515:1;10512;10505:12;10467:52;10547:9;10541:16;10566:31;10591:5;10566:31;:::i;11653:184::-;11723:6;11776:2;11764:9;11755:7;11751:23;11747:32;11744:52;;;11792:1;11789;11782:12;11744:52;-1:-1:-1;11815:16:1;;11653:184;-1:-1:-1;11653:184:1:o;12121:245::-;12188:6;12241:2;12229:9;12220:7;12216:23;12212:32;12209:52;;;12257:1;12254;12247:12;12209:52;12289:9;12283:16;12308:28;12330:5;12308:28;:::i;17924:346::-;18126:2;18108:21;;;18165:2;18145:18;;;18138:30;-1:-1:-1;;;18199:2:1;18184:18;;18177:52;18261:2;18246:18;;17924:346::o;20013:980::-;20275:4;20323:3;20312:9;20308:19;20354:6;20343:9;20336:25;20380:2;20418:6;20413:2;20402:9;20398:18;20391:34;20461:3;20456:2;20445:9;20441:18;20434:31;20485:6;20520;20514:13;20551:6;20543;20536:22;20589:3;20578:9;20574:19;20567:26;;20628:2;20620:6;20616:15;20602:29;;20649:1;20659:195;20673:6;20670:1;20667:13;20659:195;;;20738:13;;-1:-1:-1;;;;;20734:39:1;20722:52;;20829:15;;;;20794:12;;;;20770:1;20688:9;20659:195;;;-1:-1:-1;;;;;;;20910:32:1;;;;20905:2;20890:18;;20883:60;-1:-1:-1;;;20974:3:1;20959:19;20952:35;20871:3;20013:980;-1:-1:-1;;;20013:980:1:o;22020:306::-;22108:6;22116;22124;22177:2;22165:9;22156:7;22152:23;22148:32;22145:52;;;22193:1;22190;22183:12;22145:52;22222:9;22216:16;22206:26;;22272:2;22261:9;22257:18;22251:25;22241:35;;22316:2;22305:9;22301:18;22295:25;22285:35;;22020:306;;;;;:::o

Swarm Source

ipfs://6979e97137a82a60d9b9a153481556d19bee77245f50dc0961ba5a7daa473cac
Loading