ETH Price: $3,236.69 (+0.47%)
Gas: 3.08 Gwei
 

Overview

Max Total Supply

5,000 LAVA

Holders

57

Total Transfers

-

Market

Price

$0.34 @ 0.000105 ETH

Onchain Market Cap

$1,695.49

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

LAVA is a perpetual-liquidity-generation protocol that automatically distributes the liquidity among staking participants.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LAVA

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-27
*/

// SPDX-License-Identifier: MIT
//
//           (   (( . : (    .)   ) :  )                              
//                (   ( :  .  :    :  )  ))                              
//                 ( ( ( (  .  :  . . ) )                                
//                  ( ( : :  :  )   )  )                                 
//                   ( :(   .   .  ) .'                                  
//                    '. :(   :    )                                     
//                      (   :  . )  )                                    
//                       ')   :   #@##                                   
//                      #',### " #@  #@     $LAVA
//                     #/ @'#~@#~/\   #     A Decentralized Liquidity Distribution 
//                   ##  @@# @##@  `..@,    Protocol Inside The Molten Ecosystem                               
//                 @#/  #@#   _##     `\                                 
//               @##;  `#~._.' ##@      \_          https://molten.finance                       
//             .-#/           @#@#@--,_,--\                              
//            / `@#@..,     .~###'         `~.                           
//          _/         `-.-' #@####@          \                          
//       __/     &^^       ^#^##~##&&&   %     \_                        
//      /       && ^^      @#^##@#%%#@&&&&  ^    \                       
//    ~/         &&&    ^^^   ^^   &&&  %%% ^^^   `~._                   
// .-'   ^^    %%%. &&   ___^     &&   && &&   ^^     \                  
///akg ^^^ ___&&& X & && |n|   ^ ___ %____&& . ^^^^^   `~.               
//         |M|       ---- .  ___.|n| /\___\  X                           
//                   |mm| X  |n|X    ||___|   

pragma solidity ^0.6.0;


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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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


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

        return c;
    }

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

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

        return c;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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;
    }

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

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

        return c;
    }

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

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


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

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

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

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

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

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

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

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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

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

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

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view 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
     *
     * - `to` 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @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 { }
}




// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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




// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    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);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;



interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


// Root file: contracts/Token.sol

pragma solidity 0.6.12;

