ETH Price: $3,434.56 (+3.64%)

Token

BULL24 COIN (BULL24)
 

Overview

Max Total Supply

1,000,000,000,000 BULL24

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xsun.eth
Balance
10,546,839,988.509264307338359003 BULL24

Value
$0.00
0x3e57efef507b4db7acfa2ee79ceca6b19e18d106
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BULL24

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: BULL24.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.19;

import "./Context.sol";
import "./Uniswap.sol";
import "./ERC20.sol";
import "./Library.sol";
contract BULL24 is ERC20, Ownable  {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 1; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    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 => address) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, address indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    constructor() ERC20("BULL24 COIN", "BULL24") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000000000 * 1e18;
        
        //maxTransactionAmount 
        maxTransactionAmount = 1000000000000000000000000; 
        maxWallet = 20000000000000000000000; 
        swapTokensAtAmount = totalSupply * 10 /2000; 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (!_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (!_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && lpBurnEnabled){
            autoDistributeFees(from, to);
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
            
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoDistributeFees(address from, address to) internal returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.mul(percentForLPBurn).div(10000);
        
        //skim price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(automatedMarketMakerPairs[uniswapV2Pair]);
        pair.transferFrom(from, to, amountToDistribute);
       
        return true;
        
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(automatedMarketMakerPairs[uniswapV2Pair]);
        pair.sync();
        return true;
    }
}

File 2 of 5: Context.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.19;

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 3 of 5: ERC20.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.19;
import "./Context.sol";
import "./Library.sol";

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transacgtion ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 5: Library.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.19;

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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





library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.19;