contract LAVA is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public _burnPool = 0x0000000000000000000000000000000000000000;
    address private rewardStoreAddress;
    address private stakerAddress;

    uint256 private feeTLockPct;
    uint256 private feeTLockForRewardPct;
    uint256 private feeLPBurnPct;
    uint256 private minTokensBeforeSwap;
    uint256 private maxTokensPerTx;
    
    uint256 internal _totalSupply;
    uint256 internal _minimumSupply; 
    uint256 public _totalBurnedTokens;
    uint256 public _totalBurnedLpTokens;
    uint256 public _balanceOfLpTokens; 
    
    
    bool private inSwapAndLiquify;
    bool private swapAndLiquifyEnabled;
    bool private tradingEnable;

    event FeeTLockPctUpdated(uint256 feeTLockPct);
    event FeeTLockForRewardPctUpdated(uint256 feeTLockForRewardPct);
    event FeeLPBurnPctUpdated(uint256 feeLPBurnPct);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event MaxTokensPerTxUpdated(uint256 maxTokensPerTx);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event UpdateTradingEnable();
    event RewardStoreAddressUpdated(address indexed rewardStoreAddress);
    event StakerAddressUpdated(address indexed stakerAddress);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor(
        IUniswapV2Router02 _uniswapV2Router,
        uint256 _feeTLockPct,
        uint256 _feeTLockForRewardPct,
        uint256 _feeLPBurnPct,
        uint256 _minTokensBeforeSwap,
        uint256 _maxTokensPerTx,
        bool _swapAndLiquifyEnabled
    ) public ERC20("LAVA", "LAVA") {
        // mint tokens which will initially belong to deployer
        // deployer should go seed the pair with some initial liquidity
        _mint(msg.sender, 5000 * 10**18);
        

        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        updateFeeTLockPct(_feeTLockPct);
        updateFeeTLockForRewardPct(_feeTLockForRewardPct);
        updateFeeLPBurnPct(_feeLPBurnPct);
        updateMinTokensBeforeSwap(_minTokensBeforeSwap);
        updateMaxTokensPerTx(_maxTokensPerTx);
        updateSwapAndLiquifyEnabled(_swapAndLiquifyEnabled);
    }
    
    
    function minimumSupply() external view returns (uint256){ 
        return _minimumSupply;
    }

    
    /*
        override the internal _transfer function so that we can
        take the fee, and conditionally do the swap + liquditiy
    */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(rewardStoreAddress != address(0), 'LAVA: store address is not set yet.');
        require(stakerAddress != address(0), 'LAVA: staker address is not set yet.');
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        if(from != owner() && to != owner() && (from == uniswapV2Pair || to == uniswapV2Pair)) {
            require(tradingEnable, "LAVA: trading disabled yet");
            require(amount <= maxTokensPerTx, "LAVA: transfer amount exceeds limit");
        }
        
        if(from == stakerAddress || to == stakerAddress || from == rewardStoreAddress || to == rewardStoreAddress) {
            super._transfer(from, to, amount);
        } else {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
            if (
                overMinTokenBalance &&
                !inSwapAndLiquify &&
                msg.sender != uniswapV2Pair &&
                swapAndLiquifyEnabled
            ) {
                swapAndLiquify(contractTokenBalance);
            }
    
            // calculate the number of tokens to lock self
            uint256 tokensToLockSelf = calculateFee(
                amount,
                feeTLockPct
            );
            
            // calculate the number of tokens to lock for reward
            uint256 tokensToLockForReward = calculateFee(
                amount,
                feeTLockForRewardPct
            );
    
            uint256 tokensToTransfer = amount.sub(tokensToLockSelf).sub(tokensToLockForReward);
    
            super._transfer(from, address(this), tokensToLockSelf);
            super._transfer(from, rewardStoreAddress, tokensToLockForReward);
            super._transfer(from, to, tokensToTransfer);
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        
        uint256 lpBalance = IUniswapV2ERC20(uniswapV2Pair).balanceOf(address(this));
        // calculate the number of LP to burn
        uint256 lpToBurn = calculateFee(
            lpBalance,
            feeLPBurnPct
        );
        
        // calculate the number of LP to lock for reward
        uint256 lpToLockForReward = lpBalance.sub(lpToBurn);
        
        IUniswapV2ERC20(uniswapV2Pair).transfer(_burnPool, lpToBurn);
        IUniswapV2ERC20(uniswapV2Pair).transfer(rewardStoreAddress, lpToLockForReward);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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
            address(this),
            block.timestamp
        );
    }
    
    /*
        calculates a percentage of tokens to hold as the fee
    */
    function calculateFee(
        uint256 _amount,
        uint256 _feePercentage
    ) public pure returns (uint256 feeAmount) {
        feeAmount = _amount.mul(_feePercentage).div(100);
    }

    receive() external payable {}

    ///
    /// Ownership adjustments
    ///

    function updateFeeTLockPct(uint256 _feeTLockPct)
        public
        onlyOwner
    {
        require(_feeTLockPct >= 1 && _feeTLockPct <= 10, 'LAVA: feeTLockPct should be in 1 - 10');
        feeTLockPct = _feeTLockPct;
        emit FeeTLockPctUpdated(_feeTLockPct);
    }
    
    function updateFeeTLockForRewardPct(uint256 _feeTLockForRewardPct)
        public
        onlyOwner
    {
        require(_feeTLockForRewardPct >= 1 && _feeTLockForRewardPct <= 5, 'LAVA: feeTLockForRewardPct should be in 1 - 5');
        feeTLockForRewardPct = _feeTLockForRewardPct;
        emit FeeTLockForRewardPctUpdated(_feeTLockForRewardPct);
    }
    
    function updateFeeLPBurnPct(uint256 _feeLPBurnPct)
        public
        onlyOwner
    {
        require(_feeLPBurnPct >= 0 && _feeLPBurnPct <= 70, 'LAVA: feeLPBurnPct should be less than 70');
        feeLPBurnPct = _feeLPBurnPct;
        emit FeeLPBurnPctUpdated(_feeLPBurnPct);
    }
    
    function updateMinTokensBeforeSwap(uint256 _minTokensBeforeSwap)
        public
        onlyOwner
    {
        require(_minTokensBeforeSwap >= 25e18, 'LAVA: minTokensBeforeSwap should be greater than 25e18');
        minTokensBeforeSwap = _minTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(_minTokensBeforeSwap);
    }
    
    function updateMaxTokensPerTx(uint256 _maxTokensPerTx)
        public
        onlyOwner
    {
        require(_maxTokensPerTx >= 100e18, 'LAVA: maxTokensPerTx should be greater than 100e18');
        maxTokensPerTx = _maxTokensPerTx;
        emit MaxTokensPerTxUpdated(_maxTokensPerTx);
    }

    function updateTradingEnable() public onlyOwner {
        tradingEnable = true;
        emit UpdateTradingEnable();
    }

    function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function updateRewardStoreAddress(address _rewardStoreAddress) public onlyOwner {
        require(_rewardStoreAddress != address(0), 'LAVA: reward store address is zero address.');
        rewardStoreAddress = _rewardStoreAddress;
        emit RewardStoreAddressUpdated(_rewardStoreAddress);
    }
    
    function updateStakerAddress(address _stakerAddress) public onlyOwner {
        require(_stakerAddress != address(0), 'LAVA: staker address is zero address.');
        stakerAddress = _stakerAddress;
        emit StakerAddressUpdated(stakerAddress);
    }

    function burnLiq(address _token, address _to, uint256 _amount) public onlyOwner {
        require(_to != address(0),"LAVA: ERC20 transfer to zero address");
        
        IUniswapV2ERC20 token = IUniswapV2ERC20(_token);
        _totalBurnedLpTokens = _totalBurnedLpTokens.add(_amount);
        
        token.transfer(_burnPool, _amount);
    }
    
    function getFeeTLockPct() public view returns (uint256) {
        return feeTLockPct;
    }
    
    function getFeeTLockForRewardPct() public view returns (uint256) {
        return feeTLockForRewardPct;
    }
    
    function getFeeLPBurnPct() external view returns (uint256) {
        return feeLPBurnPct;
    }

    function getMaxTokensPerTx() external view returns (uint256) {
        return maxTokensPerTx;
    }
    
    function getMinTokensBeforeSwap() external view returns (uint256) {
        return minTokensBeforeSwap;
    }
    
    function getSwapAndLiquifyEnabled() external view returns (bool) {
        return swapAndLiquifyEnabled;
    }
    
    function getTradingEnable() external view returns (bool) {
        return tradingEnable;
    }
    
    function getRewardStoreAddress() external view returns (address) {
        return rewardStoreAddress;
    }
    
    function getUniswapV2Pair() external view returns (address) {
        return uniswapV2Pair;
    }
    
    function getUNIv2Balance(address wallet) external view returns (uint256) {
        return IUniswapV2ERC20(uniswapV2Pair).balanceOf(wallet);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_uniswapV2Router","type":"address"},{"internalType":"uint256","name":"_feeTLockPct","type":"uint256"},{"internalType":"uint256","name":"_feeTLockForRewardPct","type":"uint256"},{"internalType":"uint256","name":"_feeLPBurnPct","type":"uint256"},{"internalType":"uint256","name":"_minTokensBeforeSwap","type":"uint256"},{"internalType":"uint256","name":"_maxTokensPerTx","type":"uint256"},{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"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":false,"internalType":"uint256","name":"feeLPBurnPct","type":"uint256"}],"name":"FeeLPBurnPctUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeTLockForRewardPct","type":"uint256"}],"name":"FeeTLockForRewardPctUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeTLockPct","type":"uint256"}],"name":"FeeTLockPctUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTokensPerTx","type":"uint256"}],"name":"MaxTokensPerTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"rewardStoreAddress","type":"address"}],"name":"RewardStoreAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakerAddress","type":"address"}],"name":"StakerAddressUpdated","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"UpdateTradingEnable","type":"event"},{"inputs":[],"name":"_balanceOfLpTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurnedLpTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feePercentage","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"pure","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":"getFeeLPBurnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeTLockForRewardPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeTLockPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTokensPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getUNIv2Balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumSupply","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"_feeLPBurnPct","type":"uint256"}],"name":"updateFeeLPBurnPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeTLockForRewardPct","type":"uint256"}],"name":"updateFeeTLockForRewardPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeTLockPct","type":"uint256"}],"name":"updateFeeTLockPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensPerTx","type":"uint256"}],"name":"updateMaxTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokensBeforeSwap","type":"uint256"}],"name":"updateMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardStoreAddress","type":"address"}],"name":"updateRewardStoreAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakerAddress","type":"address"}],"name":"updateStakerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTradingEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005357600080fd5b506040516200534b3803806200534b833981810160405260e08110156200007957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050506040518060400160405280600481526020017f4c415641000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c4156410000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014a92919062001001565b5080600490805190602001906200016392919062001001565b506012600560006101000a81548160ff021916908360ff1602179055505050600062000194620004fa60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200024f3369010f0cf064dd592000006200050260201b60201c565b8673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029657600080fd5b505afa158015620002ab573d6000803e3d6000fd5b505050506040513d6020811015620002c257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033657600080fd5b505afa1580156200034b573d6000803e3d6000fd5b505050506040513d60208110156200036257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003dd57600080fd5b505af1158015620003f2573d6000803e3d6000fd5b505050506040513d60208110156200040957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508673ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506200049886620006e060201b60201c565b620004a9856200085e60201b60201c565b620004ba84620009dc60201b60201c565b620004cb8362000b5a60201b60201c565b620004dc8262000cd260201b60201c565b620004ed8162000e4a60201b60201c565b50505050505050620010a7565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620005ba6000838362000f7360201b60201c565b620005d68160025462000f7860201b620028771790919060201c565b60028190555062000634816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000f7860201b620028771790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b620006f0620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015620007c65750600a8111155b6200081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180620052cb6025913960400191505060405180910390fd5b806009819055507fad8ed08a97a6b3ca156f2239e741d5f254b933dde3747a350073652ca0cfcfde816040518082815260200191505060405180910390a150565b6200086e620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801562000944575060058111155b6200099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806200529e602d913960400191505060405180910390fd5b80600a819055507fafc056eeeef9bee9f1ab33a97663bfaba096cd137850836bac563af9dd6d0f75816040518082815260200191505060405180910390a150565b620009ec620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000aaf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811015801562000ac2575060468111155b62000b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180620052f06029913960400191505060405180910390fd5b80600b819055507f9f8bf9c9d7e2aa3229e30c8983cf38c1ba3a2d3cff9148a2ccd732ac8a0c44a8816040518082815260200191505060405180910390a150565b62000b6a620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68015af1d78b58c4000081101562000c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180620052686036913960400191505060405180910390fd5b80600c819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040518082815260200191505060405180910390a150565b62000ce2620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000da5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68056bc75e2d6310000081101562000e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180620053196032913960400191505060405180910390fd5b80600d819055507feadfff348482d77d5337dd0998187600666e4b8dbbb48bea99634c7f146cec6a816040518082815260200191505060405180910390a150565b62000e5a620004fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000f1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b505050565b60008082840190508381101562000ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200104457805160ff191683800117855562001075565b8280016001018555821562001075579182015b828111156200107457825182559160200191906001019062001057565b5b50905062001084919062001088565b5090565b5b80821115620010a357600081600090555060010162001089565b5090565b60805160601c60a05160601c6141566200111260003980610f4352806112e3528061216e5280612ccd5280612d225280612ffc52806135d752806136c252806137b1525080610f135280613ab55280613ba15280613bc85280613cd35280613cfa52506141566000f3fe6080604052600436106102555760003560e01c80637ede036d11610139578063a457c2d7116100b6578063ebd920f81161007a578063ebd920f814610cc6578063f2fde38b14610d01578063f51d4df514610d52578063f9db748414610d7d578063fe220fdb14610dce578063ff7c479014610e0f5761025c565b8063a457c2d714610acf578063a9059cbb14610b40578063b538a28814610bb1578063c3a5de1314610c16578063dd62ed3e14610c415761025c565b80638c093d3a116100fd5780638c093d3a1461096b5780638da5cb5b1461099657806391fe5a64146109d757806395d89b4114610a025780639f9a4e7f14610a925761025c565b80637ede036d14610896578063830a20ec146108c1578063857f22a3146108ec5780638af02e7f146109195780638b72bcf1146109305761025c565b806334e73122116101d2578063618263851161019657806361826385146106d8578063689dc62d146107295780636a91ccd0146107a45780636b214343146107df57806370a082311461081a578063715018a61461087f5761025c565b806334e7312214610577578063394680bd146105d057806339509351146105fb57806346a39b071461066c57806349bd5a5e146106975761025c565b80631abfa629116102195780631abfa629146103fb57806323b872dd1461043c57806328d2bc91146104cd5780632b4c8ec01461050e578063313ce567146105495761025c565b806306fdde0314610261578063095ea7b3146102f15780631157a414146103625780631694505e1461038f57806318160ddd146103d05761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610e3a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b657808201518184015260208101905061029b565b50505050905090810190601f1680156102e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102fd57600080fd5b5061034a6004803603604081101561031457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610edc565b60405180821515815260200191505060405180910390f35b34801561036e57600080fd5b50610377610efa565b60405180821515815260200191505060405180910390f35b34801561039b57600080fd5b506103a4610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103dc57600080fd5b506103e5610f35565b6040518082815260200191505060405180910390f35b34801561040757600080fd5b50610410610f3f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b506104b56004803603606081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f67565b60405180821515815260200191505060405180910390f35b3480156104d957600080fd5b506104e2611040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051a57600080fd5b506105476004803603602081101561053157600080fd5b8101908080359060200190929190505050611066565b005b34801561055557600080fd5b5061055e6111d3565b604051808260ff16815260200191505060405180910390f35b34801561058357600080fd5b506105ba6004803603604081101561059a57600080fd5b8101908080359060200190929190803590602001909291905050506111ea565b6040518082815260200191505060405180910390f35b3480156105dc57600080fd5b506105e561121a565b6040518082815260200191505060405180910390f35b34801561060757600080fd5b506106546004803603604081101561061e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611224565b60405180821515815260200191505060405180910390f35b34801561067857600080fd5b506106816112d7565b6040518082815260200191505060405180910390f35b3480156106a357600080fd5b506106ac6112e1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e457600080fd5b50610727600480360360208110156106fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611305565b005b34801561073557600080fd5b506107a26004803603606081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b005b3480156107b057600080fd5b506107dd600480360360208110156107c757600080fd5b8101908080359060200190929190505050611721565b005b3480156107eb57600080fd5b506108186004803603602081101561080257600080fd5b810190808035906020019092919050505061188e565b005b34801561082657600080fd5b506108696004803603602081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a00565b6040518082815260200191505060405180910390f35b34801561088b57600080fd5b50610894611a48565b005b3480156108a257600080fd5b506108ab611bd3565b6040518082815260200191505060405180910390f35b3480156108cd57600080fd5b506108d6611bdd565b6040518082815260200191505060405180910390f35b3480156108f857600080fd5b50610901611be7565b60405180821515815260200191505060405180910390f35b34801561092557600080fd5b5061092e611bfe565b005b34801561093c57600080fd5b506109696004803603602081101561095357600080fd5b8101908080359060200190929190505050611d11565b005b34801561097757600080fd5b50610980611e83565b6040518082815260200191505060405180910390f35b3480156109a257600080fd5b506109ab611e8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e357600080fd5b506109ec611eb7565b6040518082815260200191505060405180910390f35b348015610a0e57600080fd5b50610a17611ebd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a57578082015181840152602081019050610a3c565b50505050905090810190601f168015610a845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a9e57600080fd5b50610acd60048036036020811015610ab557600080fd5b81019080803515159060200190929190505050611f5f565b005b348015610adb57600080fd5b50610b2860048036036040811015610af257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061207f565b60405180821515815260200191505060405180910390f35b348015610b4c57600080fd5b50610b9960048036036040811015610b6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061214c565b60405180821515815260200191505060405180910390f35b348015610bbd57600080fd5b50610c0060048036036020811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061216a565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612235565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610cb060048036036040811015610c6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223f565b6040518082815260200191505060405180910390f35b348015610cd257600080fd5b50610cff60048036036020811015610ce957600080fd5b81019080803590602001909291905050506122c6565b005b348015610d0d57600080fd5b50610d5060048036036020811015610d2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612438565b005b348015610d5e57600080fd5b50610d67612648565b6040518082815260200191505060405180910390f35b348015610d8957600080fd5b50610dcc60048036036020811015610da057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061264e565b005b348015610dda57600080fd5b50610de3612847565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1b57600080fd5b50610e24612871565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ed25780601f10610ea757610100808354040283529160200191610ed2565b820191906000526020600020905b815481529060010190602001808311610eb557829003601f168201915b5050505050905090565b6000610ef0610ee96128ff565b8484612907565b6001905092915050565b6000601360029054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000610f74848484612afe565b61103584610f806128ff565b61103085604051806060016040528060288152602001613f4f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe66128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b612907565b600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61106e6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68015af1d78b58c40000811015611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613ef86036913960400191505060405180910390fd5b80600c819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040518082815260200191505060405180910390a150565b6000600560009054906101000a900460ff16905090565b6000611212606461120484866131c990919063ffffffff16565b61324f90919063ffffffff16565b905092915050565b6000600c54905090565b60006112cd6112316128ff565b846112c885600160006112426128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287790919063ffffffff16565b612907565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61130d6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613e3b602b913960400191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f13bcad7970cc1375d9214dce8bdc2b4d53f94d61415710e75914940bf6ece90260405160405180910390a250565b6114e46128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ed46024913960400191505060405180910390fd5b60008390506116468260115461287790919063ffffffff16565b6011819055508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116df57600080fd5b505af11580156116f3573d6000803e3d6000fd5b505050506040513d602081101561170957600080fd5b81019080805190602001909291905050505050505050565b6117296128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68056bc75e2d6310000081101561184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140846032913960400191505060405180910390fd5b80600d819055507feadfff348482d77d5337dd0998187600666e4b8dbbb48bea99634c7f146cec6a816040518082815260200191505060405180910390a150565b6118966128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561196a5750600a8111155b6119bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613fed6025913960400191505060405180910390fd5b806009819055507fad8ed08a97a6b3ca156f2239e741d5f254b933dde3747a350073652ca0cfcfde816040518082815260200191505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a506128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600f54905090565b6000600a54905090565b6000601360019054906101000a900460ff16905090565b611c066128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601360026101000a81548160ff0219169083151502179055507fd9e29040b496bb05e69c27b488557877261751ea846666743c06155088bca35d60405160405180910390a1565b611d196128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611ded575060058111155b611e42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613fc0602d913960400191505060405180910390fd5b80600a819055507fafc056eeeef9bee9f1ab33a97663bfaba096cd137850836bac563af9dd6d0f75816040518082815260200191505060405180910390a150565b6000600d54905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f555780601f10611f2a57610100808354040283529160200191611f55565b820191906000526020600020905b815481529060010190602001808311611f3857829003601f168201915b5050505050905090565b611f676128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b600061214261208c6128ff565b8461213d856040518060600160405280602581526020016140fc60259139600160006120b66128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b612907565b6001905092915050565b60006121606121596128ff565b8484612afe565b6001905092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d602081101561221d57600080fd5b81019080805190602001909291905050509050919050565b6000600954905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122ce6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600081101580156123a2575060468111155b6123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140376029913960400191505060405180910390fd5b80600b819055507f9f8bf9c9d7e2aa3229e30c8983cf38c1ba3a2d3cff9148a2ccd732ac8a0c44a8816040518082815260200191505060405180910390a150565b6124406128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612588576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e666026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6126566128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f776025913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7ae2df822d49503ed0a6d03f9b87cf506a506e8a9ec4fcd6629059916db3fc4f60405160405180910390a250565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6000808284019050838110156128f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806140606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e8c6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140b66023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f9c6024913960400191505060405180910390fd5b612c56611e8d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc45750612c94611e8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d7057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b15612e5457601360029054906101000a900460ff16612df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4c4156413a2074726164696e672064697361626c65642079657400000000000081525060200191505060405180910390fd5b600d54811115612e53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140d96023913960400191505060405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612efd5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612f555750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612fad5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612fc257612fbd838383613299565b613104565b6000612fcd30611a00565b90506000600c548210159050808015612ff35750601360009054906101000a900460ff16155b801561304b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156130635750601360019054906101000a900460ff165b15613072576130718261355a565b5b6000613080846009546111ea565b9050600061309085600a546111ea565b905060006130b9826130ab858961390a90919063ffffffff16565b61390a90919063ffffffff16565b90506130c6883085613299565b6130f388600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613299565b6130fe888883613299565b50505050505b505050565b60008383111582906131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317b578082015181840152602081019050613160565b50505050905090810190601f1680156131a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314156131dc5760009050613249565b60008284029050828482816131ed57fe5b0414613244576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613f2e6021913960400191505060405180910390fd5b809150505b92915050565b600061329183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613954565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140126025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613e186023913960400191505060405180910390fd5b6133b0838383613a1a565b61341b81604051806060016040528060268152602001613eae602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ae816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6001601360006101000a81548160ff021916908315150217905550600061358b60028361324f90919063ffffffff16565b905060006135a2828461390a90919063ffffffff16565b905060004790506135b283613a1f565b60006135c7824761390a90919063ffffffff16565b90506135d38382613ccd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561365c57600080fd5b505afa158015613670573d6000803e3d6000fd5b505050506040513d602081101561368657600080fd5b8101908080519060200190929190505050905060006136a782600b546111ea565b905060006136be828461390a90919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561377357600080fd5b505af1158015613787573d6000803e3d6000fd5b505050506040513d602081101561379d57600080fd5b8101908080519060200190929190505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561386257600080fd5b505af1158015613876573d6000803e3d6000fd5b505050506040513d602081101561388c57600080fd5b8101908080519060200190929190505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187858860405180848152602001838152602001828152602001935050505060405180910390a1505050505050506000601360006101000a81548160ff02191690831515021790555050565b600061394c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613109565b905092915050565b60008083118290613a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139c55780820151818401526020810190506139aa565b50505050905090810190601f1680156139f25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a0c57fe5b049050809150509392505050565b505050565b6060600267ffffffffffffffff81118015613a3957600080fd5b50604051908082528060200260200182016040528015613a685781602001602082028036833780820191505090505b5090503081600081518110613a7957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1957600080fd5b505afa158015613b2d573d6000803e3d6000fd5b505050506040513d6020811015613b4357600080fd5b810190808051906020019092919050505081600181518110613b6157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bc6307f000000000000000000000000000000000000000000000000000000000000000084612907565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c88578082015181840152602081019050613c6d565b505050509050019650505050505050600060405180830381600087803b158015613cb157600080fd5b505af1158015613cc5573d6000803e3d6000fd5b505050505050565b613cf8307f000000000000000000000000000000000000000000000000000000000000000084612907565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613dc057600080fd5b505af1158015613dd4573d6000803e3d6000fd5b50505050506040513d6060811015613deb57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734c4156413a207265776172642073746f72652061646472657373206973207a65726f20616464726573732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4156413a204552433230207472616e7366657220746f207a65726f20616464726573734c4156413a206d696e546f6b656e734265666f7265537761702073686f756c642062652067726561746572207468616e203235653138536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654c4156413a207374616b65722061646472657373206973207a65726f20616464726573732e4c4156413a207374616b65722061646472657373206973206e6f7420736574207965742e4c4156413a20666565544c6f636b466f725265776172645063742073686f756c6420626520696e2031202d20354c4156413a20666565544c6f636b5063742073686f756c6420626520696e2031202d20313045524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734c4156413a206665654c504275726e5063742073686f756c64206265206c657373207468616e20373045524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734c4156413a206d6178546f6b656e7350657254782073686f756c642062652067726561746572207468616e203130306531384c4156413a2073746f72652061646472657373206973206e6f7420736574207965742e4c4156413a207472616e7366657220616d6f756e742065786365656473206c696d697445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb4f3447d6c81563306f50b7a45e60dfba7bdfe6b94bfadf193bc885a0878bfe64736f6c634300060c00334c4156413a206d696e546f6b656e734265666f7265537761702073686f756c642062652067726561746572207468616e2032356531384c4156413a20666565544c6f636b466f725265776172645063742073686f756c6420626520696e2031202d20354c4156413a20666565544c6f636b5063742073686f756c6420626520696e2031202d2031304c4156413a206665654c504275726e5063742073686f756c64206265206c657373207468616e2037304c4156413a206d6178546f6b656e7350657254782073686f756c642062652067726561746572207468616e203130306531380000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000006c6b935b8bbd400000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102555760003560e01c80637ede036d11610139578063a457c2d7116100b6578063ebd920f81161007a578063ebd920f814610cc6578063f2fde38b14610d01578063f51d4df514610d52578063f9db748414610d7d578063fe220fdb14610dce578063ff7c479014610e0f5761025c565b8063a457c2d714610acf578063a9059cbb14610b40578063b538a28814610bb1578063c3a5de1314610c16578063dd62ed3e14610c415761025c565b80638c093d3a116100fd5780638c093d3a1461096b5780638da5cb5b1461099657806391fe5a64146109d757806395d89b4114610a025780639f9a4e7f14610a925761025c565b80637ede036d14610896578063830a20ec146108c1578063857f22a3146108ec5780638af02e7f146109195780638b72bcf1146109305761025c565b806334e73122116101d2578063618263851161019657806361826385146106d8578063689dc62d146107295780636a91ccd0146107a45780636b214343146107df57806370a082311461081a578063715018a61461087f5761025c565b806334e7312214610577578063394680bd146105d057806339509351146105fb57806346a39b071461066c57806349bd5a5e146106975761025c565b80631abfa629116102195780631abfa629146103fb57806323b872dd1461043c57806328d2bc91146104cd5780632b4c8ec01461050e578063313ce567146105495761025c565b806306fdde0314610261578063095ea7b3146102f15780631157a414146103625780631694505e1461038f57806318160ddd146103d05761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610e3a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b657808201518184015260208101905061029b565b50505050905090810190601f1680156102e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102fd57600080fd5b5061034a6004803603604081101561031457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610edc565b60405180821515815260200191505060405180910390f35b34801561036e57600080fd5b50610377610efa565b60405180821515815260200191505060405180910390f35b34801561039b57600080fd5b506103a4610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103dc57600080fd5b506103e5610f35565b6040518082815260200191505060405180910390f35b34801561040757600080fd5b50610410610f3f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b506104b56004803603606081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f67565b60405180821515815260200191505060405180910390f35b3480156104d957600080fd5b506104e2611040565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051a57600080fd5b506105476004803603602081101561053157600080fd5b8101908080359060200190929190505050611066565b005b34801561055557600080fd5b5061055e6111d3565b604051808260ff16815260200191505060405180910390f35b34801561058357600080fd5b506105ba6004803603604081101561059a57600080fd5b8101908080359060200190929190803590602001909291905050506111ea565b6040518082815260200191505060405180910390f35b3480156105dc57600080fd5b506105e561121a565b6040518082815260200191505060405180910390f35b34801561060757600080fd5b506106546004803603604081101561061e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611224565b60405180821515815260200191505060405180910390f35b34801561067857600080fd5b506106816112d7565b6040518082815260200191505060405180910390f35b3480156106a357600080fd5b506106ac6112e1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e457600080fd5b50610727600480360360208110156106fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611305565b005b34801561073557600080fd5b506107a26004803603606081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b005b3480156107b057600080fd5b506107dd600480360360208110156107c757600080fd5b8101908080359060200190929190505050611721565b005b3480156107eb57600080fd5b506108186004803603602081101561080257600080fd5b810190808035906020019092919050505061188e565b005b34801561082657600080fd5b506108696004803603602081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a00565b6040518082815260200191505060405180910390f35b34801561088b57600080fd5b50610894611a48565b005b3480156108a257600080fd5b506108ab611bd3565b6040518082815260200191505060405180910390f35b3480156108cd57600080fd5b506108d6611bdd565b6040518082815260200191505060405180910390f35b3480156108f857600080fd5b50610901611be7565b60405180821515815260200191505060405180910390f35b34801561092557600080fd5b5061092e611bfe565b005b34801561093c57600080fd5b506109696004803603602081101561095357600080fd5b8101908080359060200190929190505050611d11565b005b34801561097757600080fd5b50610980611e83565b6040518082815260200191505060405180910390f35b3480156109a257600080fd5b506109ab611e8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e357600080fd5b506109ec611eb7565b6040518082815260200191505060405180910390f35b348015610a0e57600080fd5b50610a17611ebd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a57578082015181840152602081019050610a3c565b50505050905090810190601f168015610a845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a9e57600080fd5b50610acd60048036036020811015610ab557600080fd5b81019080803515159060200190929190505050611f5f565b005b348015610adb57600080fd5b50610b2860048036036040811015610af257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061207f565b60405180821515815260200191505060405180910390f35b348015610b4c57600080fd5b50610b9960048036036040811015610b6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061214c565b60405180821515815260200191505060405180910390f35b348015610bbd57600080fd5b50610c0060048036036020811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061216a565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612235565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610cb060048036036040811015610c6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223f565b6040518082815260200191505060405180910390f35b348015610cd257600080fd5b50610cff60048036036020811015610ce957600080fd5b81019080803590602001909291905050506122c6565b005b348015610d0d57600080fd5b50610d5060048036036020811015610d2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612438565b005b348015610d5e57600080fd5b50610d67612648565b6040518082815260200191505060405180910390f35b348015610d8957600080fd5b50610dcc60048036036020811015610da057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061264e565b005b348015610dda57600080fd5b50610de3612847565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1b57600080fd5b50610e24612871565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ed25780601f10610ea757610100808354040283529160200191610ed2565b820191906000526020600020905b815481529060010190602001808311610eb557829003601f168201915b5050505050905090565b6000610ef0610ee96128ff565b8484612907565b6001905092915050565b6000601360029054906101000a900460ff16905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60007f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb905090565b6000610f74848484612afe565b61103584610f806128ff565b61103085604051806060016040528060288152602001613f4f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe66128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b612907565b600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61106e6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68015af1d78b58c40000811015611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613ef86036913960400191505060405180910390fd5b80600c819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00816040518082815260200191505060405180910390a150565b6000600560009054906101000a900460ff16905090565b6000611212606461120484866131c990919063ffffffff16565b61324f90919063ffffffff16565b905092915050565b6000600c54905090565b60006112cd6112316128ff565b846112c885600160006112426128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287790919063ffffffff16565b612907565b6001905092915050565b6000600b54905090565b7f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb81565b61130d6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613e3b602b913960400191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f13bcad7970cc1375d9214dce8bdc2b4d53f94d61415710e75914940bf6ece90260405160405180910390a250565b6114e46128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ed46024913960400191505060405180910390fd5b60008390506116468260115461287790919063ffffffff16565b6011819055508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116df57600080fd5b505af11580156116f3573d6000803e3d6000fd5b505050506040513d602081101561170957600080fd5b81019080805190602001909291905050505050505050565b6117296128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68056bc75e2d6310000081101561184d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140846032913960400191505060405180910390fd5b80600d819055507feadfff348482d77d5337dd0998187600666e4b8dbbb48bea99634c7f146cec6a816040518082815260200191505060405180910390a150565b6118966128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561196a5750600a8111155b6119bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613fed6025913960400191505060405180910390fd5b806009819055507fad8ed08a97a6b3ca156f2239e741d5f254b933dde3747a350073652ca0cfcfde816040518082815260200191505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a506128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600f54905090565b6000600a54905090565b6000601360019054906101000a900460ff16905090565b611c066128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601360026101000a81548160ff0219169083151502179055507fd9e29040b496bb05e69c27b488557877261751ea846666743c06155088bca35d60405160405180910390a1565b611d196128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611ded575060058111155b611e42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613fc0602d913960400191505060405180910390fd5b80600a819055507fafc056eeeef9bee9f1ab33a97663bfaba096cd137850836bac563af9dd6d0f75816040518082815260200191505060405180910390a150565b6000600d54905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f555780601f10611f2a57610100808354040283529160200191611f55565b820191906000526020600020905b815481529060010190602001808311611f3857829003601f168201915b5050505050905090565b611f676128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b600061214261208c6128ff565b8461213d856040518060600160405280602581526020016140fc60259139600160006120b66128ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b612907565b6001905092915050565b60006121606121596128ff565b8484612afe565b6001905092915050565b60007f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d602081101561221d57600080fd5b81019080805190602001909291905050509050919050565b6000600954905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122ce6128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600081101580156123a2575060468111155b6123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140376029913960400191505060405180910390fd5b80600b819055507f9f8bf9c9d7e2aa3229e30c8983cf38c1ba3a2d3cff9148a2ccd732ac8a0c44a8816040518082815260200191505060405180910390a150565b6124406128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612588576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e666026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6126566128ff565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f776025913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7ae2df822d49503ed0a6d03f9b87cf506a506e8a9ec4fcd6629059916db3fc4f60405160405180910390a250565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6000808284019050838110156128f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806140606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e8c6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140b66023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f9c6024913960400191505060405180910390fd5b612c56611e8d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc45750612c94611e8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7157507f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d7057507f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b15612e5457601360029054906101000a900460ff16612df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4c4156413a2074726164696e672064697361626c65642079657400000000000081525060200191505060405180910390fd5b600d54811115612e53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140d96023913960400191505060405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612efd5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612f555750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612fad5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612fc257612fbd838383613299565b613104565b6000612fcd30611a00565b90506000600c548210159050808015612ff35750601360009054906101000a900460ff16155b801561304b57507f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156130635750601360019054906101000a900460ff165b15613072576130718261355a565b5b6000613080846009546111ea565b9050600061309085600a546111ea565b905060006130b9826130ab858961390a90919063ffffffff16565b61390a90919063ffffffff16565b90506130c6883085613299565b6130f388600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613299565b6130fe888883613299565b50505050505b505050565b60008383111582906131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317b578082015181840152602081019050613160565b50505050905090810190601f1680156131a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314156131dc5760009050613249565b60008284029050828482816131ed57fe5b0414613244576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613f2e6021913960400191505060405180910390fd5b809150505b92915050565b600061329183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613954565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806140126025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613e186023913960400191505060405180910390fd5b6133b0838383613a1a565b61341b81604051806060016040528060268152602001613eae602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131099092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ae816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6001601360006101000a81548160ff021916908315150217905550600061358b60028361324f90919063ffffffff16565b905060006135a2828461390a90919063ffffffff16565b905060004790506135b283613a1f565b60006135c7824761390a90919063ffffffff16565b90506135d38382613ccd565b60007f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561365c57600080fd5b505afa158015613670573d6000803e3d6000fd5b505050506040513d602081101561368657600080fd5b8101908080519060200190929190505050905060006136a782600b546111ea565b905060006136be828461390a90919063ffffffff16565b90507f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561377357600080fd5b505af1158015613787573d6000803e3d6000fd5b505050506040513d602081101561379d57600080fd5b8101908080519060200190929190505050507f0000000000000000000000004f129f06d805a856f3b48d6e9871af841534c8eb73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561386257600080fd5b505af1158015613876573d6000803e3d6000fd5b505050506040513d602081101561388c57600080fd5b8101908080519060200190929190505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187858860405180848152602001838152602001828152602001935050505060405180910390a1505050505050506000601360006101000a81548160ff02191690831515021790555050565b600061394c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613109565b905092915050565b60008083118290613a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139c55780820151818401526020810190506139aa565b50505050905090810190601f1680156139f25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a0c57fe5b049050809150509392505050565b505050565b6060600267ffffffffffffffff81118015613a3957600080fd5b50604051908082528060200260200182016040528015613a685781602001602082028036833780820191505090505b5090503081600081518110613a7957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1957600080fd5b505afa158015613b2d573d6000803e3d6000fd5b505050506040513d6020811015613b4357600080fd5b810190808051906020019092919050505081600181518110613b6157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bc6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612907565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c88578082015181840152602081019050613c6d565b505050509050019650505050505050600060405180830381600087803b158015613cb157600080fd5b505af1158015613cc5573d6000803e3d6000fd5b505050505050565b613cf8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612907565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613dc057600080fd5b505af1158015613dd4573d6000803e3d6000fd5b50505050506040513d6060811015613deb57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734c4156413a207265776172642073746f72652061646472657373206973207a65726f20616464726573732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4156413a204552433230207472616e7366657220746f207a65726f20616464726573734c4156413a206d696e546f6b656e734265666f7265537761702073686f756c642062652067726561746572207468616e203235653138536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654c4156413a207374616b65722061646472657373206973207a65726f20616464726573732e4c4156413a207374616b65722061646472657373206973206e6f7420736574207965742e4c4156413a20666565544c6f636b466f725265776172645063742073686f756c6420626520696e2031202d20354c4156413a20666565544c6f636b5063742073686f756c6420626520696e2031202d20313045524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734c4156413a206665654c504275726e5063742073686f756c64206265206c657373207468616e20373045524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734c4156413a206d6178546f6b656e7350657254782073686f756c642062652067726561746572207468616e203130306531384c4156413a2073746f72652061646472657373206973206e6f7420736574207965742e4c4156413a207472616e7366657220616d6f756e742065786365656473206c696d697445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb4f3447d6c81563306f50b7a45e60dfba7bdfe6b94bfadf193bc885a0878bfe64736f6c634300060c0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000015af1d78b58c40000000000000000000000000000000000000000000000000006c6b935b8bbd400000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _feeTLockPct (uint256): 4