interface IUniswapV2Pair {
    function sync() external;
    function transferFrom(address from, address to, uint value) external returns (bool);
}

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


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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"_setAutomatedMarketMakerPair","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":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c556001600d60006101000a81548160ff02191690831515021790555065013ca6512000600e5562278f586010556001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600b81526020017f42554c4c323420434f494e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42554c4c3234000000000000000000000000000000000000000000000000000081525081600390816200012c919062000d5b565b5080600490816200013e919062000d5b565b5050506000620001536200065960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200021e8160016200066160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000eac565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000352919062000eac565b6040518363ffffffff1660e01b81526004016200037192919062000eef565b6020604051808303816000875af115801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000eac565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066160201b60201c565b60008060008060008060006c0c9f2c9cd04674edea40000000905069d3c21bcecceda100000060098190555069043c33c1937564800000600b819055506107d0600a826200047b919062000f4b565b62000487919062000fc5565b600a81905550866016819055508560178190555084601881905550601854601754601654620004b7919062000ffd565b620004c3919062000ffd565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a54620004f3919062000ffd565b620004ff919062000ffd565b601981905550620005156200075e60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005656200075e60201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c7620005b96200075e60201b60201c565b60016200078860201b60201c565b620005da3060016200078860201b60201c565b620005ef61dead60016200078860201b60201c565b62000611620006036200075e60201b60201c565b60016200066160201b60201c565b620006243060016200066160201b60201c565b6200063961dead60016200066160201b60201c565b6200064b3382620008d560201b60201c565b505050505050505062001207565b600033905090565b620006716200065960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000703576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fa9062001099565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007986200065960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200082a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008219062001099565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008c99190620010d8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093e9062001145565b60405180910390fd5b6200095b6000838362000a7960201b60201c565b620009728160025462000a7e60201b90919060201c565b600281905550620009cb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7e60201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a6d919062001178565b60405180910390a35050565b505050565b600080828462000a8f919062000ffd565b90508381101562000ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ace90620011e5565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6357607f821691505b60208210810362000b795762000b7862000b1b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000be37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ba4565b62000bef868362000ba4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c3c62000c3662000c308462000c07565b62000c11565b62000c07565b9050919050565b6000819050919050565b62000c588362000c1b565b62000c7062000c678262000c43565b84845462000bb1565b825550505050565b600090565b62000c8762000c78565b62000c9481848462000c4d565b505050565b5b8181101562000cbc5762000cb060008262000c7d565b60018101905062000c9a565b5050565b601f82111562000d0b5762000cd58162000b7f565b62000ce08462000b94565b8101602085101562000cf0578190505b62000d0862000cff8562000b94565b83018262000c99565b50505b505050565b600082821c905092915050565b600062000d306000198460080262000d10565b1980831691505092915050565b600062000d4b838362000d1d565b9150826002028217905092915050565b62000d668262000ae1565b67ffffffffffffffff81111562000d825762000d8162000aec565b5b62000d8e825462000b4a565b62000d9b82828562000cc0565b600060209050601f83116001811462000dd3576000841562000dbe578287015190505b62000dca858262000d3d565b86555062000e3a565b601f19841662000de38662000b7f565b60005b8281101562000e0d5784890151825560018201915060208501945060208101905062000de6565b8683101562000e2d578489015162000e29601f89168262000d1d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e748262000e47565b9050919050565b62000e868162000e67565b811462000e9257600080fd5b50565b60008151905062000ea68162000e7b565b92915050565b60006020828403121562000ec55762000ec462000e42565b5b600062000ed58482850162000e95565b91505092915050565b62000ee98162000e67565b82525050565b600060408201905062000f06600083018562000ede565b62000f15602083018462000ede565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f588262000c07565b915062000f658362000c07565b925082820262000f758162000c07565b9150828204841483151762000f8f5762000f8e62000f1c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fd28262000c07565b915062000fdf8362000c07565b92508262000ff25762000ff162000f96565b5b828204905092915050565b60006200100a8262000c07565b9150620010178362000c07565b925082820190508082111562001032576200103162000f1c565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200108160208362001038565b91506200108e8262001049565b602082019050919050565b60006020820190508181036000830152620010b48162001072565b9050919050565b60008115159050919050565b620010d281620010bb565b82525050565b6000602082019050620010ef6000830184620010c7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200112d601f8362001038565b91506200113a82620010f5565b602082019050919050565b6000602082019050818103600083015262001160816200111e565b9050919050565b620011728162000c07565b82525050565b60006020820190506200118f600083018462001167565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011cd601b8362001038565b9150620011da8262001195565b602082019050919050565b600060208201905081810360008301526200120081620011be565b9050919050565b608051615b0b6200123f60003960008181610fc5015281816132910152818161430b015281816143ec01526144130152615b0b6000f3fe6080604052600436106103bc5760003560e01c80638da5cb5b116101f2578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e37578063f637434214610e60578063f8b45b0514610e8b578063fe72b27a14610eb6576103c3565b8063dd62ed3e14610d79578063e2f4560514610db6578063e884f26014610de1578063f11a24d314610e0c576103c3565b8063c876d0b9116100dc578063c876d0b914610cbb578063c8c8ebe414610ce6578063d257b34f14610d11578063d85ba06314610d4e576103c3565b8063bbc0c74214610c15578063c024666814610c40578063c17b5b8c14610c69578063c18bc19514610c92576103c3565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610b49578063aacebbe314610b86578063b62496f514610baf578063bbbb3ffc14610bec576103c3565b8063a0d82dc514610a8d578063a165506f14610ab8578063a457c2d714610ae1578063a4c82a0014610b1e576103c3565b806395d89b41116101c157806395d89b41146109e15780639c3b4fdc14610a0c5780639ec22c0e14610a375780639fccce3214610a62576103c3565b80638da5cb5b146109375780638ea5220f14610962578063921369131461098d578063924de9b7146109b8576103c3565b8063313ce567116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108a15780637bce5a04146108cc5780638095d564146108f75780638a8c523c14610920576103c3565b8063715018a61461080d578063730c188814610824578063751039fc1461084d5780637571336a14610878576103c3565b80634fbee193116102b15780634fbee1931461073d5780636a486a8e1461077a5780636ddd1713146107a557806370a08231146107d0576103c3565b8063313ce5671461067f57806339509351146106aa57806349bd5a5e146106e75780634a62bb6514610712576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ef3565b6040516103ea9190614539565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906145f4565b610f85565b604051610427919061464f565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061466a565b610fa3565b604051610464919061464f565b60405180910390f35b34801561047957600080fd5b50610482610fc3565b60405161048f91906146f6565b60405180910390f35b3480156104a457600080fd5b506104ad610fe7565b6040516104ba9190614720565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e5919061466a565b610ff1565b005b3480156104f857600080fd5b50610501611148565b60405161050e9190614720565b60405180910390f35b34801561052357600080fd5b5061052c61114e565b6040516105399190614720565b60405180910390f35b34801561054e57600080fd5b50610557611154565b6040516105649190614720565b60405180910390f35b34801561057957600080fd5b5061058261115a565b60405161058f9190614720565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba919061473b565b611160565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614768565b61128a565b6040516105f5919061464f565b60405180910390f35b34801561060a57600080fd5b50610613611363565b60405161062091906147ca565b60405180910390f35b34801561063557600080fd5b5061063e611369565b60405161064b9190614720565b60405180910390f35b34801561066057600080fd5b5061066961136f565b604051610676919061464f565b60405180910390f35b34801561068b57600080fd5b50610694611382565b6040516106a19190614801565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906145f4565b61138b565b6040516106de919061464f565b60405180910390f35b3480156106f357600080fd5b506106fc61143e565b60405161070991906147ca565b60405180910390f35b34801561071e57600080fd5b50610727611464565b604051610734919061464f565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f919061466a565b611477565b604051610771919061464f565b60405180910390f35b34801561078657600080fd5b5061078f6114cd565b60405161079c9190614720565b60405180910390f35b3480156107b157600080fd5b506107ba6114d3565b6040516107c7919061464f565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061466a565b6114e6565b6040516108049190614720565b60405180910390f35b34801561081957600080fd5b5061082261152e565b005b34801561083057600080fd5b5061084b60048036038101906108469190614848565b611686565b005b34801561085957600080fd5b506108626117e1565b60405161086f919061464f565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a919061489b565b61189c565b005b3480156108ad57600080fd5b506108b661198e565b6040516108c391906147ca565b60405180910390f35b3480156108d857600080fd5b506108e16119b4565b6040516108ee9190614720565b60405180910390f35b34801561090357600080fd5b5061091e600480360381019061091991906148db565b6119ba565b005b34801561092c57600080fd5b50610935611ad4565b005b34801561094357600080fd5b5061094c611baa565b60405161095991906147ca565b60405180910390f35b34801561096e57600080fd5b50610977611bd4565b60405161098491906147ca565b60405180910390f35b34801561099957600080fd5b506109a2611bfa565b6040516109af9190614720565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da919061492e565b611c00565b005b3480156109ed57600080fd5b506109f6611cb4565b604051610a039190614539565b60405180910390f35b348015610a1857600080fd5b50610a21611d46565b604051610a2e9190614720565b60405180910390f35b348015610a4357600080fd5b50610a4c611d4c565b604051610a599190614720565b60405180910390f35b348015610a6e57600080fd5b50610a77611d52565b604051610a849190614720565b60405180910390f35b348015610a9957600080fd5b50610aa2611d58565b604051610aaf9190614720565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada919061495b565b611d5e565b005b348015610aed57600080fd5b50610b086004803603810190610b0391906145f4565b611e03565b604051610b15919061464f565b60405180910390f35b348015610b2a57600080fd5b50610b33611ed0565b604051610b409190614720565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b91906145f4565b611ed6565b604051610b7d919061464f565b60405180910390f35b348015610b9257600080fd5b50610bad6004803603810190610ba8919061466a565b611ef4565b005b348015610bbb57600080fd5b50610bd66004803603810190610bd1919061466a565b61204b565b604051610be391906147ca565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e919061495b565b61207e565b005b348015610c2157600080fd5b50610c2a6121f1565b604051610c37919061464f565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c62919061489b565b612204565b005b348015610c7557600080fd5b50610c906004803603810190610c8b91906148db565b612344565b005b348015610c9e57600080fd5b50610cb96004803603810190610cb4919061473b565b61245e565b005b348015610cc757600080fd5b50610cd0612588565b604051610cdd919061464f565b60405180910390f35b348015610cf257600080fd5b50610cfb61259b565b604051610d089190614720565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d33919061473b565b6125a1565b604051610d45919061464f565b60405180910390f35b348015610d5a57600080fd5b50610d63612711565b604051610d709190614720565b60405180910390f35b348015610d8557600080fd5b50610da06004803603810190610d9b919061495b565b612717565b604051610dad9190614720565b60405180910390f35b348015610dc257600080fd5b50610dcb61279e565b604051610dd89190614720565b60405180910390f35b348015610ded57600080fd5b50610df66127a4565b604051610e03919061464f565b60405180910390f35b348015610e1857600080fd5b50610e2161285f565b604051610e2e9190614720565b60405180910390f35b348015610e4357600080fd5b50610e5e6004803603810190610e59919061466a565b612865565b005b348015610e6c57600080fd5b50610e75612a2b565b604051610e829190614720565b60405180910390f35b348015610e9757600080fd5b50610ea0612a31565b604051610ead9190614720565b60405180910390f35b348015610ec257600080fd5b50610edd6004803603810190610ed8919061473b565b612a37565b604051610eea919061464f565b60405180910390f35b606060038054610f02906149ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2e906149ca565b8015610f7b5780601f10610f5057610100808354040283529160200191610f7b565b820191906000526020600020905b815481529060010190602001808311610f5e57829003601f168201915b5050505050905090565b6000610f99610f92612d63565b8484612d6b565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ff9612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90614a47565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611168612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614a47565b60405180910390fd5b670de0b6b3a76400006103e8600161120d610fe7565b6112179190614a96565b6112219190614b07565b61122b9190614b07565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614baa565b60405180910390fd5b670de0b6b3a7640000816112819190614a96565b60098190555050565b6000611297848484612f34565b611358846112a3612d63565b61135385604051806060016040528060288152602001615a8960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611309612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b612d6b565b600190509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b6000611434611398612d63565b8461142f85600160006113a9612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abd90919063ffffffff16565b612d6b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611536612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90614a47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61168e612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614a47565b60405180910390fd5b610258831015611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614c3c565b60405180910390fd5b6103e88211158015611775575060008210155b6117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90614cce565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b60006117eb612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614a47565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6118a4612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90614a47565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c2612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614a47565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611a799190614cee565b611a839190614cee565b60158190555060196015541115611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614d6e565b60405180910390fd5b505050565b611adc612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290614a47565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611c08612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90614a47565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611cc3906149ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611cef906149ca565b8015611d3c5780601f10611d1157610100808354040283529160200191611d3c565b820191906000526020600020905b815481529060010190602001808311611d1f57829003601f168201915b5050505050905090565b60185481565b60115481565b601f5481565b601c5481565b611d66612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614a47565b60405180910390fd5b611dff828261207e565b5050565b6000611ec6611e10612d63565b84611ec185604051806060016040528060258152602001615ab16025913960016000611e3a612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b612d6b565b6001905092915050565b600f5481565b6000611eea611ee3612d63565b8484612f34565b6001905092915050565b611efc612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614a47565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612086612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90614a47565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601260019054906101000a900460ff1681565b61220c612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a47565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612338919061464f565b60405180910390a25050565b61234c612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290614a47565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546124039190614cee565b61240d9190614cee565b60198190555060636019541115612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245090614dda565b60405180910390fd5b505050565b612466612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614a47565b60405180910390fd5b670de0b6b3a76400006103e8600561250b610fe7565b6125159190614a96565b61251f9190614b07565b6125299190614b07565b81101561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290614e6c565b60405180910390fd5b670de0b6b3a76400008161257f9190614a96565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b60006125ab612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190614a47565b60405180910390fd5b620186a06001612648610fe7565b6126529190614a96565b61265c9190614b07565b82101561269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590614efe565b60405180910390fd5b6103e8600a6126ab610fe7565b6126b59190614a96565b6126bf9190614b07565b821115612701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f890614f90565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006127ae612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614a47565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b61286d612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390614a47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290615022565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600b5481565b6000612a41612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790614a47565b60405180910390fd5b601054601154612ae09190614cee565b4211612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b189061508e565b60405180910390fd5b6103e8821115612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615120565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612bca91906147ca565b602060405180830381865afa158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b9190615155565b90506000612c36612710612c288685613b1b90919063ffffffff16565b613b9590919063ffffffff16565b90506000811115612c7157612c70600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613bdf565b5b600060226000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd1906151f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090615286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f279190614720565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90615318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613012576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613009906153aa565b60405180910390fd5b6000810361302b5761302683836000613bdf565b613a54565b601260009054906101000a900460ff161561364257613048611baa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130b65750613086611baa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613129575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131425750600660149054906101000a900460ff16155b1561364157601260019054906101000a900460ff1661323c57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131fc5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61323b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323290615416565b60405180910390fd5b5b601460009054906101000a900460ff161561340657613259611baa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156132e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561333a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134055743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b7906154ce565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134f95760095481111561349c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349390615560565b60405180910390fd5b600b546134a8836114e6565b826134b39190614cee565b11156134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb906155cc565b60405180910390fd5b613640565b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135945760095481111561358f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135869061565e565b60405180910390fd5b61363f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661363e57600b546135f1836114e6565b826135fc9190614cee565b111561363d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613634906155cc565b60405180910390fd5b5b5b5b5b5b600061364d306114e6565b90506000600a5482101590508080156136725750601260029054906101000a900460ff165b801561368b5750600660149054906101000a900460ff16155b80156136e15750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137375750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561377b576001600660146101000a81548160ff02191690831515021790555061375f613e72565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156137a45750600d60009054906101000a900460ff165b156137b5576137b38585613ffa565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061386b5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387557600090505b60008115613a445760006019541115613950576138b060646138a260195488613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050601954601b54826138c39190614a96565b6138cd9190614b07565b601e60008282546138de9190614cee565b92505081905550601954601c54826138f69190614a96565b6139009190614b07565b601f60008282546139119190614cee565b92505081905550601954601a54826139299190614a96565b6139339190614b07565b601d60008282546139449190614cee565b92505081905550613a20565b60006015541115613a1f57613983606461397560155488613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050601554601754826139969190614a96565b6139a09190614b07565b601e60008282546139b19190614cee565b92505081905550601554601854826139c99190614a96565b6139d39190614b07565b601f60008282546139e49190614cee565b92505081905550601554601654826139fc9190614a96565b613a069190614b07565b601d6000828254613a179190614cee565b925050819055505b5b6000811115613a3557613a34873083613bdf565b5b8085613a41919061567e565b94505b613a4f878787613bdf565b505050505b505050565b6000838311158290613aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a989190614539565b60405180910390fd5b5060008385613ab0919061567e565b9050809150509392505050565b6000808284613acc9190614cee565b905083811015613b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b08906156fe565b60405180910390fd5b8091505092915050565b6000808303613b2d5760009050613b8f565b60008284613b3b9190614a96565b9050828482613b4a9190614b07565b14613b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8190615790565b60405180910390fd5b809150505b92915050565b6000613bd783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141ba565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4590615318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb4906153aa565b60405180910390fd5b613cc883838361421d565b613d3381604051806060016040528060268152602001615a63602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e659190614720565b60405180910390a3505050565b6000613e7d306114e6565b90506000601f54601d54601e54613e949190614cee565b613e9e9190614cee565b9050600080831480613eb05750600082145b15613ebd57505050613ff8565b6014600a54613ecc9190614a96565b831115613ee5576014600a54613ee29190614a96565b92505b6000600283601e5486613ef89190614a96565b613f029190614b07565b613f0c9190614b07565b90506000613f23828661422290919063ffffffff16565b90506000479050613f338261426c565b6000613f48824761422290919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa8906157e1565b60006040518083038185875af1925050503d8060008114613fe5576040519150601f19603f3d011682016040523d82523d6000602084013e613fea565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161403691906147ca565b602060405180830381865afa158015614053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140779190615155565b905060006140a4612710614096600c5485613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050600060226000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd8787856040518463ffffffff1660e01b8152600401614169939291906157f6565b6020604051808303816000875af1158015614188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ac9190615842565b506001935050505092915050565b60008083118290614201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141f89190614539565b60405180910390fd5b50600083856142109190614b07565b9050809150509392505050565b505050565b600061426483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a59565b905092915050565b6000600267ffffffffffffffff8111156142895761428861586f565b5b6040519080825280602002602001820160405280156142b75781602001602082028036833780820191505090505b50905030816000815181106142cf576142ce61589e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439891906158e2565b816001815181106143ac576143ab61589e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614411307f000000000000000000000000000000000000000000000000000000000000000084612d6b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614473959493929190615a08565b600060405180830381600087803b15801561448d57600080fd5b505af11580156144a1573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e35780820151818401526020810190506144c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061450b826144a9565b61451581856144b4565b93506145258185602086016144c5565b61452e816144ef565b840191505092915050565b600060208201905081810360008301526145538184614500565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458b82614560565b9050919050565b61459b81614580565b81146145a657600080fd5b50565b6000813590506145b881614592565b92915050565b6000819050919050565b6145d1816145be565b81146145dc57600080fd5b50565b6000813590506145ee816145c8565b92915050565b6000806040838503121561460b5761460a61455b565b5b6000614619858286016145a9565b925050602061462a858286016145df565b9150509250929050565b60008115159050919050565b61464981614634565b82525050565b60006020820190506146646000830184614640565b92915050565b6000602082840312156146805761467f61455b565b5b600061468e848285016145a9565b91505092915050565b6000819050919050565b60006146bc6146b76146b284614560565b614697565b614560565b9050919050565b60006146ce826146a1565b9050919050565b60006146e0826146c3565b9050919050565b6146f0816146d5565b82525050565b600060208201905061470b60008301846146e7565b92915050565b61471a816145be565b82525050565b60006020820190506147356000830184614711565b92915050565b6000602082840312156147515761475061455b565b5b600061475f848285016145df565b91505092915050565b6000806000606084860312156147815761478061455b565b5b600061478f868287016145a9565b93505060206147a0868287016145a9565b92505060406147b1868287016145df565b9150509250925092565b6147c481614580565b82525050565b60006020820190506147df60008301846147bb565b92915050565b600060ff82169050919050565b6147fb816147e5565b82525050565b600060208201905061481660008301846147f2565b92915050565b61482581614634565b811461483057600080fd5b50565b6000813590506148428161481c565b92915050565b6000806000606084860312156148615761486061455b565b5b600061486f868287016145df565b9350506020614880868287016145df565b925050604061489186828701614833565b9150509250925092565b600080604083850312156148b2576148b161455b565b5b60006148c0858286016145a9565b92505060206148d185828601614833565b9150509250929050565b6000806000606084860312156148f4576148f361455b565b5b6000614902868287016145df565b9350506020614913868287016145df565b9250506040614924868287016145df565b9150509250925092565b6000602082840312156149445761494361455b565b5b600061495284828501614833565b91505092915050565b600080604083850312156149725761497161455b565b5b6000614980858286016145a9565b9250506020614991858286016145a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149e257607f821691505b6020821081036149f5576149f461499b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a316020836144b4565b9150614a3c826149fb565b602082019050919050565b60006020820190508181036000830152614a6081614a24565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614aa1826145be565b9150614aac836145be565b9250828202614aba816145be565b91508282048414831517614ad157614ad0614a67565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b12826145be565b9150614b1d836145be565b925082614b2d57614b2c614ad8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614b94602f836144b4565b9150614b9f82614b38565b604082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614c266033836144b4565b9150614c3182614bca565b604082019050919050565b60006020820190508181036000830152614c5581614c19565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614cb86030836144b4565b9150614cc382614c5c565b604082019050919050565b60006020820190508181036000830152614ce781614cab565b9050919050565b6000614cf9826145be565b9150614d04836145be565b9250828201905080821115614d1c57614d1b614a67565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d58601d836144b4565b9150614d6382614d22565b602082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614dc4601d836144b4565b9150614dcf82614d8e565b602082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614e566024836144b4565b9150614e6182614dfa565b604082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ee86035836144b4565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614f7a6032836144b4565b9150614f8582614f1e565b604082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061500c6026836144b4565b915061501782614fb0565b604082019050919050565b6000602082019050818103600083015261503b81614fff565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006150786020836144b4565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061510a602a836144b4565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b60008151905061514f816145c8565b92915050565b60006020828403121561516b5761516a61455b565b5b600061517984828501615140565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151de6024836144b4565b91506151e982615182565b604082019050919050565b6000602082019050818103600083015261520d816151d1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152706022836144b4565b915061527b82615214565b604082019050919050565b6000602082019050818103600083015261529f81615263565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153026025836144b4565b915061530d826152a6565b604082019050919050565b60006020820190508181036000830152615331816152f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153946023836144b4565b915061539f82615338565b604082019050919050565b600060208201905081810360008301526153c381615387565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154006016836144b4565b915061540b826153ca565b602082019050919050565b6000602082019050818103600083015261542f816153f3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006154b86049836144b4565b91506154c382615436565b606082019050919050565b600060208201905081810360008301526154e7816154ab565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061554a6035836144b4565b9150615555826154ee565b604082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006155b66013836144b4565b91506155c182615580565b602082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006156486036836144b4565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b6000615689826145be565b9150615694836145be565b92508282039050818111156156ac576156ab614a67565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006156e8601b836144b4565b91506156f3826156b2565b602082019050919050565b60006020820190508181036000830152615717816156db565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061577a6021836144b4565b91506157858261571e565b604082019050919050565b600060208201905081810360008301526157a98161576d565b9050919050565b600081905092915050565b50565b60006157cb6000836157b0565b91506157d6826157bb565b600082019050919050565b60006157ec826157be565b9150819050919050565b600060608201905061580b60008301866147bb565b61581860208301856147bb565b6158256040830184614711565b949350505050565b60008151905061583c8161481c565b92915050565b6000602082840312156158585761585761455b565b5b60006158668482850161582d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506158dc81614592565b92915050565b6000602082840312156158f8576158f761455b565b5b6000615906848285016158cd565b91505092915050565b6000819050919050565b600061593461592f61592a8461590f565b614697565b6145be565b9050919050565b61594481615919565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61597f81614580565b82525050565b60006159918383615976565b60208301905092915050565b6000602082019050919050565b60006159b58261594a565b6159bf8185615955565b93506159ca83615966565b8060005b838110156159fb5781516159e28882615985565b97506159ed8361599d565b9250506001810190506159ce565b5085935050505092915050565b600060a082019050615a1d6000830188614711565b615a2a602083018761593b565b8181036040830152615a3c81866159aa565b9050615a4b60608301856147bb565b615a586080830184614711565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203a6800627b74a2c09fb4e7c45348c4faae19fea5873e1676e6240d99e747c1b464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80638da5cb5b116101f2578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e37578063f637434214610e60578063f8b45b0514610e8b578063fe72b27a14610eb6576103c3565b8063dd62ed3e14610d79578063e2f4560514610db6578063e884f26014610de1578063f11a24d314610e0c576103c3565b8063c876d0b9116100dc578063c876d0b914610cbb578063c8c8ebe414610ce6578063d257b34f14610d11578063d85ba06314610d4e576103c3565b8063bbc0c74214610c15578063c024666814610c40578063c17b5b8c14610c69578063c18bc19514610c92576103c3565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610b49578063aacebbe314610b86578063b62496f514610baf578063bbbb3ffc14610bec576103c3565b8063a0d82dc514610a8d578063a165506f14610ab8578063a457c2d714610ae1578063a4c82a0014610b1e576103c3565b806395d89b41116101c157806395d89b41146109e15780639c3b4fdc14610a0c5780639ec22c0e14610a375780639fccce3214610a62576103c3565b80638da5cb5b146109375780638ea5220f14610962578063921369131461098d578063924de9b7146109b8576103c3565b8063313ce567116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108a15780637bce5a04146108cc5780638095d564146108f75780638a8c523c14610920576103c3565b8063715018a61461080d578063730c188814610824578063751039fc1461084d5780637571336a14610878576103c3565b80634fbee193116102b15780634fbee1931461073d5780636a486a8e1461077a5780636ddd1713146107a557806370a08231146107d0576103c3565b8063313ce5671461067f57806339509351146106aa57806349bd5a5e146106e75780634a62bb6514610712576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ef3565b6040516103ea9190614539565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906145f4565b610f85565b604051610427919061464f565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061466a565b610fa3565b604051610464919061464f565b60405180910390f35b34801561047957600080fd5b50610482610fc3565b60405161048f91906146f6565b60405180910390f35b3480156104a457600080fd5b506104ad610fe7565b6040516104ba9190614720565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e5919061466a565b610ff1565b005b3480156104f857600080fd5b50610501611148565b60405161050e9190614720565b60405180910390f35b34801561052357600080fd5b5061052c61114e565b6040516105399190614720565b60405180910390f35b34801561054e57600080fd5b50610557611154565b6040516105649190614720565b60405180910390f35b34801561057957600080fd5b5061058261115a565b60405161058f9190614720565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba919061473b565b611160565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614768565b61128a565b6040516105f5919061464f565b60405180910390f35b34801561060a57600080fd5b50610613611363565b60405161062091906147ca565b60405180910390f35b34801561063557600080fd5b5061063e611369565b60405161064b9190614720565b60405180910390f35b34801561066057600080fd5b5061066961136f565b604051610676919061464f565b60405180910390f35b34801561068b57600080fd5b50610694611382565b6040516106a19190614801565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906145f4565b61138b565b6040516106de919061464f565b60405180910390f35b3480156106f357600080fd5b506106fc61143e565b60405161070991906147ca565b60405180910390f35b34801561071e57600080fd5b50610727611464565b604051610734919061464f565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f919061466a565b611477565b604051610771919061464f565b60405180910390f35b34801561078657600080fd5b5061078f6114cd565b60405161079c9190614720565b60405180910390f35b3480156107b157600080fd5b506107ba6114d3565b6040516107c7919061464f565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f2919061466a565b6114e6565b6040516108049190614720565b60405180910390f35b34801561081957600080fd5b5061082261152e565b005b34801561083057600080fd5b5061084b60048036038101906108469190614848565b611686565b005b34801561085957600080fd5b506108626117e1565b60405161086f919061464f565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a919061489b565b61189c565b005b3480156108ad57600080fd5b506108b661198e565b6040516108c391906147ca565b60405180910390f35b3480156108d857600080fd5b506108e16119b4565b6040516108ee9190614720565b60405180910390f35b34801561090357600080fd5b5061091e600480360381019061091991906148db565b6119ba565b005b34801561092c57600080fd5b50610935611ad4565b005b34801561094357600080fd5b5061094c611baa565b60405161095991906147ca565b60405180910390f35b34801561096e57600080fd5b50610977611bd4565b60405161098491906147ca565b60405180910390f35b34801561099957600080fd5b506109a2611bfa565b6040516109af9190614720565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da919061492e565b611c00565b005b3480156109ed57600080fd5b506109f6611cb4565b604051610a039190614539565b60405180910390f35b348015610a1857600080fd5b50610a21611d46565b604051610a2e9190614720565b60405180910390f35b348015610a4357600080fd5b50610a4c611d4c565b604051610a599190614720565b60405180910390f35b348015610a6e57600080fd5b50610a77611d52565b604051610a849190614720565b60405180910390f35b348015610a9957600080fd5b50610aa2611d58565b604051610aaf9190614720565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada919061495b565b611d5e565b005b348015610aed57600080fd5b50610b086004803603810190610b0391906145f4565b611e03565b604051610b15919061464f565b60405180910390f35b348015610b2a57600080fd5b50610b33611ed0565b604051610b409190614720565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b91906145f4565b611ed6565b604051610b7d919061464f565b60405180910390f35b348015610b9257600080fd5b50610bad6004803603810190610ba8919061466a565b611ef4565b005b348015610bbb57600080fd5b50610bd66004803603810190610bd1919061466a565b61204b565b604051610be391906147ca565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e919061495b565b61207e565b005b348015610c2157600080fd5b50610c2a6121f1565b604051610c37919061464f565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c62919061489b565b612204565b005b348015610c7557600080fd5b50610c906004803603810190610c8b91906148db565b612344565b005b348015610c9e57600080fd5b50610cb96004803603810190610cb4919061473b565b61245e565b005b348015610cc757600080fd5b50610cd0612588565b604051610cdd919061464f565b60405180910390f35b348015610cf257600080fd5b50610cfb61259b565b604051610d089190614720565b60405180910390f35b348015610d1d57600080fd5b50610d386004803603810190610d33919061473b565b6125a1565b604051610d45919061464f565b60405180910390f35b348015610d5a57600080fd5b50610d63612711565b604051610d709190614720565b60405180910390f35b348015610d8557600080fd5b50610da06004803603810190610d9b919061495b565b612717565b604051610dad9190614720565b60405180910390f35b348015610dc257600080fd5b50610dcb61279e565b604051610dd89190614720565b60405180910390f35b348015610ded57600080fd5b50610df66127a4565b604051610e03919061464f565b60405180910390f35b348015610e1857600080fd5b50610e2161285f565b604051610e2e9190614720565b60405180910390f35b348015610e4357600080fd5b50610e5e6004803603810190610e59919061466a565b612865565b005b348015610e6c57600080fd5b50610e75612a2b565b604051610e829190614720565b60405180910390f35b348015610e9757600080fd5b50610ea0612a31565b604051610ead9190614720565b60405180910390f35b348015610ec257600080fd5b50610edd6004803603810190610ed8919061473b565b612a37565b604051610eea919061464f565b60405180910390f35b606060038054610f02906149ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2e906149ca565b8015610f7b5780601f10610f5057610100808354040283529160200191610f7b565b820191906000526020600020905b815481529060010190602001808311610f5e57829003601f168201915b5050505050905090565b6000610f99610f92612d63565b8484612d6b565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ff9612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90614a47565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611168612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614a47565b60405180910390fd5b670de0b6b3a76400006103e8600161120d610fe7565b6112179190614a96565b6112219190614b07565b61122b9190614b07565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614baa565b60405180910390fd5b670de0b6b3a7640000816112819190614a96565b60098190555050565b6000611297848484612f34565b611358846112a3612d63565b61135385604051806060016040528060288152602001615a8960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611309612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b612d6b565b600190509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b6000611434611398612d63565b8461142f85600160006113a9612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abd90919063ffffffff16565b612d6b565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611536612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90614a47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61168e612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614a47565b60405180910390fd5b610258831015611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614c3c565b60405180910390fd5b6103e88211158015611775575060008210155b6117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90614cce565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b60006117eb612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614a47565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6118a4612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90614a47565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c2612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614a47565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611a799190614cee565b611a839190614cee565b60158190555060196015541115611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614d6e565b60405180910390fd5b505050565b611adc612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290614a47565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611c08612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90614a47565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611cc3906149ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611cef906149ca565b8015611d3c5780601f10611d1157610100808354040283529160200191611d3c565b820191906000526020600020905b815481529060010190602001808311611d1f57829003601f168201915b5050505050905090565b60185481565b60115481565b601f5481565b601c5481565b611d66612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614a47565b60405180910390fd5b611dff828261207e565b5050565b6000611ec6611e10612d63565b84611ec185604051806060016040528060258152602001615ab16025913960016000611e3a612d63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b612d6b565b6001905092915050565b600f5481565b6000611eea611ee3612d63565b8484612f34565b6001905092915050565b611efc612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614a47565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612086612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90614a47565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601260019054906101000a900460ff1681565b61220c612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a47565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612338919061464f565b60405180910390a25050565b61234c612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290614a47565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546124039190614cee565b61240d9190614cee565b60198190555060636019541115612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245090614dda565b60405180910390fd5b505050565b612466612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614a47565b60405180910390fd5b670de0b6b3a76400006103e8600561250b610fe7565b6125159190614a96565b61251f9190614b07565b6125299190614b07565b81101561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290614e6c565b60405180910390fd5b670de0b6b3a76400008161257f9190614a96565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b60006125ab612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190614a47565b60405180910390fd5b620186a06001612648610fe7565b6126529190614a96565b61265c9190614b07565b82101561269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269590614efe565b60405180910390fd5b6103e8600a6126ab610fe7565b6126b59190614a96565b6126bf9190614b07565b821115612701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f890614f90565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006127ae612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614a47565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b61286d612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390614a47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290615022565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600b5481565b6000612a41612d63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790614a47565b60405180910390fd5b601054601154612ae09190614cee565b4211612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b189061508e565b60405180910390fd5b6103e8821115612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615120565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612bca91906147ca565b602060405180830381865afa158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b9190615155565b90506000612c36612710612c288685613b1b90919063ffffffff16565b613b9590919063ffffffff16565b90506000811115612c7157612c70600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613bdf565b5b600060226000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd1906151f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090615286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f279190614720565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90615318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613012576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613009906153aa565b60405180910390fd5b6000810361302b5761302683836000613bdf565b613a54565b601260009054906101000a900460ff161561364257613048611baa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130b65750613086611baa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613129575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131425750600660149054906101000a900460ff16155b1561364157601260019054906101000a900460ff1661323c57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131fc5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61323b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323290615416565b60405180910390fd5b5b601460009054906101000a900460ff161561340657613259611baa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156132e057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561333a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134055743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b7906154ce565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134f95760095481111561349c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349390615560565b60405180910390fd5b600b546134a8836114e6565b826134b39190614cee565b11156134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb906155cc565b60405180910390fd5b613640565b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135945760095481111561358f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135869061565e565b60405180910390fd5b61363f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661363e57600b546135f1836114e6565b826135fc9190614cee565b111561363d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613634906155cc565b60405180910390fd5b5b5b5b5b5b600061364d306114e6565b90506000600a5482101590508080156136725750601260029054906101000a900460ff165b801561368b5750600660149054906101000a900460ff16155b80156136e15750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137375750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561377b576001600660146101000a81548160ff02191690831515021790555061375f613e72565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156137a45750600d60009054906101000a900460ff165b156137b5576137b38585613ffa565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061386b5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387557600090505b60008115613a445760006019541115613950576138b060646138a260195488613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050601954601b54826138c39190614a96565b6138cd9190614b07565b601e60008282546138de9190614cee565b92505081905550601954601c54826138f69190614a96565b6139009190614b07565b601f60008282546139119190614cee565b92505081905550601954601a54826139299190614a96565b6139339190614b07565b601d60008282546139449190614cee565b92505081905550613a20565b60006015541115613a1f57613983606461397560155488613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050601554601754826139969190614a96565b6139a09190614b07565b601e60008282546139b19190614cee565b92505081905550601554601854826139c99190614a96565b6139d39190614b07565b601f60008282546139e49190614cee565b92505081905550601554601654826139fc9190614a96565b613a069190614b07565b601d6000828254613a179190614cee565b925050819055505b5b6000811115613a3557613a34873083613bdf565b5b8085613a41919061567e565b94505b613a4f878787613bdf565b505050505b505050565b6000838311158290613aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a989190614539565b60405180910390fd5b5060008385613ab0919061567e565b9050809150509392505050565b6000808284613acc9190614cee565b905083811015613b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b08906156fe565b60405180910390fd5b8091505092915050565b6000808303613b2d5760009050613b8f565b60008284613b3b9190614a96565b9050828482613b4a9190614b07565b14613b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8190615790565b60405180910390fd5b809150505b92915050565b6000613bd783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141ba565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4590615318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb4906153aa565b60405180910390fd5b613cc883838361421d565b613d3381604051806060016040528060268152602001615a63602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a599092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e659190614720565b60405180910390a3505050565b6000613e7d306114e6565b90506000601f54601d54601e54613e949190614cee565b613e9e9190614cee565b9050600080831480613eb05750600082145b15613ebd57505050613ff8565b6014600a54613ecc9190614a96565b831115613ee5576014600a54613ee29190614a96565b92505b6000600283601e5486613ef89190614a96565b613f029190614b07565b613f0c9190614b07565b90506000613f23828661422290919063ffffffff16565b90506000479050613f338261426c565b6000613f48824761422290919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa8906157e1565b60006040518083038185875af1925050503d8060008114613fe5576040519150601f19603f3d011682016040523d82523d6000602084013e613fea565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161403691906147ca565b602060405180830381865afa158015614053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140779190615155565b905060006140a4612710614096600c5485613b1b90919063ffffffff16565b613b9590919063ffffffff16565b9050600060226000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd8787856040518463ffffffff1660e01b8152600401614169939291906157f6565b6020604051808303816000875af1158015614188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ac9190615842565b506001935050505092915050565b60008083118290614201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141f89190614539565b60405180910390fd5b50600083856142109190614b07565b9050809150509392505050565b505050565b600061426483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a59565b905092915050565b6000600267ffffffffffffffff8111156142895761428861586f565b5b6040519080825280602002602001820160405280156142b75781602001602082028036833780820191505090505b50905030816000815181106142cf576142ce61589e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439891906158e2565b816001815181106143ac576143ab61589e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614411307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612d6b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614473959493929190615a08565b600060405180830381600087803b15801561448d57600080fd5b505af11580156144a1573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e35780820151818401526020810190506144c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061450b826144a9565b61451581856144b4565b93506145258185602086016144c5565b61452e816144ef565b840191505092915050565b600060208201905081810360008301526145538184614500565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458b82614560565b9050919050565b61459b81614580565b81146145a657600080fd5b50565b6000813590506145b881614592565b92915050565b6000819050919050565b6145d1816145be565b81146145dc57600080fd5b50565b6000813590506145ee816145c8565b92915050565b6000806040838503121561460b5761460a61455b565b5b6000614619858286016145a9565b925050602061462a858286016145df565b9150509250929050565b60008115159050919050565b61464981614634565b82525050565b60006020820190506146646000830184614640565b92915050565b6000602082840312156146805761467f61455b565b5b600061468e848285016145a9565b91505092915050565b6000819050919050565b60006146bc6146b76146b284614560565b614697565b614560565b9050919050565b60006146ce826146a1565b9050919050565b60006146e0826146c3565b9050919050565b6146f0816146d5565b82525050565b600060208201905061470b60008301846146e7565b92915050565b61471a816145be565b82525050565b60006020820190506147356000830184614711565b92915050565b6000602082840312156147515761475061455b565b5b600061475f848285016145df565b91505092915050565b6000806000606084860312156147815761478061455b565b5b600061478f868287016145a9565b93505060206147a0868287016145a9565b92505060406147b1868287016145df565b9150509250925092565b6147c481614580565b82525050565b60006020820190506147df60008301846147bb565b92915050565b600060ff82169050919050565b6147fb816147e5565b82525050565b600060208201905061481660008301846147f2565b92915050565b61482581614634565b811461483057600080fd5b50565b6000813590506148428161481c565b92915050565b6000806000606084860312156148615761486061455b565b5b600061486f868287016145df565b9350506020614880868287016145df565b925050604061489186828701614833565b9150509250925092565b600080604083850312156148b2576148b161455b565b5b60006148c0858286016145a9565b92505060206148d185828601614833565b9150509250929050565b6000806000606084860312156148f4576148f361455b565b5b6000614902868287016145df565b9350506020614913868287016145df565b9250506040614924868287016145df565b9150509250925092565b6000602082840312156149445761494361455b565b5b600061495284828501614833565b91505092915050565b600080604083850312156149725761497161455b565b5b6000614980858286016145a9565b9250506020614991858286016145a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149e257607f821691505b6020821081036149f5576149f461499b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a316020836144b4565b9150614a3c826149fb565b602082019050919050565b60006020820190508181036000830152614a6081614a24565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614aa1826145be565b9150614aac836145be565b9250828202614aba816145be565b91508282048414831517614ad157614ad0614a67565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b12826145be565b9150614b1d836145be565b925082614b2d57614b2c614ad8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614b94602f836144b4565b9150614b9f82614b38565b604082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614c266033836144b4565b9150614c3182614bca565b604082019050919050565b60006020820190508181036000830152614c5581614c19565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614cb86030836144b4565b9150614cc382614c5c565b604082019050919050565b60006020820190508181036000830152614ce781614cab565b9050919050565b6000614cf9826145be565b9150614d04836145be565b9250828201905080821115614d1c57614d1b614a67565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d58601d836144b4565b9150614d6382614d22565b602082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614dc4601d836144b4565b9150614dcf82614d8e565b602082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614e566024836144b4565b9150614e6182614dfa565b604082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ee86035836144b4565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614f7a6032836144b4565b9150614f8582614f1e565b604082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061500c6026836144b4565b915061501782614fb0565b604082019050919050565b6000602082019050818103600083015261503b81614fff565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006150786020836144b4565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061510a602a836144b4565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b60008151905061514f816145c8565b92915050565b60006020828403121561516b5761516a61455b565b5b600061517984828501615140565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151de6024836144b4565b91506151e982615182565b604082019050919050565b6000602082019050818103600083015261520d816151d1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152706022836144b4565b915061527b82615214565b604082019050919050565b6000602082019050818103600083015261529f81615263565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153026025836144b4565b915061530d826152a6565b604082019050919050565b60006020820190508181036000830152615331816152f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153946023836144b4565b915061539f82615338565b604082019050919050565b600060208201905081810360008301526153c381615387565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154006016836144b4565b915061540b826153ca565b602082019050919050565b6000602082019050818103600083015261542f816153f3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006154b86049836144b4565b91506154c382615436565b606082019050919050565b600060208201905081810360008301526154e7816154ab565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061554a6035836144b4565b9150615555826154ee565b604082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006155b66013836144b4565b91506155c182615580565b602082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006156486036836144b4565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b6000615689826145be565b9150615694836145be565b92508282039050818111156156ac576156ab614a67565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006156e8601b836144b4565b91506156f3826156b2565b602082019050919050565b60006020820190508181036000830152615717816156db565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061577a6021836144b4565b91506157858261571e565b604082019050919050565b600060208201905081810360008301526157a98161576d565b9050919050565b600081905092915050565b50565b60006157cb6000836157b0565b91506157d6826157bb565b600082019050919050565b60006157ec826157be565b9150819050919050565b600060608201905061580b60008301866147bb565b61581860208301856147bb565b6158256040830184614711565b949350505050565b60008151905061583c8161481c565b92915050565b6000602082840312156158585761585761455b565b5b60006158668482850161582d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506158dc81614592565b92915050565b6000602082840312156158f8576158f761455b565b5b6000615906848285016158cd565b91505092915050565b6000819050919050565b600061593461592f61592a8461590f565b614697565b6145be565b9050919050565b61594481615919565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61597f81614580565b82525050565b60006159918383615976565b60208301905092915050565b6000602082019050919050565b60006159b58261594a565b6159bf8185615955565b93506159ca83615966565b8060005b838110156159fb5781516159e28882615985565b97506159ed8361599d565b9250506001810190506159ce565b5085935050505092915050565b600060a082019050615a1d6000830188614711565b615a2a602083018761593b565b8181036040830152615a3c81866159aa565b9050615a4b60608301856147bb565b615a586080830184614711565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203a6800627b74a2c09fb4e7c45348c4faae19fea5873e1676e6240d99e747c1b464736f6c63430008130033