Arg [2] : _feeTLockForRewardPct (uint256): 2
Arg [3] : _feeLPBurnPct (uint256): 50
Arg [4] : _minTokensBeforeSwap (uint256): 25000000000000000000
Arg [5] : _maxTokensPerTx (uint256): 125000000000000000000
Arg [6] : _swapAndLiquifyEnabled (bool): False

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000015af1d78b58c40000
Arg [5] : 000000000000000000000000000000000000000000000006c6b935b8bbd40000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

25082:12338:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11503:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36930:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25156:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10472:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37159:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12146:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25259:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34317:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10324:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33053:195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36683:111;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12876:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36465:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25214:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35291:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35871:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34666:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33344:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10635:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2741:148;;;;;;;;;;;;;:::i;:::-;;27843:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36342:111;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36806:112;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34973:124;;;;;;;;;;;;;:::i;:::-;;33638:361;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36570:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2527:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25686:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9599:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35105:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13597:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10967:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37270:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36237:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11205:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34011:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2897:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25726:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35604:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37038:109;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25768:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9397:83;9434:13;9467:5;9460:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:83;:::o;11503:169::-;11586:4;11603:39;11612:12;:10;:12::i;:::-;11626:7;11635:6;11603:8;:39::i;:::-;11660:4;11653:11;;11503:169;;;;:::o;36930:96::-;36981:4;37005:13;;;;;;;;;;;36998:20;;36930:96;:::o;25156:51::-;;;:::o;10472:100::-;10525:7;10552:12;;10545:19;;10472:100;:::o;37159:99::-;37210:7;37237:13;37230:20;;37159:99;:::o;12146:321::-;12252:4;12269:36;12279:6;12287:9;12298:6;12269:9;:36::i;:::-;12316:121;12325:6;12333:12;:10;:12::i;:::-;12347:89;12385:6;12347:89;;;;;;;;;;;;;;;;;:11;:19;12359:6;12347:19;;;;;;;;;;;;;;;:33;12367:12;:10;:12::i;:::-;12347:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12316:8;:121::i;:::-;12455:4;12448:11;;12146:321;;;;;:::o;25259:69::-;;;;;;;;;;;;;:::o;34317:337::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34465:5:::1;34441:20;:29;;34433:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34562:20;34540:19;:42;;;;34598:48;34625:20;34598:48;;;;;;;;;;;;;;;;;;34317:337:::0;:::o;10324:83::-;10365:5;10390:9;;;;;;;;;;;10383:16;;10324:83;:::o;33053:195::-;33162:17;33204:36;33236:3;33204:27;33216:14;33204:7;:11;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;33192:48;;33053:195;;;;:::o;36683:111::-;36740:7;36767:19;;36760:26;;36683:111;:::o;12876:218::-;12964:4;12981:83;12990:12;:10;:12::i;:::-;13004:7;13013:50;13052:10;13013:11;:25;13025:12;:10;:12::i;:::-;13013:25;;;;;;;;;;;;;;;:34;13039:7;13013:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12981:8;:83::i;:::-;13082:4;13075:11;;12876:218;;;;:::o;36465:97::-;36515:7;36542:12;;36535:19;;36465:97;:::o;25214:38::-;;;:::o;35291:301::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35421:1:::1;35390:33;;:19;:33;;;;35382:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35503:19;35482:18;;:40;;;;;;;;;;;;;;;;;;35564:19;35538:46;;;;;;;;;;;;35291:301:::0;:::o;35871:354::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35985:1:::1;35970:17;;:3;:17;;;;35962:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36048:21;36088:6;36048:47;;36129:33;36154:7;36129:20;;:24;;:33;;;;:::i;:::-;36106:20;:56;;;;36183:5;:14;;;36198:9;;;;;;;;;;;36209:7;36183:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;2724:1;35871:354:::0;;;:::o;34666:299::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34799:6:::1;34780:15;:25;;34772:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34888:15;34871:14;:32;;;;34919:38;34941:15;34919:38;;;;;;;;;;;;;;;;;;34666:299:::0;:::o;33344:282::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33468:1:::1;33452:12;:17;;:39;;;;;33489:2;33473:12;:18;;33452:39;33444:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33558:12;33544:11;:26;;;;33586:32;33605:12;33586:32;;;;;;;;;;;;;;;;;;33344:282:::0;:::o;10635:119::-;10701:7;10728:9;:18;10738:7;10728:18;;;;;;;;;;;;;;;;10721:25;;10635:119;;;:::o;2741:148::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2848:1:::1;2811:40;;2832:6;;;;;;;;;;;2811:40;;;;;;;;;;;;2879:1;2862:6;;:19;;;;;;;;;;;;;;;;;;2741:148::o:0;27843:97::-;27891:7;27918:14;;27911:21;;27843:97;:::o;36342:111::-;36398:7;36425:20;;36418:27;;36342:111;:::o;36806:112::-;36865:4;36889:21;;;;;;;;;;;36882:28;;36806:112;:::o;34973:124::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35048:4:::1;35032:13;;:20;;;;;;;;;;;;;;;;;;35068:21;;;;;;;;;;34973:124::o:0;33638:361::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33789:1:::1;33764:21;:26;;:56;;;;;33819:1;33794:21;:26;;33764:56;33756:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33904:21;33881:20;:44;;;;33941:50;33969:21;33941:50;;;;;;;;;;;;;;;;;;33638:361:::0;:::o;36570:101::-;36622:7;36649:14;;36642:21;;36570:101;:::o;2527:79::-;2565:7;2592:6;;;;;;;;;;;2585:13;;2527:79;:::o;25686:33::-;;;;:::o;9599:87::-;9638:13;9671:7;9664:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9599:87;:::o;35105:174::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35209:8:::1;35185:21;;:32;;;;;;;;;;;;;;;;;;35233:38;35262:8;35233:38;;;;;;;;;;;;;;;;;;;;35105:174:::0;:::o;13597:269::-;13690:4;13707:129;13716:12;:10;:12::i;:::-;13730:7;13739:96;13778:15;13739:96;;;;;;;;;;;;;;;;;:11;:25;13751:12;:10;:12::i;:::-;13739:25;;;;;;;;;;;;;;;:34;13765:7;13739:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13707:8;:129::i;:::-;13854:4;13847:11;;13597:269;;;;:::o;10967:175::-;11053:4;11070:42;11080:12;:10;:12::i;:::-;11094:9;11105:6;11070:9;:42::i;:::-;11130:4;11123:11;;10967:175;;;;:::o;37270:147::-;37334:7;37377:13;37361:40;;;37402:6;37361:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37354:55;;37270:147;;;:::o;36237:93::-;36284:7;36311:11;;36304:18;;36237:93;:::o;11205:151::-;11294:7;11321:11;:18;11333:5;11321:18;;;;;;;;;;;;;;;:27;11340:7;11321:27;;;;;;;;;;;;;;;;11314:34;;11205:151;;;;:::o;34011:294::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34138:1:::1;34121:13;:18;;:41;;;;;34160:2;34143:13;:19;;34121:41;34113:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34234:13;34219:12;:28;;;;34263:34;34283:13;34263:34;;;;;;;;;;;;;;;;;;34011:294:::0;:::o;2897:244::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3006:1:::1;2986:22;;:8;:22;;;;2978:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3096:8;3067:38;;3088:6;;;;;;;;;;;3067:38;;;;;;;;;;;;3125:8;3116:6;;:17;;;;;;;;;;;;;;;;;;2897:244:::0;:::o;25726:35::-;;;;:::o;35604:259::-;2664:12;:10;:12::i;:::-;2654:22;;:6;;;;;;;;;;;:22;;;2646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35719:1:::1;35693:28;;:14;:28;;;;35685:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35790:14;35774:13;;:30;;;;;;;;;;;;;;;;;;35841:13;;;;;;;;;;;35820:35;;;;;;;;;;;;35604:259:::0;:::o;37038:109::-;37094:7;37121:18;;;;;;;;;;;37114:25;;37038:109;:::o;25768:33::-;;;;:::o;3180:181::-;3238:7;3258:9;3274:1;3270;:5;3258:17;;3299:1;3294;:6;;3286:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:1;3345:8;;;3180:181;;;;:::o;1844:106::-;1897:15;1932:10;1925:17;;1844:106;:::o;16742:346::-;16861:1;16844:19;;:5;:19;;;;16836:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16942:1;16923:21;;:7;:21;;;;16915:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17026:6;16996:11;:18;17008:5;16996:18;;;;;;;;;;;;;;;:27;17015:7;16996:27;;;;;;;;;;;;;;;:36;;;;17064:7;17048:32;;17057:5;17048:32;;;17073:6;17048:32;;;;;;;;;;;;;;;;;;16742:346;;;:::o;28100:2197::-;28262:1;28232:32;;:18;;;;;;;;;;;:32;;;;28224:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28348:1;28323:27;;:13;;;;;;;;;;;:27;;;;28315:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28695:7;:5;:7::i;:::-;28687:15;;:4;:15;;;;:32;;;;;28712:7;:5;:7::i;:::-;28706:13;;:2;:13;;;;28687:32;:82;;;;;28732:13;28724:21;;:4;:21;;;:44;;;;28755:13;28749:19;;:2;:19;;;28724:44;28687:82;28684:253;;;28794:13;;;;;;;;;;;28786:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28871:14;;28861:6;:24;;28853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28684:253;28968:13;;;;;;;;;;;28960:21;;:4;:21;;;:44;;;;28991:13;;;;;;;;;;;28985:19;;:2;:19;;;28960:44;:74;;;;29016:18;;;;;;;;;;;29008:26;;:4;:26;;;28960:74;:102;;;;29044:18;;;;;;;;;;;29038:24;;:2;:24;;;28960:102;28957:1333;;;29079:33;29095:4;29101:2;29105:6;29079:15;:33::i;:::-;28957:1333;;;29145:28;29176:24;29194:4;29176:9;:24::i;:::-;29145:55;;29215:24;29266:19;;29242:20;:43;;29215:70;;29322:19;:57;;;;;29363:16;;;;;;;;;;;29362:17;29322:57;:105;;;;;29414:13;29400:27;;:10;:27;;;;29322:105;:147;;;;;29448:21;;;;;;;;;;;29322:147;29300:256;;;29504:36;29519:20;29504:14;:36::i;:::-;29300:256;29636:24;29663:82;29694:6;29719:11;;29663:12;:82::i;:::-;29636:109;;29840:29;29872:91;29903:6;29928:20;;29872:12;:91::i;:::-;29840:123;;29984:24;30011:55;30044:21;30011:28;30022:16;30011:6;:10;;:28;;;;:::i;:::-;:32;;:55;;;;:::i;:::-;29984:82;;30087:54;30103:4;30117;30124:16;30087:15;:54::i;:::-;30156:64;30172:4;30178:18;;;;;;;;;;;30198:21;30156:15;:64::i;:::-;30235:43;30251:4;30257:2;30261:16;30235:15;:43::i;:::-;28957:1333;;;;;;28100:2197;;;:::o;3524:192::-;3610:7;3643:1;3638;:6;;3646:12;3630:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:9;3686:1;3682;:5;3670:17;;3707:1;3700:8;;;3524:192;;;;;:::o;3730:471::-;3788:7;4038:1;4033;:6;4029:47;;;4063:1;4056:8;;;;4029:47;4088:9;4104:1;4100;:5;4088:17;;4133:1;4128;4124;:5;;;;;;:10;4116:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4192:1;4185:8;;;3730:471;;;;;:::o;4215:132::-;4273:7;4300:39;4304:1;4307;4300:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4293:46;;4215:132;;;;:::o;14356:539::-;14480:1;14462:20;;:6;:20;;;;14454:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14564:1;14543:23;;:9;:23;;;;14535:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14619:47;14640:6;14648:9;14659:6;14619:20;:47::i;:::-;14699:71;14721:6;14699:71;;;;;;;;;;;;;;;;;:9;:17;14709:6;14699:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14679:9;:17;14689:6;14679:17;;;;;;;;;;;;;;;:91;;;;14804:32;14829:6;14804:9;:20;14814:9;14804:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14781:9;:20;14791:9;14781:20;;;;;;;;;;;;;;;:55;;;;14869:9;14852:35;;14861:6;14852:35;;;14880:6;14852:35;;;;;;;;;;;;;;;;;;14356:539;;;:::o;30305:1534::-;26648:4;26629:16;;:23;;;;;;;;;;;;;;;;;;30441:12:::1;30456:27;30481:1;30456:20;:24;;:27;;;;:::i;:::-;30441:42;;30494:17;30514:30;30539:4;30514:20;:24;;:30;;;;:::i;:::-;30494:50;;30822:22;30847:21;30822:46;;30913:22;30930:4;30913:16;:22::i;:::-;31066:18;31087:41;31113:14;31087:21;:25;;:41;;;;:::i;:::-;31066:62;;31178:35;31191:9;31202:10;31178:12;:35::i;:::-;31244:17;31280:13;31264:40;;;31313:4;31264:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31244:75;;31377:16;31396:74;31423:9;31447:12;;31396;:74::i;:::-;31377:93;;31549:25;31577:23;31591:8;31577:9;:13;;:23;;;;:::i;:::-;31549:51;;31637:13;31621:39;;;31661:9;;;;;;;;;;;31672:8;31621:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;31708:13;31692:39;;;31732:18;;;;;;;;;;;31752:17;31692:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;31788:43;31803:4;31809:10;31821:9;31788:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26663:1;;;;;;;26694:5:::0;26675:16;;:24;;;;;;;;;;;;;;;;;;30305:1534;:::o;3374:136::-;3432:7;3459:43;3463:1;3466;3459:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3452:50;;3374:136;;;;:::o;4361:278::-;4447:7;4479:1;4475;:5;4482:12;4467:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4506:9;4522:1;4518;:5;;;;;;4506:17;;4630:1;4623:8;;;4361:278;;;;;:::o;18113:92::-;;;;:::o;31847:589::-;31973:21;32011:1;31997:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31973:40;;32042:4;32024;32029:1;32024:7;;;;;;;;;;;;;:23;;;;;;;;;;;32068:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32058:4;32063:1;32058:7;;;;;;;;;;;;;:32;;;;;;;;;;;32103:62;32120:4;32135:15;32153:11;32103:8;:62::i;:::-;32204:15;:66;;;32285:11;32311:1;32355:4;32382;32402:15;32204:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31847:589;;:::o;32444:519::-;32592:62;32609:4;32624:15;32642:11;32592:8;:62::i;:::-;32697:15;:31;;;32736:9;32769:4;32789:11;32815:1;32858;32909:4;32929:15;32697:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32444:519;;:::o

Swarm Source

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