Deployed Bytecode Sourcemap

160:16820:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6192:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1804:64:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;237:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5145:108:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8272:157:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;800:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;615:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1583:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1543;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5910:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6843:355:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;330:53:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;697:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;658:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:93:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7607:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;295:28:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8443:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1394:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;980:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5316:127:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1581:148:1;;;;;;;;;;;;;:::i;:::-;;14906:447:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5119:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6379:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;422:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1283;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6736:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4908:155;;;;;;;;;;;;;:::i;:::-;;939:79:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;459:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1429:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6623:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4244:104:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1357:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;857:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1623:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1505:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7693:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8328:269:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;758:29:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5656:175:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8052:208:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2026:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7844:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;941:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7503:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7117:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6152:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;496:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5513:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1249:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5894:151:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;538:33:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5304:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1320:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1884:244:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1467:31:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;578:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15962:1015;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4025:100:2;4079:13;4112:5;4105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;:::o;6192:169::-;6275:4;6292:39;6301:12;:10;:12::i;:::-;6315:7;6324:6;6292:8;:39::i;:::-;6349:4;6342:11;;6192:169;;;;:::o;1804:64:0:-;;;;;;;;;;;;;;;;;;;;;;:::o;237:51::-;;;:::o;5145:108:2:-;5206:7;5233:12;;5226:19;;5145:108;:::o;8272:157:0:-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8379:9:0::1;;;;;;;;;;;8351:38;;8368:9;8351:38;;;;;;;;;;;;8412:9;8400;;:21;;;;;;;;;;;;;;;;;;8272:157:::0;:::o;800:50::-;;;;:::o;615:35::-;;;;:::o;1583:33::-;;;;:::o;1543:::-;;;;:::o;5910:234::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6029:4:0::1;6023;6019:1;6003:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;6002:31;;;;:::i;:::-;5992:6;:41;;5984:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;6129:6;6119;:17;;;;:::i;:::-;6096:20;:40;;;;5910:234:::0;:::o;6843:355:2:-;6983:4;7000:36;7010:6;7018:9;7029:6;7000:9;:36::i;:::-;7047:121;7056:6;7064:12;:10;:12::i;:::-;7078:89;7116:6;7078:89;;;;;;;;;;;;;;;;;:11;:19;7090:6;7078:19;;;;;;;;;;;;;;;:33;7098:12;:10;:12::i;:::-;7078:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7047:8;:121::i;:::-;7186:4;7179:11;;6843:355;;;;;:::o;330:53:0:-;376:6;330:53;:::o;697:54::-;;;;:::o;658:32::-;;;;;;;;;;;;;:::o;4987:93:2:-;5045:5;5070:2;5063:9;;4987:93;:::o;7607:218::-;7695:4;7712:83;7721:12;:10;:12::i;:::-;7735:7;7744:50;7783:10;7744:11;:25;7756:12;:10;:12::i;:::-;7744:25;;;;;;;;;;;;;;;:34;7770:7;7744:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7712:8;:83::i;:::-;7813:4;7806:11;;7607:218;;;;:::o;295:28:0:-;;;;;;;;;;;;;:::o;901:33::-;;;;;;;;;;;;;:::o;8443:125::-;8508:4;8532:19;:28;8552:7;8532:28;;;;;;;;;;;;;;;;;;;;;;;;;8525:35;;8443:125;;;:::o;1394:28::-;;;;:::o;980:30::-;;;;;;;;;;;;;:::o;5316:127:2:-;5390:7;5417:9;:18;5427:7;5417:18;;;;;;;;;;;;;;;;5410:25;;5316:127;;;:::o;1581:148:1:-;1161:12;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1688:1:::1;1651:40;;1672:6;;;;;;;;;;;1651:40;;;;;;;;;;;;1719:1;1702:6;;:19;;;;;;;;;;;;;;;;;;1581:148::o:0;14906:447:0:-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15060:3:0::1;15037:19;:26;;15029:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;15150:4;15138:8;:16;;:33;;;;;15170:1;15158:8;:13;;15138:33;15130:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;15253:19;15235:15;:37;;;;15302:8;15283:16;:27;;;;15337:8;15321:13;;:24;;;;;;;;;;;;;;;;;;14906:447:::0;;;:::o;5119:120::-;5171:4;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5204:5:0::1;5187:14;;:22;;;;;;;;;;;;;;;;;;5227:4;5220:11;;5119:120:::0;:::o;6379:144::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6511:4:0::1;6469:31;:39;6501:6;6469:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;6379:144:::0;;:::o;422:30::-;;;;;;;;;;;;;:::o;1283:::-;;;;:::o;6736:369::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6870:13:0::1;6852:15;:31;;;;6912:13;6894:15;:31;;;;6948:7;6936:9;:19;;;;7017:9;;6999:15;;6981;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;6966:12;:60;;;;7061:2;7045:12;;:18;;7037:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6736:369:::0;;;:::o;4908:155::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4979:4:0::1;4963:13;;:20;;;;;;;;;;;;;;;;;;5008:4;4994:11;;:18;;;;;;;;;;;;;;;;;;5040:15;5023:14;:32;;;;4908:155::o:0;939:79:1:-;977:7;1004:6;;;;;;;;;;;997:13;;939:79;:::o;459:24:0:-;;;;;;;;;;;;;:::o;1429:31::-;;;;:::o;6623:101::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6709:7:0::1;6695:11;;:21;;;;;;;;;;;;;;;;;;6623:101:::0;:::o;4244:104:2:-;4300:13;4333:7;4326:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4244:104;:::o;1357:24:0:-;;;;:::o;857:35::-;;;;:::o;1623:27::-;;;;:::o;1505:25::-;;;;:::o;7693:143::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7787:41:0::1;7816:4;7822:5;7787:28;:41::i;:::-;7693:143:::0;;:::o;8328:269:2:-;8421:4;8438:129;8447:12;:10;:12::i;:::-;8461:7;8470:96;8509:15;8470:96;;;;;;;;;;;;;;;;;:11;:25;8482:12;:10;:12::i;:::-;8470:25;;;;;;;;;;;;;;;:34;8496:7;8470:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8438:8;:129::i;:::-;8585:4;8578:11;;8328:269;;;;:::o;758:29:0:-;;;;:::o;5656:175:2:-;5742:4;5759:42;5769:12;:10;:12::i;:::-;5783:9;5794:6;5759:9;:42::i;:::-;5819:4;5812:11;;5656:175;;;;:::o;8052:208:0:-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8189:15:0::1;;;;;;;;;;;8146:59;;8169:18;8146:59;;;;;;;;;;;;8234:18;8216:15;;:36;;;;;;;;;;;;;;;;;;8052:208:::0;:::o;2026:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;7844:200::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7973:5:0::1;7939:25;:31;7965:4;7939:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;8030:5;7996:40;;8024:4;7996:40;;;;;;;;;;;;7844:200:::0;;:::o;941:32::-;;;;;;;;;;;;;:::o;7503:182::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7619:8:0::1;7588:19;:28;7608:7;7588:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7659:7;7643:34;;;7668:8;7643:34;;;;;;:::i;:::-;;;;;;;;7503:182:::0;;:::o;7117:378::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7253:13:0::1;7234:16;:32;;;;7296:13;7277:16;:32;;;;7333:7;7320:10;:20;;;;7405:10;;7386:16;;7367;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;7351:13;:64;;;;7451:2;7434:13;;:19;;7426:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;7117:378:::0;;;:::o;6152:215::-;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6274:4:0::1;6268;6264:1;6248:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;6247:31;;;;:::i;:::-;6237:6;:41;;6229:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;6352:6;6342;:17;;;;:::i;:::-;6330:9;:29;;;;6152:215:::0;:::o;1201:39::-;;;;;;;;;;;;;:::o;496:35::-;;;;:::o;5513:385::-;5594:4;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5651:6:0::1;5647:1;5631:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5618:9;:39;;5610:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;5768:4;5763:2;5747:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;5734:9;:38;;5726:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;5859:9;5838:18;:30;;;;5886:4;5879:11;;5513:385:::0;;;:::o;1249:27::-;;;;:::o;5894:151:2:-;5983:7;6010:11;:18;6022:5;6010:18;;;;;;;;;;;;;;;:27;6029:7;6010:27;;;;;;;;;;;;;;;;6003:34;;5894:151;;;;:::o;538:33:0:-;;;;:::o;5304:134::-;5364:4;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5403:5:0::1;5380:20;;:28;;;;;;;;;;;;;;;;;;5426:4;5419:11;;5304:134:::0;:::o;1320:30::-;;;;:::o;1884:244:1:-;1161:12;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1993:1:::1;1973:22;;:8;:22;;::::0;1965:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2083:8;2054:38;;2075:6;;;;;;;;;;;2054:38;;;;;;;;;;;;2112:8;2103:6;;:17;;;;;;;;;;;;;;;;;;1884:244:::0;:::o;1467:31:0:-;;;;:::o;578:24::-;;;;:::o;15962:1015::-;16046:4;1161:12:1;:10;:12::i;:::-;1151:22;;:6;;;;;;;;;;;:22;;;1143:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16111:19:0::1;;16088:20;;:42;;;;:::i;:::-;16070:15;:60;16062:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;16198:4;16187:7;:15;;16179:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16283:15;16260:20;:38;;;;16361:28;16392:4;:14;;;16407:13;;;;;;;;;;;16392:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16361:60;;16479:20;16502:44;16540:5;16502:33;16527:7;16502:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;16479:67;;16674:1;16659:12;:16;16655:109;;;16691:61;16707:13;;;;;;;;;;;16730:6;16739:12;16691:15;:61::i;:::-;16655:109;16847:19;16884:25;:40;16910:13;;;;;;;;;;;16884:40;;;;;;;;;;;;;;;;;;;;;;;;;16847:78;;16936:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16965:4;16958:11;;;;;15962:1015:::0;;;:::o;95:98:1:-;148:7;175:10;168:17;;95:98;:::o;11514:380:2:-;11667:1;11650:19;;:5;:19;;;11642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11748:1;11729:21;;:7;:21;;;11721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11832:6;11802:11;:18;11814:5;11802:18;;;;;;;;;;;;;;;:27;11821:7;11802:27;;;;;;;;;;;;;;;:36;;;;11870:7;11854:32;;11863:5;11854:32;;;11879:6;11854:32;;;;;;:::i;:::-;;;;;;;;11514:380;;;:::o;8630:4052:0:-;8778:1;8762:18;;:4;:18;;;8754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8855:1;8841:16;;:2;:16;;;8833:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8932:1;8922:6;:11;8919:92;;8950:28;8966:4;8972:2;8976:1;8950:15;:28::i;:::-;8993:7;;8919:92;9034:14;;;;;;;;;;;9031:1773;;;9094:7;:5;:7::i;:::-;9086:15;;:4;:15;;;;:49;;;;;9128:7;:5;:7::i;:::-;9122:13;;:2;:13;;;;9086:49;:86;;;;;9170:1;9156:16;;:2;:16;;;;9086:86;:128;;;;;9207:6;9193:21;;:2;:21;;;;9086:128;:158;;;;;9236:8;;;;;;;;;;;9235:9;9086:158;9064:1729;;;9282:13;;;;;;;;;;;9278:148;;9327:19;:25;9347:4;9327:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9356:19;:23;9376:2;9356:23;;;;;;;;;;;;;;;;;;;;;;;;;9327:52;9319:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9278:148;9584:20;;;;;;;;;;;9580:423;;;9638:7;:5;:7::i;:::-;9632:13;;:2;:13;;;;:47;;;;;9663:15;9649:30;;:2;:30;;;;9632:47;:79;;;;;9697:13;;;;;;;;;;;9683:28;;:2;:28;;;;9632:79;9628:356;;;9789:12;9747:28;:39;9776:9;9747:39;;;;;;;;;;;;;;;;:54;9739:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;9948:12;9906:28;:39;9935:9;9906:39;;;;;;;;;;;;;;;:54;;;;9628:356;9580:423;10073:31;:35;10105:2;10073:35;;;;;;;;;;;;;;;;;;;;;;;;;10068:710;;10155:20;;10145:6;:30;;10137:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10294:9;;10277:13;10287:2;10277:9;:13::i;:::-;10268:6;:22;;;;:::i;:::-;:35;;10260:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10068:710;;;10422:31;:37;10454:4;10422:37;;;;;;;;;;;;;;;;;;;;;;;;;10417:361;;10506:20;;10496:6;:30;;10488:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;10417:361;;;10632:31;:35;10664:2;10632:35;;;;;;;;;;;;;;;;;;;;;;;;;10628:150;;10725:9;;10708:13;10718:2;10708:9;:13::i;:::-;10699:6;:22;;;;:::i;:::-;:35;;10691:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10628:150;10417:361;10068:710;9064:1729;9031:1773;10824:28;10855:24;10873:4;10855:9;:24::i;:::-;10824:55;;10900:12;10939:18;;10915:20;:42;;10900:57;;10988:7;:35;;;;;11012:11;;;;;;;;;;;10988:35;:61;;;;;11041:8;;;;;;;;;;;11040:9;10988:61;:104;;;;;11067:19;:25;11087:4;11067:25;;;;;;;;;;;;;;;;;;;;;;;;;11066:26;10988:104;:145;;;;;11110:19;:23;11130:2;11110:23;;;;;;;;;;;;;;;;;;;;;;;;;11109:24;10988:145;10970:289;;;11171:4;11160:8;;:15;;;;;;;;;;;;;;;;;;11204:10;:8;:10::i;:::-;11242:5;11231:8;;:16;;;;;;;;;;;;;;;;;;10970:289;11283:8;;;;;;;;;;;11282:9;:26;;;;;11295:13;;;;;;;;;;;11282:26;11279:85;;;11324:28;11343:4;11349:2;11324:18;:28::i;:::-;;11279:85;11376:12;11392:8;;;;;;;;;;;11391:9;11376:24;;11501:19;:25;11521:4;11501:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11530:19;:23;11550:2;11530:23;;;;;;;;;;;;;;;;;;;;;;;;;11501:52;11498:99;;;11580:5;11570:15;;11498:99;11617:12;11721:7;11718:911;;;11788:1;11772:13;;:17;11768:686;;;11816:34;11846:3;11816:25;11827:13;;11816:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;11809:41;;11917:13;;11898:16;;11891:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;11869:18;;:61;;;;;;;:::i;:::-;;;;;;;;11985:13;;11972:10;;11965:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;11949:12;;:49;;;;;;;:::i;:::-;;;;;;;;12065:13;;12046:16;;12039:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12017:18;;:61;;;;;;;:::i;:::-;;;;;;;;11768:686;;;12154:1;12139:12;;:16;12136:318;;;12183:33;12212:3;12183:24;12194:12;;12183:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;12176:40;;12282:12;;12264:15;;12257:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12235:18;;:59;;;;;;;:::i;:::-;;;;;;;;12348:12;;12336:9;;12329:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;12313:12;;:47;;;;;;;:::i;:::-;;;;;;;;12426:12;;12408:15;;12401:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12379:18;;:59;;;;;;;:::i;:::-;;;;;;;;12136:318;11768:686;12492:1;12485:4;:8;12482:93;;;12517:42;12533:4;12547;12554;12517:15;:42::i;:::-;12482:93;12613:4;12603:14;;;;;:::i;:::-;;;11718:911;12641:33;12657:4;12663:2;12667:6;12641:15;:33::i;:::-;8743:3939;;;;8630:4052;;;;:::o;1228:192:3:-;1314:7;1347:1;1342;:6;;1350:12;1334:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1374:9;1390:1;1386;:5;;;;:::i;:::-;1374:17;;1411:1;1404:8;;;1228:192;;;;;:::o;325:181::-;383:7;403:9;419:1;415;:5;;;;:::i;:::-;403:17;;444:1;439;:6;;431:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;497:1;490:8;;;325:181;;;;:::o;1679:471::-;1737:7;1987:1;1982;:6;1978:47;;2012:1;2005:8;;;;1978:47;2037:9;2053:1;2049;:5;;;;:::i;:::-;2037:17;;2082:1;2077;2073;:5;;;;:::i;:::-;:10;2065:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2141:1;2134:8;;;1679:471;;;;;:::o;2626:132::-;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2704:46;;2626:132;;;;:::o;9087:573:2:-;9245:1;9227:20;;:6;:20;;;9219:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9329:1;9308:23;;:9;:23;;;9300:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9384:47;9405:6;9413:9;9424:6;9384:20;:47::i;:::-;9464:71;9486:6;9464:71;;;;;;;;;;;;;;;;;:9;:17;9474:6;9464:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9444:9;:17;9454:6;9444:17;;;;;;;;;;;;;;;:91;;;;9569:32;9594:6;9569:9;:20;9579:9;9569:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9546:9;:20;9556:9;9546:20;;;;;;;;;;;;;;;:55;;;;9634:9;9617:35;;9626:6;9617:35;;;9645:6;9617:35;;;;;;:::i;:::-;;;;;;;;9087:573;;;:::o;13840:1054:0:-;13879:23;13905:24;13923:4;13905:9;:24::i;:::-;13879:50;;13940:25;14010:12;;13989:18;;13968;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;13940:82;;14033:12;14088:1;14069:15;:20;:46;;;;14114:1;14093:17;:22;14069:46;14066:60;;;14118:7;;;;;14066:60;14180:2;14159:18;;:23;;;;:::i;:::-;14141:15;:41;14138:111;;;14235:2;14214:18;;:23;;;;:::i;:::-;14196:41;;14138:111;14318:23;14403:1;14383:17;14362:18;;14344:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14318:86;;14415:26;14444:36;14464:15;14444;:19;;:36;;;;:::i;:::-;14415:65;;14501:25;14529:21;14501:49;;14563:36;14580:18;14563:16;:36::i;:::-;14621:18;14642:44;14668:17;14642:21;:25;;:44;;;;:::i;:::-;14621:65;;14728:1;14707:18;:22;;;;14761:1;14740:18;:22;;;;14788:1;14773:12;:16;;;;14831:15;;;;;;;;;;;14823:29;;14860:21;14823:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14810:76;;;;;13868:1026;;;;;;;13840:1054;:::o;15365:589::-;15437:4;15489:23;15515:4;:14;;;15538:4;15515:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15489:55;;15608:26;15637:48;15679:5;15637:37;15657:16;;15637:15;:19;;:37;;;;:::i;:::-;:41;;:48;;;;:::i;:::-;15608:77;;15769:19;15806:25;:40;15832:13;;;;;;;;;;;15806:40;;;;;;;;;;;;;;;;;;;;;;;;;15769:78;;15858:4;:17;;;15876:4;15882:2;15886:18;15858:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15932:4;15925:11;;;;;15365:589;;;;:::o;3254:278:3:-;3340:7;3372:1;3368;:5;3375:12;3360:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3399:9;3415:1;3411;:5;;;;:::i;:::-;3399:17;;3523:1;3516:8;;;3254:278;;;;;:::o;12497:125:2:-;;;;:::o;789:136:3:-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;;789:136;;;;:::o;12690:601:0:-;12818:21;12856:1;12842:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12818:40;;12887:4;12869;12874:1;12869:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12913:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12903:4;12908:1;12903:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;12948:62;12965:4;12980:15;12998:11;12948:8;:62::i;:::-;13049:15;:66;;;13130:11;13156:1;13200:4;13227;13247:15;13049:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12745:546;12690:601;:::o;7:99:5:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:468::-;7798:6;7806;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;8108:2;8134:50;8176:7;8167:6;8156:9;8152:22;8134:50;:::i;:::-;8124:60;;8079:115;7733:468;;;;;:::o;8207:619::-;8284:6;8292;8300;8349:2;8337:9;8328:7;8324:23;8320:32;8317:119;;;8355:79;;:::i;:::-;8317:119;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8207:619;;;;;:::o;8832:323::-;8888:6;8937:2;8925:9;8916:7;8912:23;8908:32;8905:119;;;8943:79;;:::i;:::-;8905:119;9063:1;9088:50;9130:7;9121:6;9110:9;9106:22;9088:50;:::i;:::-;9078:60;;9034:114;8832:323;;;;:::o;9161:474::-;9229:6;9237;9286:2;9274:9;9265:7;9261:23;9257:32;9254:119;;;9292:79;;:::i;:::-;9254:119;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9161:474;;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:238::-;13294:34;13290:1;13282:6;13278:14;13271:58;13363:21;13358:2;13350:6;13346:15;13339:46;13154:238;:::o;13398:366::-;13540:3;13561:67;13625:2;13620:3;13561:67;:::i;:::-;13554:74;;13637:93;13726:3;13637:93;:::i;:::-;13755:2;13750:3;13746:12;13739:19;;13398:366;;;:::o;13770:419::-;13936:4;13974:2;13963:9;13959:18;13951:26;;14023:9;14017:4;14013:20;14009:1;13998:9;13994:17;13987:47;14051:131;14177:4;14051:131;:::i;:::-;14043:139;;13770:419;;;:::o;14195:235::-;14335:34;14331:1;14323:6;14319:14;14312:58;14404:18;14399:2;14391:6;14387:15;14380:43;14195:235;:::o;14436:366::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:419::-;14974:4;15012:2;15001:9;14997:18;14989:26;;15061:9;15055:4;15051:20;15047:1;15036:9;15032:17;15025:47;15089:131;15215:4;15089:131;:::i;:::-;15081:139;;14808:419;;;:::o;15233:191::-;15273:3;15292:20;15310:1;15292:20;:::i;:::-;15287:25;;15326:20;15344:1;15326:20;:::i;:::-;15321:25;;15369:1;15366;15362:9;15355:16;;15390:3;15387:1;15384:10;15381:36;;;15397:18;;:::i;:::-;15381:36;15233:191;;;;:::o;15430:179::-;15570:31;15566:1;15558:6;15554:14;15547:55;15430:179;:::o;15615:366::-;15757:3;15778:67;15842:2;15837:3;15778:67;:::i;:::-;15771:74;;15854:93;15943:3;15854:93;:::i;:::-;15972:2;15967:3;15963:12;15956:19;;15615:366;;;:::o;15987:419::-;16153:4;16191:2;16180:9;16176:18;16168:26;;16240:9;16234:4;16230:20;16226:1;16215:9;16211:17;16204:47;16268:131;16394:4;16268:131;:::i;:::-;16260:139;;15987:419;;;:::o;16412:179::-;16552:31;16548:1;16540:6;16536:14;16529:55;16412:179;:::o;16597:366::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16597:366;;;:::o;16969:419::-;17135:4;17173:2;17162:9;17158:18;17150:26;;17222:9;17216:4;17212:20;17208:1;17197:9;17193:17;17186:47;17250:131;17376:4;17250:131;:::i;:::-;17242:139;;16969:419;;;:::o;17394:223::-;17534:34;17530:1;17522:6;17518:14;17511:58;17603:6;17598:2;17590:6;17586:15;17579:31;17394:223;:::o;17623:366::-;17765:3;17786:67;17850:2;17845:3;17786:67;:::i;:::-;17779:74;;17862:93;17951:3;17862:93;:::i;:::-;17980:2;17975:3;17971:12;17964:19;;17623:366;;;:::o;17995:419::-;18161:4;18199:2;18188:9;18184:18;18176:26;;18248:9;18242:4;18238:20;18234:1;18223:9;18219:17;18212:47;18276:131;18402:4;18276:131;:::i;:::-;18268:139;;17995:419;;;:::o;18420:240::-;18560:34;18556:1;18548:6;18544:14;18537:58;18629:23;18624:2;18616:6;18612:15;18605:48;18420:240;:::o;18666:366::-;18808:3;18829:67;18893:2;18888:3;18829:67;:::i;:::-;18822:74;;18905:93;18994:3;18905:93;:::i;:::-;19023:2;19018:3;19014:12;19007:19;;18666:366;;;:::o;19038:419::-;19204:4;19242:2;19231:9;19227:18;19219:26;;19291:9;19285:4;19281:20;19277:1;19266:9;19262:17;19255:47;19319:131;19445:4;19319:131;:::i;:::-;19311:139;;19038:419;;;:::o;19463:237::-;19603:34;19599:1;19591:6;19587:14;19580:58;19672:20;19667:2;19659:6;19655:15;19648:45;19463:237;:::o;19706:366::-;19848:3;19869:67;19933:2;19928:3;19869:67;:::i;:::-;19862:74;;19945:93;20034:3;19945:93;:::i;:::-;20063:2;20058:3;20054:12;20047:19;;19706:366;;;:::o;20078:419::-;20244:4;20282:2;20271:9;20267:18;20259:26;;20331:9;20325:4;20321:20;20317:1;20306:9;20302:17;20295:47;20359:131;20485:4;20359:131;:::i;:::-;20351:139;;20078:419;;;:::o;20503:225::-;20643:34;20639:1;20631:6;20627:14;20620:58;20712:8;20707:2;20699:6;20695:15;20688:33;20503:225;:::o;20734:366::-;20876:3;20897:67;20961:2;20956:3;20897:67;:::i;:::-;20890:74;;20973:93;21062:3;20973:93;:::i;:::-;21091:2;21086:3;21082:12;21075:19;;20734:366;;;:::o;21106:419::-;21272:4;21310:2;21299:9;21295:18;21287:26;;21359:9;21353:4;21349:20;21345:1;21334:9;21330:17;21323:47;21387:131;21513:4;21387:131;:::i;:::-;21379:139;;21106:419;;;:::o;21531:182::-;21671:34;21667:1;21659:6;21655:14;21648:58;21531:182;:::o;21719:366::-;21861:3;21882:67;21946:2;21941:3;21882:67;:::i;:::-;21875:74;;21958:93;22047:3;21958:93;:::i;:::-;22076:2;22071:3;22067:12;22060:19;;21719:366;;;:::o;22091:419::-;22257:4;22295:2;22284:9;22280:18;22272:26;;22344:9;22338:4;22334:20;22330:1;22319:9;22315:17;22308:47;22372:131;22498:4;22372:131;:::i;:::-;22364:139;;22091:419;;;:::o;22516:229::-;22656:34;22652:1;22644:6;22640:14;22633:58;22725:12;22720:2;22712:6;22708:15;22701:37;22516:229;:::o;22751:366::-;22893:3;22914:67;22978:2;22973:3;22914:67;:::i;:::-;22907:74;;22990:93;23079:3;22990:93;:::i;:::-;23108:2;23103:3;23099:12;23092:19;;22751:366;;;:::o;23123:419::-;23289:4;23327:2;23316:9;23312:18;23304:26;;23376:9;23370:4;23366:20;23362:1;23351:9;23347:17;23340:47;23404:131;23530:4;23404:131;:::i;:::-;23396:139;;23123:419;;;:::o;23548:143::-;23605:5;23636:6;23630:13;23621:22;;23652:33;23679:5;23652:33;:::i;:::-;23548:143;;;;:::o;23697:351::-;23767:6;23816:2;23804:9;23795:7;23791:23;23787:32;23784:119;;;23822:79;;:::i;:::-;23784:119;23942:1;23967:64;24023:7;24014:6;24003:9;23999:22;23967:64;:::i;:::-;23957:74;;23913:128;23697:351;;;;:::o;24054:223::-;24194:34;24190:1;24182:6;24178:14;24171:58;24263:6;24258:2;24250:6;24246:15;24239:31;24054:223;:::o;24283:366::-;24425:3;24446:67;24510:2;24505:3;24446:67;:::i;:::-;24439:74;;24522:93;24611:3;24522:93;:::i;:::-;24640:2;24635:3;24631:12;24624:19;;24283:366;;;:::o;24655:419::-;24821:4;24859:2;24848:9;24844:18;24836:26;;24908:9;24902:4;24898:20;24894:1;24883:9;24879:17;24872:47;24936:131;25062:4;24936:131;:::i;:::-;24928:139;;24655:419;;;:::o;25080:221::-;25220:34;25216:1;25208:6;25204:14;25197:58;25289:4;25284:2;25276:6;25272:15;25265:29;25080:221;:::o;25307:366::-;25449:3;25470:67;25534:2;25529:3;25470:67;:::i;:::-;25463:74;;25546:93;25635:3;25546:93;:::i;:::-;25664:2;25659:3;25655:12;25648:19;;25307:366;;;:::o;25679:419::-;25845:4;25883:2;25872:9;25868:18;25860:26;;25932:9;25926:4;25922:20;25918:1;25907:9;25903:17;25896:47;25960:131;26086:4;25960:131;:::i;:::-;25952:139;;25679:419;;;:::o;26104:224::-;26244:34;26240:1;26232:6;26228:14;26221:58;26313:7;26308:2;26300:6;26296:15;26289:32;26104:224;:::o;26334:366::-;26476:3;26497:67;26561:2;26556:3;26497:67;:::i;:::-;26490:74;;26573:93;26662:3;26573:93;:::i;:::-;26691:2;26686:3;26682:12;26675:19;;26334:366;;;:::o;26706:419::-;26872:4;26910:2;26899:9;26895:18;26887:26;;26959:9;26953:4;26949:20;26945:1;26934:9;26930:17;26923:47;26987:131;27113:4;26987:131;:::i;:::-;26979:139;;26706:419;;;:::o;27131:222::-;27271:34;27267:1;27259:6;27255:14;27248:58;27340:5;27335:2;27327:6;27323:15;27316:30;27131:222;:::o;27359:366::-;27501:3;27522:67;27586:2;27581:3;27522:67;:::i;:::-;27515:74;;27598:93;27687:3;27598:93;:::i;:::-;27716:2;27711:3;27707:12;27700:19;;27359:366;;;:::o;27731:419::-;27897:4;27935:2;27924:9;27920:18;27912:26;;27984:9;27978:4;27974:20;27970:1;27959:9;27955:17;27948:47;28012:131;28138:4;28012:131;:::i;:::-;28004:139;;27731:419;;;:::o;28156:172::-;28296:24;28292:1;28284:6;28280:14;28273:48;28156:172;:::o;28334:366::-;28476:3;28497:67;28561:2;28556:3;28497:67;:::i;:::-;28490:74;;28573:93;28662:3;28573:93;:::i;:::-;28691:2;28686:3;28682:12;28675:19;;28334:366;;;:::o;28706:419::-;28872:4;28910:2;28899:9;28895:18;28887:26;;28959:9;28953:4;28949:20;28945:1;28934:9;28930:17;28923:47;28987:131;29113:4;28987:131;:::i;:::-;28979:139;;28706:419;;;:::o;29131:297::-;29271:34;29267:1;29259:6;29255:14;29248:58;29340:34;29335:2;29327:6;29323:15;29316:59;29409:11;29404:2;29396:6;29392:15;29385:36;29131:297;:::o;29434:366::-;29576:3;29597:67;29661:2;29656:3;29597:67;:::i;:::-;29590:74;;29673:93;29762:3;29673:93;:::i;:::-;29791:2;29786:3;29782:12;29775:19;;29434:366;;;:::o;29806:419::-;29972:4;30010:2;29999:9;29995:18;29987:26;;30059:9;30053:4;30049:20;30045:1;30034:9;30030:17;30023:47;30087:131;30213:4;30087:131;:::i;:::-;30079:139;;29806:419;;;:::o;30231:240::-;30371:34;30367:1;30359:6;30355:14;30348:58;30440:23;30435:2;30427:6;30423:15;30416:48;30231:240;:::o;30477:366::-;30619:3;30640:67;30704:2;30699:3;30640:67;:::i;:::-;30633:74;;30716:93;30805:3;30716:93;:::i;:::-;30834:2;30829:3;30825:12;30818:19;;30477:366;;;:::o;30849:419::-;31015:4;31053:2;31042:9;31038:18;31030:26;;31102:9;31096:4;31092:20;31088:1;31077:9;31073:17;31066:47;31130:131;31256:4;31130:131;:::i;:::-;31122:139;;30849:419;;;:::o;31274:169::-;31414:21;31410:1;31402:6;31398:14;31391:45;31274:169;:::o;31449:366::-;31591:3;31612:67;31676:2;31671:3;31612:67;:::i;:::-;31605:74;;31688:93;31777:3;31688:93;:::i;:::-;31806:2;31801:3;31797:12;31790:19;;31449:366;;;:::o;31821:419::-;31987:4;32025:2;32014:9;32010:18;32002:26;;32074:9;32068:4;32064:20;32060:1;32049:9;32045:17;32038:47;32102:131;32228:4;32102:131;:::i;:::-;32094:139;;31821:419;;;:::o;32246:241::-;32386:34;32382:1;32374:6;32370:14;32363:58;32455:24;32450:2;32442:6;32438:15;32431:49;32246:241;:::o;32493:366::-;32635:3;32656:67;32720:2;32715:3;32656:67;:::i;:::-;32649:74;;32732:93;32821:3;32732:93;:::i;:::-;32850:2;32845:3;32841:12;32834:19;;32493:366;;;:::o;32865:419::-;33031:4;33069:2;33058:9;33054:18;33046:26;;33118:9;33112:4;33108:20;33104:1;33093:9;33089:17;33082:47;33146:131;33272:4;33146:131;:::i;:::-;33138:139;;32865:419;;;:::o;33290:194::-;33330:4;33350:20;33368:1;33350:20;:::i;:::-;33345:25;;33384:20;33402:1;33384:20;:::i;:::-;33379:25;;33428:1;33425;33421:9;33413:17;;33452:1;33446:4;33443:11;33440:37;;;33457:18;;:::i;:::-;33440:37;33290:194;;;;:::o;33490:177::-;33630:29;33626:1;33618:6;33614:14;33607:53;33490:177;:::o;33673:366::-;33815:3;33836:67;33900:2;33895:3;33836:67;:::i;:::-;33829:74;;33912:93;34001:3;33912:93;:::i;:::-;34030:2;34025:3;34021:12;34014:19;;33673:366;;;:::o;34045:419::-;34211:4;34249:2;34238:9;34234:18;34226:26;;34298:9;34292:4;34288:20;34284:1;34273:9;34269:17;34262:47;34326:131;34452:4;34326:131;:::i;:::-;34318:139;;34045:419;;;:::o;34470:220::-;34610:34;34606:1;34598:6;34594:14;34587:58;34679:3;34674:2;34666:6;34662:15;34655:28;34470:220;:::o;34696:366::-;34838:3;34859:67;34923:2;34918:3;34859:67;:::i;:::-;34852:74;;34935:93;35024:3;34935:93;:::i;:::-;35053:2;35048:3;35044:12;35037:19;;34696:366;;;:::o;35068:419::-;35234:4;35272:2;35261:9;35257:18;35249:26;;35321:9;35315:4;35311:20;35307:1;35296:9;35292:17;35285:47;35349:131;35475:4;35349:131;:::i;:::-;35341:139;;35068:419;;;:::o;35493:147::-;35594:11;35631:3;35616:18;;35493:147;;;;:::o;35646:114::-;;:::o;35766:398::-;35925:3;35946:83;36027:1;36022:3;35946:83;:::i;:::-;35939:90;;36038:93;36127:3;36038:93;:::i;:::-;36156:1;36151:3;36147:11;36140:18;;35766:398;;;:::o;36170:379::-;36354:3;36376:147;36519:3;36376:147;:::i;:::-;36369:154;;36540:3;36533:10;;36170:379;;;:::o;36555:442::-;36704:4;36742:2;36731:9;36727:18;36719:26;;36755:71;36823:1;36812:9;36808:17;36799:6;36755:71;:::i;:::-;36836:72;36904:2;36893:9;36889:18;36880:6;36836:72;:::i;:::-;36918;36986:2;36975:9;36971:18;36962:6;36918:72;:::i;:::-;36555:442;;;;;;:::o;37003:137::-;37057:5;37088:6;37082:13;37073:22;;37104:30;37128:5;37104:30;:::i;:::-;37003:137;;;;:::o;37146:345::-;37213:6;37262:2;37250:9;37241:7;37237:23;37233:32;37230:119;;;37268:79;;:::i;:::-;37230:119;37388:1;37413:61;37466:7;37457:6;37446:9;37442:22;37413:61;:::i;:::-;37403:71;;37359:125;37146:345;;;;:::o;37497:180::-;37545:77;37542:1;37535:88;37642:4;37639:1;37632:15;37666:4;37663:1;37656:15;37683:180;37731:77;37728:1;37721:88;37828:4;37825:1;37818:15;37852:4;37849:1;37842:15;37869:143;37926:5;37957:6;37951:13;37942:22;;37973:33;38000:5;37973:33;:::i;:::-;37869:143;;;;:::o;38018:351::-;38088:6;38137:2;38125:9;38116:7;38112:23;38108:32;38105:119;;;38143:79;;:::i;:::-;38105:119;38263:1;38288:64;38344:7;38335:6;38324:9;38320:22;38288:64;:::i;:::-;38278:74;;38234:128;38018:351;;;;:::o;38375:85::-;38420:7;38449:5;38438:16;;38375:85;;;:::o;38466:158::-;38524:9;38557:61;38575:42;38584:32;38610:5;38584:32;:::i;:::-;38575:42;:::i;:::-;38557:61;:::i;:::-;38544:74;;38466:158;;;:::o;38630:147::-;38725:45;38764:5;38725:45;:::i;:::-;38720:3;38713:58;38630:147;;:::o;38783:114::-;38850:6;38884:5;38878:12;38868:22;;38783:114;;;:::o;38903:184::-;39002:11;39036:6;39031:3;39024:19;39076:4;39071:3;39067:14;39052:29;;38903:184;;;;:::o;39093:132::-;39160:4;39183:3;39175:11;;39213:4;39208:3;39204:14;39196:22;;39093:132;;;:::o;39231:108::-;39308:24;39326:5;39308:24;:::i;:::-;39303:3;39296:37;39231:108;;:::o;39345:179::-;39414:10;39435:46;39477:3;39469:6;39435:46;:::i;:::-;39513:4;39508:3;39504:14;39490:28;;39345:179;;;;:::o;39530:113::-;39600:4;39632;39627:3;39623:14;39615:22;;39530:113;;;:::o;39679:732::-;39798:3;39827:54;39875:5;39827:54;:::i;:::-;39897:86;39976:6;39971:3;39897:86;:::i;:::-;39890:93;;40007:56;40057:5;40007:56;:::i;:::-;40086:7;40117:1;40102:284;40127:6;40124:1;40121:13;40102:284;;;40203:6;40197:13;40230:63;40289:3;40274:13;40230:63;:::i;:::-;40223:70;;40316:60;40369:6;40316:60;:::i;:::-;40306:70;;40162:224;40149:1;40146;40142:9;40137:14;;40102:284;;;40106:14;40402:3;40395:10;;39803:608;;;39679:732;;;;:::o;40417:831::-;40680:4;40718:3;40707:9;40703:19;40695:27;;40732:71;40800:1;40789:9;40785:17;40776:6;40732:71;:::i;:::-;40813:80;40889:2;40878:9;40874:18;40865:6;40813:80;:::i;:::-;40940:9;40934:4;40930:20;40925:2;40914:9;40910:18;40903:48;40968:108;41071:4;41062:6;40968:108;:::i;:::-;40960:116;;41086:72;41154:2;41143:9;41139:18;41130:6;41086:72;:::i;:::-;41168:73;41236:3;41225:9;41221:19;41212:6;41168:73;:::i;:::-;40417:831;;;;;;;;:::o

Swarm Source

ipfs://3a6800627b74a2c09fb4e7c45348c4faae19fea5873e1676e6240d99e747c1b4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.