ETH Price: $2,463.47 (+0.48%)

Token

Voltama Dao (VOLTAMA)
 

Overview

Max Total Supply

100,000,000,000 VOLTAMA

Holders

124

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
373,914,663.101127691 VOLTAMA

Value
$0.00
0x202c949ac99b079682d6d01da3a7d617bf8ccc54
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Voltama

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-14
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;


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

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

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

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

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

/**
 * @dev Collection of functions 
 */
abstract contract Context {
    
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    mapping (address => bool) internal authorizations;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        authorizations[_owner] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() virtual {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

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

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

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

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        authorizations[_owner] = false;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

interface IUniswapV2Pair {
    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;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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);
}

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

contract Voltama is Context, IERC20, Ownable {
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping (address => bool) private isTxLimitExempt;

    struct BuyFee {
        uint256 autoLp;
        uint256 teamPool;
        uint256 marketing;
        uint256 tax;
    }

    struct SellFee {
        uint256 autoLp;
        uint256 teamPool;
        uint256 marketing;
        uint256 tax;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private numTokensSellToAddToLiquidity = 1000000 * 10**9;
    uint256 public _maxTxAmount = _tTotal / 200; // 0.5%
    uint256 private _tFeeTotal;
    uint256 public _taxFee;
    uint256 public _liquidityFee;
    uint256 public _teamPoolFee;
    uint256 public _marketingFee;

    string private constant _name = "Voltama Dao";
    string private constant _symbol = "VOLTAMA";
    uint8  private constant _decimals = 9;

    address payable public marketingWallet;
    address payable public teamPoolWallet;
    address payable public liquidityWallet;
    address[] private _excluded;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public isTradingEnabled;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SetAutomatedMarketMakerPair(address pair);
    event RemoveAutomatedMarketMakerPair(address pair);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiqudity);
    event SwapAndDistribute(uint256 forMarketing,uint256 forLiquidity,uint256 forTeamPool);
    event SwapETHForTokens(uint256 amountIn, address[] path);

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

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        marketingWallet = payable(0x3eD6a3aBa3CE4DbdbdfBeAe1af2Dd06f9614C661);
        teamPoolWallet = payable(0x0720563B42777cD206A9566Feb5F4261c26e61b3);
        liquidityWallet = payable(owner());

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // 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;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        isTxLimitExempt[address(uniswapV2Pair)] = true;
        isTxLimitExempt[address(uniswapV2Router)] = true;
        isTxLimitExempt[address(teamPoolWallet)] = true;
        isTxLimitExempt[address(liquidityWallet)] = true;
        isTxLimitExempt[address(marketingWallet)] = true;

        buyFee.autoLp = 2;
        buyFee.teamPool = 0;
        buyFee.marketing = 1;
        buyFee.tax = 2;

        sellFee.autoLp = 6;
        sellFee.teamPool = 4;
        sellFee.marketing = 10;
        sellFee.tax = 0;

        excludeFromReward(address(0xdead));
        excludeFromReward(_msgSender());
        excludeFromReward(address(0x0720563B42777cD206A9566Feb5F4261c26e61b3));
        excludeFromReward(address(uniswapV2Pair));
        excludeFromReward(address(uniswapV2Router));
        setAutomatedMarketMakerPair(address(uniswapV2Pair));
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function setAutomatedMarketMakerPair(address pair) public onlyOwner {
         automatedMarketMakerPairs[pair] = true;

         emit SetAutomatedMarketMakerPair(pair);
    }
    
    function removeAutomatedMarketMakerPair(address pair) public onlyOwner {
        automatedMarketMakerPairs[pair] = false;
        
        emit RemoveAutomatedMarketMakerPair(pair);
    }
     
    function name() external pure returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() external view override returns (uint256) {
        return _tTotal;
    }
    
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative). Referenced from SafeMath library to preserve transaction integrity.
     */
    function balanceCheck(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function checkTxLimit(address sender, uint256 amount) internal view returns(bool) {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
        return true;
    }
    
    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

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

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

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

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

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

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

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

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

    function deliver(uint256 tAmount) external {
        address sender = _msgSender();
        require(!_isExcluded[sender],"Excluded addresses cannot call this function");
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

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

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTeamPool = calculateTeamPoolFee(tAmount);
        uint256 tTransferAmount = tAmount - (tFee + tLiquidity);
        tTransferAmount = tTransferAmount - (tMarketing + tTeamPool);
        return (tTransferAmount, tFee, tLiquidity, tMarketing, tTeamPool);
    }

    function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 tMarketing,uint256 tTeamPool,uint256 currentRate) private pure returns (uint256,uint256,uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rTeamPool = tTeamPool * currentRate;
        uint256 rTransferAmount = rAmount - (rFee + rLiquidity + rMarketing + rTeamPool);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function _takeMarketingAndTeamPool(uint256 tMarketing, uint256 tTeamPool) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing*currentRate;
        uint256 rTeamPool = tTeamPool*currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + (rTeamPool + rMarketing);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + (tMarketing + tTeamPool);
    }

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

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

    function calculateTeamPoolFee(uint256 _amount) private view returns (uint256) {
        return _amount*_teamPoolFee/10**2;
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount*_marketingFee/10**2;
    }

    function restoreAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _teamPoolFee = 0;
    }

    function setBuyFee() private {
        _taxFee = buyFee.tax;
        _liquidityFee = buyFee.autoLp;
        _marketingFee = buyFee.marketing;
        _teamPoolFee = buyFee.teamPool;
    }

    function setSellFee() private {
        _taxFee = sellFee.tax;
        _liquidityFee = sellFee.autoLp;
        _marketingFee = sellFee.marketing;
        _teamPoolFee = sellFee.teamPool; 
    }

    function enableTrading() external onlyOwner {
        isTradingEnabled = true;
    }

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

    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from,address to,uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        checkTxLimit(from, amount);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && !automatedMarketMakerPairs[from] && swapAndLiquifyEnabled && from != liquidityWallet && to != liquidityWallet) {
            contractTokenBalance = numTokensSellToAddToLiquidity;

            swapAndDistribute(contractTokenBalance);
        }

        //transfer amount, it will take tax, TeamPool, liquidity fee
        _tokenTransfer(from, to, amount);
    }

    function swapAndDistribute(uint256 contractTokenBalance) private lockTheSwap {
        uint256 total = buyFee.marketing + sellFee.marketing + buyFee.autoLp + sellFee.autoLp + buyFee.teamPool + sellFee.teamPool;

        uint256 forMarketing = contractTokenBalance * (buyFee.marketing + sellFee.marketing) / total;
        swapAndSendToFee(forMarketing);

        uint256 forLiquidity = contractTokenBalance * (buyFee.autoLp + sellFee.autoLp) / total;
        swapAndLiquify(forLiquidity);

        uint256 forTeamPool = contractTokenBalance - (forLiquidity + forMarketing);
        sendToTeamPool(forTeamPool);     

        emit SwapAndDistribute(forMarketing, forLiquidity, forTeamPool);
    }
    
    function sendToTeamPool(uint256 tTeamPool) private {
        uint256 currentRate =  _getRate();
        uint256 rTeamPool = tTeamPool * currentRate;
        _rOwned[teamPoolWallet] = _rOwned[teamPoolWallet] + rTeamPool;
        _rOwned[address(this)] = _rOwned[address(this)] - rTeamPool;
        if(_isExcluded[teamPoolWallet])
            _tOwned[teamPoolWallet] = _tOwned[teamPoolWallet] + tTeamPool;
    }

    function swapAndSendToFee(uint256 tokens) private {
        uint256 initialBalance = (address(this)).balance; 
        swapTokensForETH(tokens);
        uint256 newBalance = (address(this)).balance - initialBalance;
        marketingWallet.transfer(newBalance);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(half);

        uint256 newBalance = address(this).balance - initialBalance;

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }


    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _tokenTransfer(address sender,address recipient,uint256 amount) private {
        if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            require(isTradingEnabled, "Trading is disabled");

            if (automatedMarketMakerPairs[sender] == true) {
                setBuyFee();
            } else if (automatedMarketMakerPairs[recipient] == true) {
                setSellFee();
            }
        }

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

        restoreAllFee();
    }

    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (uint256 rAmount,uint256 rTransferAmount,uint256 rFee,uint256 tTransferAmount,uint256 tFee,uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _takeMarketingAndTeamPool(calculateMarketingFee(tAmount),calculateTeamPoolFee(tAmount));
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (uint256 rAmount,uint256 rTransferAmount,uint256 rFee,uint256 tTransferAmount,uint256 tFee,uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _takeMarketingAndTeamPool(calculateMarketingFee(tAmount),calculateTeamPoolFee(tAmount));
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (uint256 rAmount,uint256 rTransferAmount,uint256 rFee,uint256 tTransferAmount,uint256 tFee,uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _takeMarketingAndTeamPool(calculateMarketingFee(tAmount),calculateTeamPoolFee(tAmount));
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (uint256 rAmount,uint256 rTransferAmount,uint256 rFee,uint256 tTransferAmount,uint256 tFee,uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _takeMarketingAndTeamPool(calculateMarketingFee(tAmount),calculateTeamPoolFee(tAmount));
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function setTeamPoolWallet(address payable newWallet) external onlyOwner {
        teamPoolWallet = newWallet;
    }

    function setBuyFees(uint256 lp,uint256 marketing,uint256 teamPool,uint256 tax) external onlyOwner {
        buyFee.autoLp = lp;
        buyFee.marketing = marketing;
        buyFee.teamPool = teamPool;
        buyFee.tax = tax;
    }

    function setSellFees(uint256 lp,uint256 marketing,uint256 teamPool,uint256 tax) external onlyOwner {
        sellFee.autoLp = lp;
        sellFee.marketing = marketing;
        sellFee.teamPool = teamPool;
        sellFee.tax = tax;
    }

    function changeRouterAndPairAddress(address newRouter) external onlyOwner {
        IUniswapV2Router02 _newUniswapRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newUniswapRouter.factory())
            .createPair(address(this), _newUniswapRouter.WETH());
        uniswapV2Router = _newUniswapRouter;
    }

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

    function setSwapTokens(uint256 amount) external onlyOwner {
        numTokensSellToAddToLiquidity = amount;
    }

    function updateLiquidityWallet(address payable newLiquidityWallet) external onlyOwner {
        require(newLiquidityWallet != liquidityWallet, "The liquidity wallet is already this address");
        liquidityWallet = newLiquidityWallet;
    }    
    
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * And sets the liquidity wallet. Can only be called by the current owner. 
     */
    function _transferOwnership(address payable newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        liquidityWallet = payable(newOwner);
        transferOwnership(newOwner);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"RemoveAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"forMarketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forTeamPool","type":"uint256"}],"name":"SwapAndDistribute","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"_transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"teamPool","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"changeRouterAndPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"removeAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"teamPool","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"teamPool","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"teamPool","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setTeamPoolWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamPoolWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405268056bc75e2d631000006013819055620000219060001962000968565b6200002f9060001962000930565b60145566038d7ea4c6800060155560c86013546200004e919062000919565b6016556021805460ff60a81b1916600160a81b1790553480156200007157600080fd5b50600080546001600160a01b03191633908117825580825260036020526040808320805460ff1916600117905551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060145433600090815260046020818152604080842094909455601c8054733ed6a3aba3ce4dbdbdfbeae1af2dd06f9614c6616001600160a01b031991821617909155601d8054730720563b42777cd206a9566feb5f4261c26e61b39083161790559254601e80549094166001600160a01b0390911617909255825163c45a015560e01b81529251737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a015593828101939192829003018186803b1580156200018957600080fd5b505afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c49190620008ee565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020d57600080fd5b505afa15801562000222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002489190620008ee565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200029157600080fd5b505af1158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620008ee565b602180546001600160a01b03199081166001600160a01b0393841617825560208054909116848416178155306000908152600882526040808220805460ff19908116600190811790925583548716845282842080548216831790558454871684528284208054821683179055945486168352600a80855282842080548716831790559354861683528183208054861682179055601d54861683528183208054861682179055601e54861683528183208054861682179055601c5490951682528120805490931684179092556002600b819055600c839055600d93909355600e929092556006600f556004601055601191909155601255620003cf61dead62000480565b620003da3362000480565b620003f9730720563b42777cd206a9566feb5f4261c26e61b362000480565b60215462000410906001600160a01b031662000480565b60205462000427906001600160a01b031662000480565b6021546200043e906001600160a01b0316620005fd565b60135460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350620009c1565b6000546001600160a01b03163314620004cf5760405162461bcd60e51b8152602060048201819052602482015260008051602062003d8883398151915260448201526064015b60405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff16156200053a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620004c6565b6001600160a01b0381166000908152600460205260409020541562000597576001600160a01b0381166000908152600460205260409020546200057d90620006a2565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155601f805491820181559091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319169091179055565b6000546001600160a01b03163314620006485760405162461bcd60e51b8152602060048201819052602482015260008051602062003d888339815191526044820152606401620004c6565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f358f3cb203433a03de149efbff60641f40bcd6fe750981527942877c50b838da910160405180910390a150565b60006014548211156200070b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620004c6565b6000620007176200072c565b905062000725818462000919565b9392505050565b600080806200073a62000752565b90925090506200074b818362000919565b9250505090565b6014546013546000918291825b601f54811015620008ba578260046000601f8481548110620007855762000785620009ab565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007f457508160056000601f8481548110620007cd57620007cd620009ab565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200080b57601454601354945094505050509091565b60046000601f8381548110620008255762000825620009ab565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000856908462000930565b925060056000601f8381548110620008725762000872620009ab565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008a3908362000930565b915080620008b1816200094a565b9150506200075f565b50601354601454620008cd919062000919565b821015620008e5576014546013549350935050509091565b90939092509050565b6000602082840312156200090157600080fd5b81516001600160a01b03811681146200072557600080fd5b6000826200092b576200092b62000995565b500490565b6000828210156200094557620009456200097f565b500390565b60006000198214156200096157620009616200097f565b5060010190565b6000826200097a576200097a62000995565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6133b780620009d16000396000f3fe6080604052600436106103905760003560e01c80636bc87c3a116101dc578063b6899fe411610102578063dd467064116100a0578063f0b37c041161006f578063f0b37c0414610af8578063f2fde38b14610b18578063f84ba65d14610b38578063fe9fbb8014610b5857600080fd5b8063dd46706414610a52578063dd62ed3e14610a72578063e37ba8f914610ab8578063ea2f0b3714610ad857600080fd5b8063c49b9a80116100dc578063c49b9a80146109dc578063c6d0270b146109fc578063d29d44ee14610a12578063d469801614610a3257600080fd5b8063b6899fe41461097c578063b6a5d7de1461099c578063bf6642e7146109bc57600080fd5b80638a8c523c1161017a578063a4f0cd2511610149578063a4f0cd25146108f7578063a69df4b514610917578063a9059cbb1461092c578063b62496f51461094c57600080fd5b80638a8c523c146108745780638da5cb5b1461088957806395d89b41146108a7578063a457c2d7146108d757600080fd5b8063715018a6116101b6578063715018a6146107f057806375f0a874146108055780637d1db4a51461082557806388f820201461083b57600080fd5b80636bc87c3a1461079a5780636c5b2855146107b057806370a08231146107d057600080fd5b80633685d419116102c1578063470624021161025f5780635342acb41161022e5780635342acb41461070c5780635c85974f146107455780635d098b3814610765578063602bc62b1461078557600080fd5b8063470624021461068857806349bd5a5e146106ab5780634a74bb02146106cb57806352390c02146106ec57600080fd5b80633bd5d1731161029b5780633bd5d17314610608578063437823ec146106285780634549b0391461064857806346c8df231461066857600080fd5b80633685d419146105b257806339509351146105d25780633b124fe7146105f257600080fd5b806322976e0d1161032e5780632b14ca56116103085780632b14ca56146105135780632d83811914610556578063313ce56714610576578063349c1f091461059257600080fd5b806322976e0d146104bd57806322bd506f146104d357806323b872dd146104f357600080fd5b806313114a9d1161036a57806313114a9d1461042f5780631694505e1461044e578063178d9b8e1461048657806318160ddd146104a857600080fd5b8063064a59d01461039c57806306fdde03146103d2578063095ea7b31461040f57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506021546103bd90600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156103de57600080fd5b5060408051808201909152600b81526a566f6c74616d612044616f60a81b60208201525b6040516103c991906130f1565b34801561041b57600080fd5b506103bd61042a36600461300e565b610b91565b34801561043b57600080fd5b506017545b6040519081526020016103c9565b34801561045a57600080fd5b5060205461046e906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049257600080fd5b506104a66104a13660046130bf565b610ba8565b005b3480156104b457600080fd5b50601354610440565b3480156104c957600080fd5b50610440601b5481565b3480156104df57600080fd5b506104a66104ee366004612f25565b610bef565b3480156104ff57600080fd5b506103bd61050e366004612f98565b610dc1565b34801561051f57600080fd5b50600f546010546011546012546105369392919084565b6040805194855260208501939093529183015260608201526080016103c9565b34801561056257600080fd5b50610440610571366004613055565b610e3f565b34801561058257600080fd5b50604051600981526020016103c9565b34801561059e57600080fd5b506104a66105ad366004612f25565b610ec3565b3480156105be57600080fd5b506104a66105cd366004612f25565b610f48565b3480156105de57600080fd5b506103bd6105ed36600461300e565b6110ff565b3480156105fe57600080fd5b5061044060185481565b34801561061457600080fd5b506104a6610623366004613055565b611136565b34801561063457600080fd5b506104a6610643366004612f25565b611222565b34801561065457600080fd5b5061044061066336600461306e565b611270565b34801561067457600080fd5b506104a6610683366004612f25565b6112fd565b34801561069457600080fd5b50600b54600c54600d54600e546105369392919084565b3480156106b757600080fd5b5060215461046e906001600160a01b031681565b3480156106d757600080fd5b506021546103bd90600160a81b900460ff1681565b3480156106f857600080fd5b506104a6610707366004612f25565b611378565b34801561071857600080fd5b506103bd610727366004612f25565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561075157600080fd5b506104a6610760366004613055565b6114cb565b34801561077157600080fd5b506104a6610780366004612f25565b61151d565b34801561079157600080fd5b50600254610440565b3480156107a657600080fd5b5061044060195481565b3480156107bc57600080fd5b506104a66107cb3660046130bf565b611569565b3480156107dc57600080fd5b506104406107eb366004612f25565b6115a7565b3480156107fc57600080fd5b506104a6611606565b34801561081157600080fd5b50601c5461046e906001600160a01b031681565b34801561083157600080fd5b5061044060165481565b34801561084757600080fd5b506103bd610856366004612f25565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561088057600080fd5b506104a6611668565b34801561089557600080fd5b506000546001600160a01b031661046e565b3480156108b357600080fd5b50604080518082019091526007815266564f4c54414d4160c81b6020820152610402565b3480156108e357600080fd5b506103bd6108f236600461300e565b6116a7565b34801561090357600080fd5b50601d5461046e906001600160a01b031681565b34801561092357600080fd5b506104a66116f6565b34801561093857600080fd5b506103bd61094736600461300e565b6117fc565b34801561095857600080fd5b506103bd610967366004612f25565b60076020526000908152604090205460ff1681565b34801561098857600080fd5b506104a6610997366004612f25565b611809565b3480156109a857600080fd5b506104a66109b7366004612f25565b611855565b3480156109c857600080fd5b506104a66109d7366004613055565b6118a3565b3480156109e857600080fd5b506104a66109f736600461303a565b6118d2565b348015610a0857600080fd5b50610440601a5481565b348015610a1e57600080fd5b506104a6610a2d366004612f25565b611949565b348015610a3e57600080fd5b50601e5461046e906001600160a01b031681565b348015610a5e57600080fd5b506104a6610a6d366004613055565b6119c0565b348015610a7e57600080fd5b50610440610a8d366004612f5f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610ac457600080fd5b506104a6610ad3366004612f25565b611a5c565b348015610ae457600080fd5b506104a6610af3366004612f25565b611b1b565b348015610b0457600080fd5b506104a6610b13366004612f25565b611b66565b348015610b2457600080fd5b506104a6610b33366004612f25565b611bb1565b348015610b4457600080fd5b506104a6610b53366004612fd9565b611c75565b348015610b6457600080fd5b506103bd610b73366004612f25565b6001600160a01b031660009081526003602052604090205460ff1690565b6000610b9e338484611ced565b5060015b92915050565b6000546001600160a01b03163314610bdb5760405162461bcd60e51b8152600401610bd29061318c565b60405180910390fd5b600b93909355600d91909155600c55600e55565b6000546001600160a01b03163314610c195760405162461bcd60e51b8152600401610bd29061318c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f9190612f42565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f9190612f42565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190612f42565b602180546001600160a01b039283166001600160a01b0319918216179091556020805493909216921691909117905550565b6000610dce848484611e11565b610e3584336001600160a01b0387166000908152600660205260408120610e3091336001600160a01b03166001600160a01b03168152602001908152602001600020548660405180606001604052806028815260200161331560289139611fa1565b611ced565b5060019392505050565b6000601454821115610ea65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bd2565b6000610eb0611fdb565b9050610ebc818461324a565b9392505050565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f358f3cb203433a03de149efbff60641f40bcd6fe750981527942877c50b838da91015b60405180910390a150565b6000546001600160a01b03163314610f725760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03811660009081526009602052604090205460ff16610fda5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd2565b60005b601f548110156110fb57816001600160a01b0316601f8281548110611004576110046132e9565b6000918252602090912001546001600160a01b031614156110e957601f805461102f9060019061328b565b8154811061103f5761103f6132e9565b600091825260209091200154601f80546001600160a01b03909216918390811061106b5761106b6132e9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055601f8054806110c3576110c36132d3565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110f3816132a2565b915050610fdd565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610b9e918590610e30908690613232565b3360008181526009602052604090205460ff16156111ab5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bd2565b60006111b683611ffe565b505050506001600160a01b0384166000908152600460205260409020549192506111e29183915061328b565b6001600160a01b03831660009081526004602052604090205560145461120990829061328b565b60145560175461121a908490613232565b601755505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006013548311156112c45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bd2565b816112e35760006112d484611ffe565b50939550610ba2945050505050565b60006112ee84611ffe565b50929550610ba2945050505050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116600081815260076020908152604091829020805460ff1916905590519182527f18a128e0aa208c3d6c38f08feaf99daf3062ff2f2005836354191a0ac83e99649101610f3d565b6000546001600160a01b031633146113a25760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03811660009081526009602052604090205460ff161561140b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd2565b6001600160a01b03811660009081526004602052604090205415611465576001600160a01b03811660009081526004602052604090205461144b90610e3f565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155601f805491820181559091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319169091179055565b3360009081526003602052604090205460ff166115185760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610bd2565b601655565b6000546001600160a01b031633146115475760405162461bcd60e51b8152600401610bd29061318c565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115935760405162461bcd60e51b8152600401610bd29061318c565b600f93909355601191909155601055601255565b6001600160a01b03811660009081526009602052604081205460ff16156115e457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610ba290610e3f565b6000546001600160a01b031633146116305760405162461bcd60e51b8152600401610bd29061318c565b600080546040516001600160a01b039091169060008051602061333d833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116925760405162461bcd60e51b8152600401610bd29061318c565b6021805460ff60b01b1916600160b01b179055565b3360008181526006602090815260408083206001600160a01b038716845282528083205481516060810190925260258083529394610b9e9490938893610e309392899261335d90830139611fa1565b6001546001600160a01b0316331461175c5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bd2565b60025442116117ad5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bd2565b600154600080546040516001600160a01b03938416939091169160008051602061333d83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b9e338484611e11565b6000546001600160a01b031633146118335760405162461bcd60e51b8152600401610bd29061318c565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146118cd5760405162461bcd60e51b8152600401610bd29061318c565b601555565b6000546001600160a01b031633146118fc5760405162461bcd60e51b8152600401610bd29061318c565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f3d90831515815260200190565b6000546001600160a01b031633146119735760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b0381166119995760405162461bcd60e51b8152600401610bd290613146565b601e80546001600160a01b0319166001600160a01b0383161790556119bd81611bb1565b50565b6000546001600160a01b031633146119ea5760405162461bcd60e51b8152600401610bd29061318c565b60008054600180546001600160a01b039092166001600160a01b031992831681179091558252600360205260408220805460ff191690558154169055611a308142613232565b600255600080546040516001600160a01b039091169060008051602061333d833981519152908390a350565b6000546001600160a01b03163314611a865760405162461bcd60e51b8152600401610bd29061318c565b601e546001600160a01b0382811691161415611af95760405162461bcd60e51b815260206004820152602c60248201527f546865206c69717569646974792077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610bd2565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b455760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b905760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314611bdb5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116611c015760405162461bcd60e51b8152600401610bd290613146565b600080546040516001600160a01b038085169392169160008051602061333d83398151915291a3600080546001600160a01b03908116825260036020526040808320805460ff1990811690915583546001600160a01b03191694909216938417835592825291902080549091166001179055565b3360009081526003602052604090205460ff16611cc25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610bd2565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b038316611d4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd2565b6001600160a01b038216611db05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd2565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd2565b60008111611ed75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bd2565b611ee1838261205a565b506000611eed306115a7565b60155490915081108015908190611f0e5750602154600160a01b900460ff16155b8015611f3357506001600160a01b03851660009081526007602052604090205460ff16155b8015611f485750602154600160a81b900460ff165b8015611f625750601e546001600160a01b03868116911614155b8015611f7c5750601e546001600160a01b03858116911614155b15611f8f576015549150611f8f826120c5565b611f9a858585612202565b5050505050565b60008184841115611fc55760405162461bcd60e51b8152600401610bd291906130f1565b506000611fd2848661328b565b95945050505050565b6000806000611fe8612443565b9092509050611ff7818361324a565b9250505090565b60008060008060008060008060008060006120188c6125c6565b94509450945094509450600080600061203c8f88888888612037611fdb565b612640565b919f509d509b50969950949750929550505050505091939550919395565b60006016548211158061208557506001600160a01b0383166000908152600a602052604090205460ff165b610b9e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bd2565b6021805460ff60a01b1916600160a01b179055601054600c54600f54600b54601154600d54600095949392916120fa91613232565b6121049190613232565b61210e9190613232565b6121189190613232565b6121229190613232565b601154600d54919250600091839161213991613232565b612143908561326c565b61214d919061324a565b9050612158816126cc565b600f54600b54600091849161216d9190613232565b612177908661326c565b612181919061324a565b905061218c81612725565b60006121988383613232565b6121a2908661328b565b90506121ad816127ac565b60408051848152602081018490529081018290527fe311663738d04ec8dc2fd78be2177b3e0523ae76300ada1219ebb9bd60ca33dd9060600160405180910390a150506021805460ff60a01b19169055505050565b6001600160a01b03831660009081526008602052604090205460ff1615801561224457506001600160a01b03821660009081526008602052604090205460ff16155b1561232357602154600160b01b900460ff166122985760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610bd2565b6001600160a01b03831660009081526007602052604090205460ff161515600114156122e0576122db600e54601855600b54601955600d54601b55600c54601a55565b612323565b6001600160a01b03821660009081526007602052604090205460ff1615156001141561232357612323601254601855600f54601955601154601b55601054601a55565b6001600160a01b03831660009081526009602052604090205460ff16801561236457506001600160a01b03821660009081526009602052604090205460ff16155b1561237957612374838383612894565b612425565b6001600160a01b03831660009081526009602052604090205460ff161580156123ba57506001600160a01b03821660009081526009602052604090205460ff165b156123ca576123748383836129d7565b6001600160a01b03831660009081526009602052604090205460ff16801561240a57506001600160a01b03821660009081526009602052604090205460ff165b1561241a57612374838383612a83565b612425838383612af8565b61243e600060188190556019819055601b819055601a55565b505050565b6014546013546000918291825b601f54811015612595578260046000601f8481548110612472576124726132e9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124dd57508160056000601f84815481106124b6576124b66132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124f357601454601354945094505050509091565b60046000601f838154811061250a5761250a6132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612539908461328b565b925060056000601f8381548110612552576125526132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612581908361328b565b91508061258d816132a2565b915050612450565b506013546014546125a6919061324a565b8210156125bd576014546013549350935050509091565b90939092509050565b6000806000806000806125d887612b3d565b905060006125e588612b59565b905060006125f289612b6b565b905060006125ff8a612b7d565b9050600061260d8486613232565b612617908c61328b565b90506126238284613232565b61262d908261328b565b9b949a5092985090965094509092505050565b600080808061264f858b61326c565b9050600061265d868b61326c565b9050600061266b878b61326c565b90506000612679888b61326c565b90506000612687898b61326c565b9050600081836126978688613232565b6126a19190613232565b6126ab9190613232565b6126b5908761328b565b959f959e50939c50939a5050505050505050505050565b30316126d782612b8f565b60006126e482303161328b565b601c546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561271f573d6000803e3d6000fd5b50505050565b600061273260028361324a565b90506000612740828461328b565b90504761274c83612b8f565b6000612758824761328b565b90506127648382612cf9565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60006127b6611fdb565b905060006127c4828461326c565b601d546001600160a01b03166000908152600460205260409020549091506127ed908290613232565b601d546001600160a01b031660009081526004602052604080822092909255308152205461281c90829061328b565b30600090815260046020908152604080832093909355601d546001600160a01b0316825260099052205460ff161561243e57601d546001600160a01b0316600090815260056020526040902054612874908490613232565b601d546001600160a01b0316600090815260056020526040902055505050565b6000806000806000806128a687611ffe565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506128d990889061328b565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461290990879061328b565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612939908690613232565b6001600160a01b03891660009081526004602052604090205561295b81612db5565b61297561296788612b6b565b61297089612b7d565b612e3f565b61297f8483612eea565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c491815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e987611ffe565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a1c90879061328b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612a53908490613232565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612939908690613232565b600080600080600080612a9587611ffe565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612ac890889061328b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612a1c90879061328b565b600080600080600080612b0a87611ffe565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061290990879061328b565b6000606460185483612b4f919061326c565b610ba2919061324a565b6000606460195483612b4f919061326c565b60006064601b5483612b4f919061326c565b60006064601a5483612b4f919061326c565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc457612bc46132e9565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c1757600080fd5b505afa158015612c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4f9190612f42565b81600181518110612c6257612c626132e9565b6001600160a01b0392831660209182029290920181019190915254612c8a9130911684611ced565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc39085906000908690309042906004016131c1565b600060405180830381600087803b158015612cdd57600080fd5b505af1158015612cf1573d6000803e3d6000fd5b505050505050565b602054612d119030906001600160a01b031684611ced565b602054601e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f9a9190613091565b6000612dbf611fdb565b90506000612dcd828461326c565b30600090815260046020526040902054909150612deb908290613232565b3060009081526004602090815260408083209390935560099052205460ff161561243e5730600090815260056020526040902054612e2a908490613232565b30600090815260056020526040902055505050565b6000612e49611fdb565b90506000612e57828561326c565b90506000612e65838561326c565b9050612e718282613232565b30600090815260046020526040902054612e8b9190613232565b3060009081526004602090815260408083209390935560099052205460ff1615611f9a57612eb98486613232565b30600090815260056020526040902054612ed39190613232565b306000908152600560205260409020555050505050565b81601454612ef8919061328b565b601455601754612f09908290613232565b6017555050565b80358015158114612f2057600080fd5b919050565b600060208284031215612f3757600080fd5b8135610ebc816132ff565b600060208284031215612f5457600080fd5b8151610ebc816132ff565b60008060408385031215612f7257600080fd5b8235612f7d816132ff565b91506020830135612f8d816132ff565b809150509250929050565b600080600060608486031215612fad57600080fd5b8335612fb8816132ff565b92506020840135612fc8816132ff565b929592945050506040919091013590565b60008060408385031215612fec57600080fd5b8235612ff7816132ff565b915061300560208401612f10565b90509250929050565b6000806040838503121561302157600080fd5b823561302c816132ff565b946020939093013593505050565b60006020828403121561304c57600080fd5b610ebc82612f10565b60006020828403121561306757600080fd5b5035919050565b6000806040838503121561308157600080fd5b8235915061300560208401612f10565b6000806000606084860312156130a657600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561311e57858101830151858201604001528201613102565b81811115613130576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132115784516001600160a01b0316835293830193918301916001016131ec565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613245576132456132bd565b500190565b60008261326757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613286576132866132bd565b500290565b60008282101561329d5761329d6132bd565b500390565b60006000198214156132b6576132b66132bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146119bd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209a02a8437d4da8fdffd7505a78bbcf992fb50fa1b2e68d71b59612563851588264736f6c634300080500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103905760003560e01c80636bc87c3a116101dc578063b6899fe411610102578063dd467064116100a0578063f0b37c041161006f578063f0b37c0414610af8578063f2fde38b14610b18578063f84ba65d14610b38578063fe9fbb8014610b5857600080fd5b8063dd46706414610a52578063dd62ed3e14610a72578063e37ba8f914610ab8578063ea2f0b3714610ad857600080fd5b8063c49b9a80116100dc578063c49b9a80146109dc578063c6d0270b146109fc578063d29d44ee14610a12578063d469801614610a3257600080fd5b8063b6899fe41461097c578063b6a5d7de1461099c578063bf6642e7146109bc57600080fd5b80638a8c523c1161017a578063a4f0cd2511610149578063a4f0cd25146108f7578063a69df4b514610917578063a9059cbb1461092c578063b62496f51461094c57600080fd5b80638a8c523c146108745780638da5cb5b1461088957806395d89b41146108a7578063a457c2d7146108d757600080fd5b8063715018a6116101b6578063715018a6146107f057806375f0a874146108055780637d1db4a51461082557806388f820201461083b57600080fd5b80636bc87c3a1461079a5780636c5b2855146107b057806370a08231146107d057600080fd5b80633685d419116102c1578063470624021161025f5780635342acb41161022e5780635342acb41461070c5780635c85974f146107455780635d098b3814610765578063602bc62b1461078557600080fd5b8063470624021461068857806349bd5a5e146106ab5780634a74bb02146106cb57806352390c02146106ec57600080fd5b80633bd5d1731161029b5780633bd5d17314610608578063437823ec146106285780634549b0391461064857806346c8df231461066857600080fd5b80633685d419146105b257806339509351146105d25780633b124fe7146105f257600080fd5b806322976e0d1161032e5780632b14ca56116103085780632b14ca56146105135780632d83811914610556578063313ce56714610576578063349c1f091461059257600080fd5b806322976e0d146104bd57806322bd506f146104d357806323b872dd146104f357600080fd5b806313114a9d1161036a57806313114a9d1461042f5780631694505e1461044e578063178d9b8e1461048657806318160ddd146104a857600080fd5b8063064a59d01461039c57806306fdde03146103d2578063095ea7b31461040f57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506021546103bd90600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156103de57600080fd5b5060408051808201909152600b81526a566f6c74616d612044616f60a81b60208201525b6040516103c991906130f1565b34801561041b57600080fd5b506103bd61042a36600461300e565b610b91565b34801561043b57600080fd5b506017545b6040519081526020016103c9565b34801561045a57600080fd5b5060205461046e906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049257600080fd5b506104a66104a13660046130bf565b610ba8565b005b3480156104b457600080fd5b50601354610440565b3480156104c957600080fd5b50610440601b5481565b3480156104df57600080fd5b506104a66104ee366004612f25565b610bef565b3480156104ff57600080fd5b506103bd61050e366004612f98565b610dc1565b34801561051f57600080fd5b50600f546010546011546012546105369392919084565b6040805194855260208501939093529183015260608201526080016103c9565b34801561056257600080fd5b50610440610571366004613055565b610e3f565b34801561058257600080fd5b50604051600981526020016103c9565b34801561059e57600080fd5b506104a66105ad366004612f25565b610ec3565b3480156105be57600080fd5b506104a66105cd366004612f25565b610f48565b3480156105de57600080fd5b506103bd6105ed36600461300e565b6110ff565b3480156105fe57600080fd5b5061044060185481565b34801561061457600080fd5b506104a6610623366004613055565b611136565b34801561063457600080fd5b506104a6610643366004612f25565b611222565b34801561065457600080fd5b5061044061066336600461306e565b611270565b34801561067457600080fd5b506104a6610683366004612f25565b6112fd565b34801561069457600080fd5b50600b54600c54600d54600e546105369392919084565b3480156106b757600080fd5b5060215461046e906001600160a01b031681565b3480156106d757600080fd5b506021546103bd90600160a81b900460ff1681565b3480156106f857600080fd5b506104a6610707366004612f25565b611378565b34801561071857600080fd5b506103bd610727366004612f25565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561075157600080fd5b506104a6610760366004613055565b6114cb565b34801561077157600080fd5b506104a6610780366004612f25565b61151d565b34801561079157600080fd5b50600254610440565b3480156107a657600080fd5b5061044060195481565b3480156107bc57600080fd5b506104a66107cb3660046130bf565b611569565b3480156107dc57600080fd5b506104406107eb366004612f25565b6115a7565b3480156107fc57600080fd5b506104a6611606565b34801561081157600080fd5b50601c5461046e906001600160a01b031681565b34801561083157600080fd5b5061044060165481565b34801561084757600080fd5b506103bd610856366004612f25565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561088057600080fd5b506104a6611668565b34801561089557600080fd5b506000546001600160a01b031661046e565b3480156108b357600080fd5b50604080518082019091526007815266564f4c54414d4160c81b6020820152610402565b3480156108e357600080fd5b506103bd6108f236600461300e565b6116a7565b34801561090357600080fd5b50601d5461046e906001600160a01b031681565b34801561092357600080fd5b506104a66116f6565b34801561093857600080fd5b506103bd61094736600461300e565b6117fc565b34801561095857600080fd5b506103bd610967366004612f25565b60076020526000908152604090205460ff1681565b34801561098857600080fd5b506104a6610997366004612f25565b611809565b3480156109a857600080fd5b506104a66109b7366004612f25565b611855565b3480156109c857600080fd5b506104a66109d7366004613055565b6118a3565b3480156109e857600080fd5b506104a66109f736600461303a565b6118d2565b348015610a0857600080fd5b50610440601a5481565b348015610a1e57600080fd5b506104a6610a2d366004612f25565b611949565b348015610a3e57600080fd5b50601e5461046e906001600160a01b031681565b348015610a5e57600080fd5b506104a6610a6d366004613055565b6119c0565b348015610a7e57600080fd5b50610440610a8d366004612f5f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610ac457600080fd5b506104a6610ad3366004612f25565b611a5c565b348015610ae457600080fd5b506104a6610af3366004612f25565b611b1b565b348015610b0457600080fd5b506104a6610b13366004612f25565b611b66565b348015610b2457600080fd5b506104a6610b33366004612f25565b611bb1565b348015610b4457600080fd5b506104a6610b53366004612fd9565b611c75565b348015610b6457600080fd5b506103bd610b73366004612f25565b6001600160a01b031660009081526003602052604090205460ff1690565b6000610b9e338484611ced565b5060015b92915050565b6000546001600160a01b03163314610bdb5760405162461bcd60e51b8152600401610bd29061318c565b60405180910390fd5b600b93909355600d91909155600c55600e55565b6000546001600160a01b03163314610c195760405162461bcd60e51b8152600401610bd29061318c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f9190612f42565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f9190612f42565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190612f42565b602180546001600160a01b039283166001600160a01b0319918216179091556020805493909216921691909117905550565b6000610dce848484611e11565b610e3584336001600160a01b0387166000908152600660205260408120610e3091336001600160a01b03166001600160a01b03168152602001908152602001600020548660405180606001604052806028815260200161331560289139611fa1565b611ced565b5060019392505050565b6000601454821115610ea65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bd2565b6000610eb0611fdb565b9050610ebc818461324a565b9392505050565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f358f3cb203433a03de149efbff60641f40bcd6fe750981527942877c50b838da91015b60405180910390a150565b6000546001600160a01b03163314610f725760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03811660009081526009602052604090205460ff16610fda5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd2565b60005b601f548110156110fb57816001600160a01b0316601f8281548110611004576110046132e9565b6000918252602090912001546001600160a01b031614156110e957601f805461102f9060019061328b565b8154811061103f5761103f6132e9565b600091825260209091200154601f80546001600160a01b03909216918390811061106b5761106b6132e9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055601f8054806110c3576110c36132d3565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110f3816132a2565b915050610fdd565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610b9e918590610e30908690613232565b3360008181526009602052604090205460ff16156111ab5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bd2565b60006111b683611ffe565b505050506001600160a01b0384166000908152600460205260409020549192506111e29183915061328b565b6001600160a01b03831660009081526004602052604090205560145461120990829061328b565b60145560175461121a908490613232565b601755505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006013548311156112c45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bd2565b816112e35760006112d484611ffe565b50939550610ba2945050505050565b60006112ee84611ffe565b50929550610ba2945050505050565b6000546001600160a01b031633146113275760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116600081815260076020908152604091829020805460ff1916905590519182527f18a128e0aa208c3d6c38f08feaf99daf3062ff2f2005836354191a0ac83e99649101610f3d565b6000546001600160a01b031633146113a25760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03811660009081526009602052604090205460ff161561140b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd2565b6001600160a01b03811660009081526004602052604090205415611465576001600160a01b03811660009081526004602052604090205461144b90610e3f565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155601f805491820181559091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319169091179055565b3360009081526003602052604090205460ff166115185760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610bd2565b601655565b6000546001600160a01b031633146115475760405162461bcd60e51b8152600401610bd29061318c565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115935760405162461bcd60e51b8152600401610bd29061318c565b600f93909355601191909155601055601255565b6001600160a01b03811660009081526009602052604081205460ff16156115e457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610ba290610e3f565b6000546001600160a01b031633146116305760405162461bcd60e51b8152600401610bd29061318c565b600080546040516001600160a01b039091169060008051602061333d833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116925760405162461bcd60e51b8152600401610bd29061318c565b6021805460ff60b01b1916600160b01b179055565b3360008181526006602090815260408083206001600160a01b038716845282528083205481516060810190925260258083529394610b9e9490938893610e309392899261335d90830139611fa1565b6001546001600160a01b0316331461175c5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bd2565b60025442116117ad5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bd2565b600154600080546040516001600160a01b03938416939091169160008051602061333d83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b9e338484611e11565b6000546001600160a01b031633146118335760405162461bcd60e51b8152600401610bd29061318c565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461187f5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146118cd5760405162461bcd60e51b8152600401610bd29061318c565b601555565b6000546001600160a01b031633146118fc5760405162461bcd60e51b8152600401610bd29061318c565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f3d90831515815260200190565b6000546001600160a01b031633146119735760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b0381166119995760405162461bcd60e51b8152600401610bd290613146565b601e80546001600160a01b0319166001600160a01b0383161790556119bd81611bb1565b50565b6000546001600160a01b031633146119ea5760405162461bcd60e51b8152600401610bd29061318c565b60008054600180546001600160a01b039092166001600160a01b031992831681179091558252600360205260408220805460ff191690558154169055611a308142613232565b600255600080546040516001600160a01b039091169060008051602061333d833981519152908390a350565b6000546001600160a01b03163314611a865760405162461bcd60e51b8152600401610bd29061318c565b601e546001600160a01b0382811691161415611af95760405162461bcd60e51b815260206004820152602c60248201527f546865206c69717569646974792077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610bd2565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b455760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b905760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314611bdb5760405162461bcd60e51b8152600401610bd29061318c565b6001600160a01b038116611c015760405162461bcd60e51b8152600401610bd290613146565b600080546040516001600160a01b038085169392169160008051602061333d83398151915291a3600080546001600160a01b03908116825260036020526040808320805460ff1990811690915583546001600160a01b03191694909216938417835592825291902080549091166001179055565b3360009081526003602052604090205460ff16611cc25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610bd2565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b038316611d4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd2565b6001600160a01b038216611db05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd2565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd2565b60008111611ed75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bd2565b611ee1838261205a565b506000611eed306115a7565b60155490915081108015908190611f0e5750602154600160a01b900460ff16155b8015611f3357506001600160a01b03851660009081526007602052604090205460ff16155b8015611f485750602154600160a81b900460ff165b8015611f625750601e546001600160a01b03868116911614155b8015611f7c5750601e546001600160a01b03858116911614155b15611f8f576015549150611f8f826120c5565b611f9a858585612202565b5050505050565b60008184841115611fc55760405162461bcd60e51b8152600401610bd291906130f1565b506000611fd2848661328b565b95945050505050565b6000806000611fe8612443565b9092509050611ff7818361324a565b9250505090565b60008060008060008060008060008060006120188c6125c6565b94509450945094509450600080600061203c8f88888888612037611fdb565b612640565b919f509d509b50969950949750929550505050505091939550919395565b60006016548211158061208557506001600160a01b0383166000908152600a602052604090205460ff165b610b9e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bd2565b6021805460ff60a01b1916600160a01b179055601054600c54600f54600b54601154600d54600095949392916120fa91613232565b6121049190613232565b61210e9190613232565b6121189190613232565b6121229190613232565b601154600d54919250600091839161213991613232565b612143908561326c565b61214d919061324a565b9050612158816126cc565b600f54600b54600091849161216d9190613232565b612177908661326c565b612181919061324a565b905061218c81612725565b60006121988383613232565b6121a2908661328b565b90506121ad816127ac565b60408051848152602081018490529081018290527fe311663738d04ec8dc2fd78be2177b3e0523ae76300ada1219ebb9bd60ca33dd9060600160405180910390a150506021805460ff60a01b19169055505050565b6001600160a01b03831660009081526008602052604090205460ff1615801561224457506001600160a01b03821660009081526008602052604090205460ff16155b1561232357602154600160b01b900460ff166122985760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610bd2565b6001600160a01b03831660009081526007602052604090205460ff161515600114156122e0576122db600e54601855600b54601955600d54601b55600c54601a55565b612323565b6001600160a01b03821660009081526007602052604090205460ff1615156001141561232357612323601254601855600f54601955601154601b55601054601a55565b6001600160a01b03831660009081526009602052604090205460ff16801561236457506001600160a01b03821660009081526009602052604090205460ff16155b1561237957612374838383612894565b612425565b6001600160a01b03831660009081526009602052604090205460ff161580156123ba57506001600160a01b03821660009081526009602052604090205460ff165b156123ca576123748383836129d7565b6001600160a01b03831660009081526009602052604090205460ff16801561240a57506001600160a01b03821660009081526009602052604090205460ff165b1561241a57612374838383612a83565b612425838383612af8565b61243e600060188190556019819055601b819055601a55565b505050565b6014546013546000918291825b601f54811015612595578260046000601f8481548110612472576124726132e9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124dd57508160056000601f84815481106124b6576124b66132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124f357601454601354945094505050509091565b60046000601f838154811061250a5761250a6132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612539908461328b565b925060056000601f8381548110612552576125526132e9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612581908361328b565b91508061258d816132a2565b915050612450565b506013546014546125a6919061324a565b8210156125bd576014546013549350935050509091565b90939092509050565b6000806000806000806125d887612b3d565b905060006125e588612b59565b905060006125f289612b6b565b905060006125ff8a612b7d565b9050600061260d8486613232565b612617908c61328b565b90506126238284613232565b61262d908261328b565b9b949a5092985090965094509092505050565b600080808061264f858b61326c565b9050600061265d868b61326c565b9050600061266b878b61326c565b90506000612679888b61326c565b90506000612687898b61326c565b9050600081836126978688613232565b6126a19190613232565b6126ab9190613232565b6126b5908761328b565b959f959e50939c50939a5050505050505050505050565b30316126d782612b8f565b60006126e482303161328b565b601c546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561271f573d6000803e3d6000fd5b50505050565b600061273260028361324a565b90506000612740828461328b565b90504761274c83612b8f565b6000612758824761328b565b90506127648382612cf9565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60006127b6611fdb565b905060006127c4828461326c565b601d546001600160a01b03166000908152600460205260409020549091506127ed908290613232565b601d546001600160a01b031660009081526004602052604080822092909255308152205461281c90829061328b565b30600090815260046020908152604080832093909355601d546001600160a01b0316825260099052205460ff161561243e57601d546001600160a01b0316600090815260056020526040902054612874908490613232565b601d546001600160a01b0316600090815260056020526040902055505050565b6000806000806000806128a687611ffe565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506128d990889061328b565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461290990879061328b565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612939908690613232565b6001600160a01b03891660009081526004602052604090205561295b81612db5565b61297561296788612b6b565b61297089612b7d565b612e3f565b61297f8483612eea565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c491815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e987611ffe565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a1c90879061328b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612a53908490613232565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612939908690613232565b600080600080600080612a9587611ffe565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612ac890889061328b565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612a1c90879061328b565b600080600080600080612b0a87611ffe565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061290990879061328b565b6000606460185483612b4f919061326c565b610ba2919061324a565b6000606460195483612b4f919061326c565b60006064601b5483612b4f919061326c565b60006064601a5483612b4f919061326c565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc457612bc46132e9565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c1757600080fd5b505afa158015612c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4f9190612f42565b81600181518110612c6257612c626132e9565b6001600160a01b0392831660209182029290920181019190915254612c8a9130911684611ced565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc39085906000908690309042906004016131c1565b600060405180830381600087803b158015612cdd57600080fd5b505af1158015612cf1573d6000803e3d6000fd5b505050505050565b602054612d119030906001600160a01b031684611ced565b602054601e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f9a9190613091565b6000612dbf611fdb565b90506000612dcd828461326c565b30600090815260046020526040902054909150612deb908290613232565b3060009081526004602090815260408083209390935560099052205460ff161561243e5730600090815260056020526040902054612e2a908490613232565b30600090815260056020526040902055505050565b6000612e49611fdb565b90506000612e57828561326c565b90506000612e65838561326c565b9050612e718282613232565b30600090815260046020526040902054612e8b9190613232565b3060009081526004602090815260408083209390935560099052205460ff1615611f9a57612eb98486613232565b30600090815260056020526040902054612ed39190613232565b306000908152600560205260409020555050505050565b81601454612ef8919061328b565b601455601754612f09908290613232565b6017555050565b80358015158114612f2057600080fd5b919050565b600060208284031215612f3757600080fd5b8135610ebc816132ff565b600060208284031215612f5457600080fd5b8151610ebc816132ff565b60008060408385031215612f7257600080fd5b8235612f7d816132ff565b91506020830135612f8d816132ff565b809150509250929050565b600080600060608486031215612fad57600080fd5b8335612fb8816132ff565b92506020840135612fc8816132ff565b929592945050506040919091013590565b60008060408385031215612fec57600080fd5b8235612ff7816132ff565b915061300560208401612f10565b90509250929050565b6000806040838503121561302157600080fd5b823561302c816132ff565b946020939093013593505050565b60006020828403121561304c57600080fd5b610ebc82612f10565b60006020828403121561306757600080fd5b5035919050565b6000806040838503121561308157600080fd5b8235915061300560208401612f10565b6000806000606084860312156130a657600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561311e57858101830151858201604001528201613102565b81811115613130576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132115784516001600160a01b0316835293830193918301916001016131ec565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613245576132456132bd565b500190565b60008261326757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613286576132866132bd565b500290565b60008282101561329d5761329d6132bd565b500390565b60006000198214156132b6576132b66132bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146119bd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209a02a8437d4da8fdffd7505a78bbcf992fb50fa1b2e68d71b59612563851588264736f6c63430008050033

Deployed Bytecode Sourcemap

21217:24080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22964:28;;;;;;;;;;-1:-1:-1;22964:28:0;;;;-1:-1:-1;;;22964:28:0;;;;;;;;;5291:14:1;;5284:22;5266:41;;5254:2;5239:18;22964:28:0;;;;;;;;25725:85;;;;;;;;;;-1:-1:-1;25797:5:0;;;;;;;;;;;;-1:-1:-1;;;25797:5:0;;;;25725:85;;;;;;;:::i;27546:163::-;;;;;;;;;;-1:-1:-1;27546:163:0;;;;;:::i;:::-;;:::i;28686:89::-;;;;;;;;;;-1:-1:-1;28757:10:0;;28686:89;;;12444:25:1;;;12432:2;12417:18;28686:89:0;12399:76:1;22804:41:0;;;;;;;;;;-1:-1:-1;22804:41:0;;;;-1:-1:-1;;;;;22804:41:0;;;;;;-1:-1:-1;;;;;3929:32:1;;;3911:51;;3899:2;3884:18;22804:41:0;3866:102:1;43441:238:0;;;;;;;;;;-1:-1:-1;43441:238:0;;;;;:::i;:::-;;:::i;:::-;;26008:97;;;;;;;;;;-1:-1:-1;26090:7:0;;26008:97;;22449:28;;;;;;;;;;;;;;;;43938:346;;;;;;;;;;-1:-1:-1;43938:346:0;;;;;:::i;:::-;;:::i;27717:321::-;;;;;;;;;;-1:-1:-1;27717:321:0;;;;;:::i;:::-;;:::i;22001:22::-;;;;;;;;;;-1:-1:-1;22001:22:0;;;;;;;;;;;;;;;;;;;14020:25:1;;;14076:2;14061:18;;14054:34;;;;14104:18;;;14097:34;14162:2;14147:18;;14140:34;14007:3;13992:19;22001:22:0;13974:206:1;29622:249:0;;;;;;;;;;-1:-1:-1;29622:249:0;;;;;:::i;:::-;;:::i;25915:85::-;;;;;;;;;;-1:-1:-1;25915:85:0;;22624:1;14327:36:1;;14315:2;14300:18;25915:85:0;14282:87:1;25331:178:0;;;;;;;;;;-1:-1:-1;25331:178:0;;;;;:::i;:::-;;:::i;30219:477::-;;;;;;;;;;-1:-1:-1;30219:477:0;;;;;:::i;:::-;;:::i;28046:215::-;;;;;;;;;;-1:-1:-1;28046:215:0;;;;;:::i;:::-;;:::i;22351:22::-;;;;;;;;;;;;;;;;28783:374;;;;;;;;;;-1:-1:-1;28783:374:0;;;;;:::i;:::-;;:::i;42946:113::-;;;;;;;;;;-1:-1:-1;42946:113:0;;;;;:::i;:::-;;:::i;29165:449::-;;;;;;;;;;-1:-1:-1;29165:449:0;;;;;:::i;:::-;;:::i;25521:191::-;;;;;;;;;;-1:-1:-1;25521:191:0;;;;;:::i;:::-;;:::i;21974:20::-;;;;;;;;;;-1:-1:-1;21974:20:0;;;;;;;;;;;;;;;22852:28;;;;;;;;;;-1:-1:-1;22852:28:0;;;;-1:-1:-1;;;;;22852:28:0;;;22917:40;;;;;;;;;;-1:-1:-1;22917:40:0;;;;-1:-1:-1;;;22917:40:0;;;;;;29879:332;;;;;;;;;;-1:-1:-1;29879:332:0;;;;;:::i;:::-;;:::i;35311:126::-;;;;;;;;;;-1:-1:-1;35311:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;35402:27:0;35378:4;35402:27;;;:18;:27;;;;;;;;;35311:126;26976:96;;;;;;;;;;-1:-1:-1;26976:96:0;;;;;:::i;:::-;;:::i;43187:120::-;;;;;;;;;;-1:-1:-1;43187:120:0;;;;;:::i;:::-;;:::i;12433:90::-;;;;;;;;;;-1:-1:-1;12506:9:0;;12433:90;;22380:28;;;;;;;;;;;;;;;;43687:243;;;;;;;;;;-1:-1:-1;43687:243:0;;;;;:::i;:::-;;:::i;26556:198::-;;;;;;;;;;-1:-1:-1;26556:198:0;;;;;:::i;:::-;;:::i;11797:148::-;;;;;;;;;;;;;:::i;22634:38::-;;;;;;;;;;-1:-1:-1;22634:38:0;;;;-1:-1:-1;;;;;22634:38:0;;;22260:43;;;;;;;;;;;;;;;;28556:122;;;;;;;;;;-1:-1:-1;28556:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;28650:20:0;28626:4;28650:20;;;:11;:20;;;;;;;;;28556:122;35217:86;;;;;;;;;;;;;:::i;10454:79::-;;;;;;;;;;-1:-1:-1;10492:7:0;10519:6;-1:-1:-1;;;;;10519:6:0;10454:79;;25818:89;;;;;;;;;;-1:-1:-1;25892:7:0;;;;;;;;;;;;-1:-1:-1;;;25892:7:0;;;;25818:89;;28269:279;;;;;;;;;;-1:-1:-1;28269:279:0;;;;;:::i;:::-;;:::i;22679:37::-;;;;;;;;;;-1:-1:-1;22679:37:0;;;;-1:-1:-1;;;;;22679:37:0;;;12942:305;;;;;;;;;;;;;:::i;27216:169::-;;;;;;;;;;-1:-1:-1;27216:169:0;;;;;:::i;:::-;;:::i;21477:58::-;;;;;;;;;;-1:-1:-1;21477:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43315:118;;;;;;;;;;-1:-1:-1;43315:118:0;;;;;:::i;:::-;;:::i;11000:94::-;;;;;;;;;;-1:-1:-1;11000:94:0;;;;;:::i;:::-;;:::i;44473:115::-;;;;;;;;;;-1:-1:-1;44473:115:0;;;;;:::i;:::-;;:::i;44292:173::-;;;;;;;;;;-1:-1:-1;44292:173:0;;;;;:::i;:::-;;:::i;22415:27::-;;;;;;;;;;;;;;;;45037:255;;;;;;;;;;-1:-1:-1;45037:255:0;;;;;:::i;:::-;;:::i;22723:38::-;;;;;;;;;;-1:-1:-1;22723:38:0;;;;-1:-1:-1;;;;;22723:38:0;;;12599:267;;;;;;;;;;-1:-1:-1;12599:267:0;;;;;:::i;:::-;;:::i;27393:145::-;;;;;;;;;;-1:-1:-1;27393:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;27503:18:0;;;27476:7;27503:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27393:145;44596:246;;;;;;;;;;-1:-1:-1;44596:246:0;;;;;:::i;:::-;;:::i;43067:112::-;;;;;;;;;;-1:-1:-1;43067:112:0;;;;;:::i;:::-;;:::i;11170:97::-;;;;;;;;;;-1:-1:-1;11170:97:0;;;;;:::i;:::-;;:::i;12100:325::-;;;;;;;;;;-1:-1:-1;12100:325:0;;;;;:::i;:::-;;:::i;27080:128::-;;;;;;;;;;-1:-1:-1;27080:128:0;;;;;:::i;:::-;;:::i;11338:107::-;;;;;;;;;;-1:-1:-1;11338:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;11418:19:0;11394:4;11418:19;;;:14;:19;;;;;;;;;11338:107;27546:163;27623:4;27640:39;9024:10;27663:7;27672:6;27640:8;:39::i;:::-;-1:-1:-1;27697:4:0;27546:163;;;;;:::o;43441:238::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;;;;;;;;;43550:6:::1;:18:::0;;;;43579:16;:28;;;;43618:15;:26;43655:10;:16;43441:238::o;43938:346::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;44023:36:::1;44081:9;44023:68;;44136:17;-1:-1:-1::0;;;;;44136:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44118:71:0::1;;44198:4;44205:17;-1:-1:-1::0;;;;;44205:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44118:112;::::0;-1:-1:-1;;;;;;44118:112:0::1;::::0;;;;;;-1:-1:-1;;;;;4427:15:1;;;44118:112:0::1;::::0;::::1;4409:34:1::0;4479:15;;4459:18;;;4452:43;4344:18;;44118:112:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44102:13;:128:::0;;-1:-1:-1;;;;;44102:128:0;;::::1;-1:-1:-1::0;;;;;;44102:128:0;;::::1;;::::0;;;44241:15:::1;:35:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;43938:346:0:o;27717:321::-;27815:4;27832:36;27842:6;27850:9;27861:6;27832:9;:36::i;:::-;27879:129;27888:6;9024:10;-1:-1:-1;;;;;27921:19:0;;;;;;:11;:19;;;;;27908:99;;9024:10;-1:-1:-1;;;;;27921:33:0;-1:-1:-1;;;;;27921:33:0;;;;;;;;;;;;;27956:6;27908:99;;;;;;;;;;;;;;;;;:12;:99::i;:::-;27879:8;:129::i;:::-;-1:-1:-1;28026:4:0;27717:321;;;;;:::o;29622:249::-;29689:7;29728;;29717;:18;;29709:72;;;;-1:-1:-1;;;29709:72:0;;6703:2:1;29709:72:0;;;6685:21:1;6742:2;6722:18;;;6715:30;6781:34;6761:18;;;6754:62;-1:-1:-1;;;6832:18:1;;;6825:40;6882:19;;29709:72:0;6675:232:1;29709:72:0;29792:19;29814:10;:8;:10::i;:::-;29792:32;-1:-1:-1;29842:21:0;29792:32;29842:7;:21;:::i;:::-;29835:28;29622:249;-1:-1:-1;;;29622:249:0:o;25331:178::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25411:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;25411:38:0::1;25445:4;25411:38;::::0;;25468:33;;3911:51:1;;;25468:33:0::1;::::0;3884:18:1;25468:33:0::1;;;;;;;;25331:178:::0;:::o;30219:477::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30299:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30291:60;;;::::0;-1:-1:-1;;;30291:60:0;;7924:2:1;30291:60:0::1;::::0;::::1;7906:21:1::0;7963:2;7943:18;;;7936:30;8002:29;7982:18;;;7975:57;8049:18;;30291:60:0::1;7896:177:1::0;30291:60:0::1;30367:9;30362:327;30386:9;:16:::0;30382:20;::::1;30362:327;;;30444:7;-1:-1:-1::0;;;;;30428:23:0::1;:9;30438:1;30428:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30428:12:0::1;:23;30424:254;;;30487:9;30497:16:::0;;:20:::1;::::0;30516:1:::1;::::0;30497:20:::1;:::i;:::-;30487:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30472:9:::1;:12:::0;;-1:-1:-1;;;;;30487:31:0;;::::1;::::0;30482:1;;30472:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30472:46:0::1;-1:-1:-1::0;;;;;30472:46:0;;::::1;;::::0;;30537:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30576:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30576:28:0::1;::::0;;30623:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30623:15:0;;;;;-1:-1:-1;;;;;;30623:15:0::1;::::0;;;;;30362:327:::1;30219:477:::0;:::o;30424:254::-:1;30404:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30362:327;;;;30219:477:::0;:::o;28046:215::-;9024:10;28136:4;28183:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28183:34:0;;;;;;;;;;28136:4;;28153:78;;28175:7;;28183:47;;28220:10;;28183:47;:::i;28783:374::-;9024:10;28837:14;28886:19;;;:11;:19;;;;;;;;28885:20;28877:76;;;;-1:-1:-1;;;28877:76:0;;10930:2:1;28877:76:0;;;10912:21:1;10969:2;10949:18;;;10942:30;11008:34;10988:18;;;10981:62;-1:-1:-1;;;11059:18:1;;;11052:42;11111:19;;28877:76:0;10902:234:1;28877:76:0;28965:15;28994:19;29005:7;28994:10;:19::i;:::-;-1:-1:-1;;;;;;;;;29042:15:0;;;;;;:7;:15;;;;;;28964:49;;-1:-1:-1;29042:25:0;;28964:49;;-1:-1:-1;29042:25:0;:::i;:::-;-1:-1:-1;;;;;29024:15:0;;;;;;:7;:15;;;;;:43;29088:7;;:17;;29098:7;;29088:17;:::i;:::-;29078:7;:27;29129:10;;:20;;29142:7;;29129:20;:::i;:::-;29116:10;:33;-1:-1:-1;;;28783:374:0:o;42946:113::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43017:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;43017:34:0::1;43047:4;43017:34;::::0;;42946:113::o;29165:449::-;29258:7;29297;;29286;:18;;29278:62;;;;-1:-1:-1;;;29278:62:0;;8280:2:1;29278:62:0;;;8262:21:1;8319:2;8299:18;;;8292:30;8358:33;8338:18;;;8331:61;8409:18;;29278:62:0;8252:181:1;29278:62:0;29356:17;29351:256;;29391:15;29420:19;29431:7;29420:10;:19::i;:::-;-1:-1:-1;29390:49:0;;-1:-1:-1;29454:14:0;;-1:-1:-1;;;;;29454:14:0;29351:256;29504:23;29539:19;29550:7;29539:10;:19::i;:::-;-1:-1:-1;29501:57:0;;-1:-1:-1;29573:22:0;;-1:-1:-1;;;;;29573:22:0;25521:191;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25603:31:0;::::1;25637:5;25603:31:::0;;;:25:::1;:31;::::0;;;;;;;;:39;;-1:-1:-1;;25603:39:0::1;::::0;;25668:36;;3911:51:1;;;25668:36:0::1;::::0;3884:18:1;25668:36:0::1;3866:102:1::0;29879:332:0;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29960:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29959:21;29951:61;;;::::0;-1:-1:-1;;;29951:61:0;;7924:2:1;29951:61:0::1;::::0;::::1;7906:21:1::0;7963:2;7943:18;;;7936:30;8002:29;7982:18;;;7975:57;8049:18;;29951:61:0::1;7896:177:1::0;29951:61:0::1;-1:-1:-1::0;;;;;30027:16:0;::::1;30046:1;30027:16:::0;;;:7:::1;:16;::::0;;;;;:20;30023:109:::1;;-1:-1:-1::0;;;;;30103:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30083:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30064:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30023:109:::1;-1:-1:-1::0;;;;;30142:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30142:27:0::1;30165:4;30142:27:::0;;::::1;::::0;;;30180:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30180:23:0::1;::::0;;::::1;::::0;;29879:332::o;26976:96::-;10898:10;11394:4;11418:19;;;:14;:19;;;;;;;;10877:48;;;;-1:-1:-1;;;10877:48:0;;11756:2:1;10877:48:0;;;11738:21:1;11795:2;11775:18;;;11768:30;-1:-1:-1;;;11814:18:1;;;11807:41;11865:18;;10877:48:0;11728:161:1;10877:48:0;27043:12:::1;:21:::0;26976:96::o;43187:120::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;43272:15:::1;:27:::0;;-1:-1:-1;;;;;;43272:27:0::1;-1:-1:-1::0;;;;;43272:27:0;;;::::1;::::0;;;::::1;::::0;;43187:120::o;43687:243::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;43797:7:::1;:19:::0;;;;43827:17;:29;;;;43867:16;:27;43905:11;:17;43687:243::o;26556:198::-;-1:-1:-1;;;;;26646:20:0;;26622:7;26646:20;;;:11;:20;;;;;;;;26642:49;;;-1:-1:-1;;;;;;26675:16:0;;;;;:7;:16;;;;;;;26556:198::o;26642:49::-;-1:-1:-1;;;;;26729:16:0;;;;;;:7;:16;;;;;;26709:37;;:19;:37::i;11797:148::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;11904:1:::1;11888:6:::0;;11867:40:::1;::::0;-1:-1:-1;;;;;11888:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;11867:40:0;11904:1;;11867:40:::1;11935:1;11918:19:::0;;-1:-1:-1;;;;;;11918:19:0::1;::::0;;11797:148::o;35217:86::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;35272:16:::1;:23:::0;;-1:-1:-1;;;;35272:23:0::1;-1:-1:-1::0;;;35272:23:0::1;::::0;;35217:86::o;28269:279::-;9024:10;28364:4;28424:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28424:34:0;;;;;;;;;;28411:106;;;;;;;;;;;;28364:4;;28381:137;;9024:10;;28403:7;;28411:106;;28424:34;28460:15;;28411:106;;;;;:12;:106::i;12942:305::-;12994:14;;-1:-1:-1;;;;;12994:14:0;13012:10;12994:28;12986:76;;;;-1:-1:-1;;;12986:76:0;;12096:2:1;12986:76:0;;;12078:21:1;12135:2;12115:18;;;12108:30;12174:34;12154:18;;;12147:62;-1:-1:-1;;;12225:18:1;;;12218:33;12268:19;;12986:76:0;12068:225:1;12986:76:0;13099:9;;13081:15;:27;13073:72;;;;-1:-1:-1;;;13073:72:0;;10570:2:1;13073:72:0;;;10552:21:1;10609:2;10589:18;;;10582:30;10648:33;10628:18;;;10621:61;10699:18;;13073:72:0;10542:181:1;13073:72:0;13190:14;;;13182:6;;13161:44;;-1:-1:-1;;;;;13190:14:0;;;;13182:6;;;;-1:-1:-1;;;;;;;;;;;13161:44:0;;13225:14;;;13216:23;;-1:-1:-1;;;;;;13216:23:0;-1:-1:-1;;;;;13225:14:0;;;13216:23;;;;;;12942:305::o;27216:169::-;27296:4;27313:42;9024:10;27337:9;27348:6;27313:9;:42::i;43315:118::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;43399:14:::1;:26:::0;;-1:-1:-1;;;;;;43399:26:0::1;-1:-1:-1::0;;;;;43399:26:0;;;::::1;::::0;;;::::1;::::0;;43315:118::o;11000:94::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11060:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;11060:26:0::1;11082:4;11060:26;::::0;;11000:94::o;44473:115::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;44542:29:::1;:38:::0;44473:115::o;44292:173::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;44371:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;44371:32:0::1;-1:-1:-1::0;;;;44371:32:0;;::::1;;::::0;;44419:38:::1;::::0;::::1;::::0;::::1;::::0;44395:8;5291:14:1;5284:22;5266:41;;5254:2;5239:18;;5221:92;45037:255:0;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45135:22:0;::::1;45127:73;;;;-1:-1:-1::0;;;45127:73:0::1;;;;;;;:::i;:::-;45211:15;:35:::0;;-1:-1:-1;;;;;;45211:35:0::1;-1:-1:-1::0;;;;;45211:35:0;::::1;;::::0;;45257:27:::1;45211:35:::0;45257:17:::1;:27::i;:::-;45037:255:::0;:::o;12599:267::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;12680:6:::1;::::0;;;12663:23;;-1:-1:-1;;;;;12680:6:0;;::::1;-1:-1:-1::0;;;;;;12663:23:0;;::::1;::::0;::::1;::::0;;;12697:22;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;12697:30:0::1;::::0;;12738:19;;::::1;::::0;;12780:22:::1;12798:4:::0;12780:15:::1;:22;:::i;:::-;12768:9;:34:::0;12855:1:::1;12839:6:::0;;12818:40:::1;::::0;-1:-1:-1;;;;;12839:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;12818:40:0;12855:1;;12818:40:::1;12599:267:::0;:::o;44596:246::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;44723:15:::1;::::0;-1:-1:-1;;;;;44701:37:0;;::::1;44723:15:::0;::::1;44701:37;;44693:94;;;::::0;-1:-1:-1;;;44693:94:0;;11343:2:1;44693:94:0::1;::::0;::::1;11325:21:1::0;11382:2;11362:18;;;11355:30;11421:34;11401:18;;;11394:62;-1:-1:-1;;;11472:18:1;;;11465:42;11524:19;;44693:94:0::1;11315:234:1::0;44693:94:0::1;44798:15;:36:::0;;-1:-1:-1;;;;;;44798:36:0::1;-1:-1:-1::0;;;;;44798:36:0;;;::::1;::::0;;;::::1;::::0;;44596:246::o;43067:112::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43136:27:0::1;43166:5;43136:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;43136:35:0::1;::::0;;43067:112::o;11170:97::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11232:19:0::1;11254:5;11232:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;11232:27:0::1;::::0;;11170:97::o;12100:325::-;10666:6;;-1:-1:-1;;;;;10666:6:0;9024:10;10666:22;10658:67;;;;-1:-1:-1;;;10658:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12189:22:0;::::1;12181:73;;;;-1:-1:-1::0;;;12181:73:0::1;;;;;;;:::i;:::-;12291:6;::::0;;12270:38:::1;::::0;-1:-1:-1;;;;;12270:38:0;;::::1;::::0;12291:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;12270:38:0;::::1;12344:5;12334:6:::0;;-1:-1:-1;;;;;12334:6:0;;::::1;12319:22:::0;;:14:::1;:22;::::0;;;;;:30;;-1:-1:-1;;12319:30:0;;::::1;::::0;;;12360:17;;-1:-1:-1;;;;;;12360:17:0::1;::::0;;;::::1;::::0;;::::1;::::0;;12388:22;;;;;;:29;;;;::::1;-1:-1:-1::0;12388:29:0::1;::::0;;12100:325::o;27080:128::-;10898:10;11394:4;11418:19;;;:14;:19;;;;;;;;10877:48;;;;-1:-1:-1;;;10877:48:0;;11756:2:1;10877:48:0;;;11738:21:1;11795:2;11775:18;;;11768:30;-1:-1:-1;;;11814:18:1;;;11807:41;11865:18;;10877:48:0;11728:161:1;10877:48:0;-1:-1:-1;;;;;27168:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27168:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27080:128::o;35445:335::-;-1:-1:-1;;;;;35536:19:0;;35528:68;;;;-1:-1:-1;;;35528:68:0;;10165:2:1;35528:68:0;;;10147:21:1;10204:2;10184:18;;;10177:30;10243:34;10223:18;;;10216:62;-1:-1:-1;;;10294:18:1;;;10287:34;10338:19;;35528:68:0;10137:226:1;35528:68:0;-1:-1:-1;;;;;35615:21:0;;35607:68;;;;-1:-1:-1;;;35607:68:0;;7521:2:1;35607:68:0;;;7503:21:1;7560:2;7540:18;;;7533:30;7599:34;7579:18;;;7572:62;-1:-1:-1;;;7650:18:1;;;7643:32;7692:19;;35607:68:0;7493:224:1;35607:68:0;-1:-1:-1;;;;;35688:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35740:32;;12444:25:1;;;35740:32:0;;12417:18:1;35740:32:0;;;;;;;35445:335;;;:::o;35788:842::-;-1:-1:-1;;;;;35874:18:0;;35866:68;;;;-1:-1:-1;;;35866:68:0;;9759:2:1;35866:68:0;;;9741:21:1;9798:2;9778:18;;;9771:30;9837:34;9817:18;;;9810:62;-1:-1:-1;;;9888:18:1;;;9881:35;9933:19;;35866:68:0;9731:227:1;35866:68:0;35962:1;35953:6;:10;35945:64;;;;-1:-1:-1;;;35945:64:0;;9349:2:1;35945:64:0;;;9331:21:1;9388:2;9368:18;;;9361:30;9427:34;9407:18;;;9400:62;-1:-1:-1;;;9478:18:1;;;9471:39;9527:19;;35945:64:0;9321:231:1;35945:64:0;36020:26;36033:4;36039:6;36020:12;:26::i;:::-;;36057:28;36088:24;36106:4;36088:9;:24::i;:::-;36174:29;;36057:55;;-1:-1:-1;36150:53:0;;;;;;;36218:40;;-1:-1:-1;36242:16:0;;-1:-1:-1;;;36242:16:0;;;;36241:17;36218:40;:76;;;;-1:-1:-1;;;;;;36263:31:0;;;;;;:25;:31;;;;;;;;36262:32;36218:76;:101;;;;-1:-1:-1;36298:21:0;;-1:-1:-1;;;36298:21:0;;;;36218:101;:128;;;;-1:-1:-1;36331:15:0;;-1:-1:-1;;;;;36323:23:0;;;36331:15;;36323:23;;36218:128;:153;;;;-1:-1:-1;36356:15:0;;-1:-1:-1;;;;;36350:21:0;;;36356:15;;36350:21;;36218:153;36214:294;;;36411:29;;36388:52;;36457:39;36475:20;36457:17;:39::i;:::-;36590:32;36605:4;36611:2;36615:6;36590:14;:32::i;:::-;35855:775;;35788:842;;;:::o;26347:201::-;26442:7;26478:12;26470:6;;;;26462:29;;;;-1:-1:-1;;;26462:29:0;;;;;;;;:::i;:::-;-1:-1:-1;26502:9:0;26514:5;26518:1;26514;:5;:::i;:::-;26502:17;26347:201;-1:-1:-1;;;;;26347:201:0:o;32571:159::-;32613:7;32634:15;32651;32670:19;:17;:19::i;:::-;32633:56;;-1:-1:-1;32633:56:0;-1:-1:-1;32707:15:0;32633:56;;32707:15;:::i;:::-;32700:22;;;;32571:159;:::o;30946:462::-;31005:7;31013;31021;31029;31037;31045;31066:23;31090:12;31103:18;31122;31141:17;31162:20;31174:7;31162:11;:20::i;:::-;31065:117;;;;;;;;;;31194:15;31211:23;31236:12;31252:68;31264:7;31272:4;31277:10;31288;31299:9;31309:10;:8;:10::i;:::-;31252:11;:68::i;:::-;31193:127;;-1:-1:-1;31193:127:0;-1:-1:-1;31193:127:0;-1:-1:-1;31368:15:0;;-1:-1:-1;31384:4:0;;-1:-1:-1;31389:10:0;;-1:-1:-1;;;;;;30946:462:0;;;;;;;:::o;26762:202::-;26838:4;26873:12;;26863:6;:22;;:49;;;-1:-1:-1;;;;;;26889:23:0;;;;;;:15;:23;;;;;;;;26863:49;26855:79;;;;-1:-1:-1;;;26855:79:0;;6357:2:1;26855:79:0;;;6339:21:1;6396:2;6376:18;;;6369:30;-1:-1:-1;;;6415:18:1;;;6408:47;6472:18;;26855:79:0;6329:167:1;36638:708:0;23456:16;:23;;-1:-1:-1;;;;23456:23:0;-1:-1:-1;;;23456:23:0;;;36832:16;;36814:15;;36832:7:::1;36797:14:::0;36814:6:::1;36781:13:::0;36761:17;;36742:16;;23456:23;;36832:16;36814:15;36797:14;36781:13;36742:36:::1;::::0;::::1;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;:87;;;;:::i;:::-;:106;;;;:::i;:::-;36927:17:::0;;36908:16;;36726:122;;-1:-1:-1;36861:20:0::1;::::0;36726:122;;36908:36:::1;::::0;::::1;:::i;:::-;36884:61;::::0;:20;:61:::1;:::i;:::-;:69;;;;:::i;:::-;36861:92;;36964:30;36981:12;36964:16;:30::i;:::-;37070:7;:14:::0;37054:6:::1;:13:::0;37007:20:::1;::::0;37088:5;;37054:30:::1;::::0;37070:14;37054:30:::1;:::i;:::-;37030:55;::::0;:20;:55:::1;:::i;:::-;:63;;;;:::i;:::-;37007:86;;37104:28;37119:12;37104:14;:28::i;:::-;37145:19;37191:27;37206:12:::0;37191;:27:::1;:::i;:::-;37167:52;::::0;:20;:52:::1;:::i;:::-;37145:74;;37230:27;37245:11;37230:14;:27::i;:::-;37280:58;::::0;;13667:25:1;;;13723:2;13708:18;;13701:34;;;13751:18;;;13744:34;;;37280:58:0::1;::::0;13655:2:1;13640:18;37280:58:0::1;;;;;;;-1:-1:-1::0;;23502:16:0;:24;;-1:-1:-1;;;;23502:24:0;;;-1:-1:-1;;;36638:708:0:o;39344:960::-;-1:-1:-1;;;;;39441:26:0;;;;;;:18;:26;;;;;;;;39440:27;:61;;;;-1:-1:-1;;;;;;39472:29:0;;;;;;:18;:29;;;;;;;;39471:30;39440:61;39436:354;;;39526:16;;-1:-1:-1;;;39526:16:0;;;;39518:48;;;;-1:-1:-1;;;39518:48:0;;8640:2:1;39518:48:0;;;8622:21:1;8679:2;8659:18;;;8652:30;-1:-1:-1;;;8698:18:1;;;8691:49;8757:18;;39518:48:0;8612:169:1;39518:48:0;-1:-1:-1;;;;;39587:33:0;;;;;;:25;:33;;;;;;;;:41;;:33;:41;39583:196;;;39649:11;34861:10;;34851:7;:20;34861:6;34898:13;34882;:29;34938:16;;34922:13;:32;34980:15;;34965:12;:30;34811:192;39649:11;39583:196;;;-1:-1:-1;;;;;39686:36:0;;;;;;:25;:36;;;;;;;;:44;;:36;:44;39682:97;;;39751:12;35062:11;;35052:7;:21;35062:7;35100:14;35084:13;:30;35141:17;;35125:13;:33;35184:16;;35169:12;:31;35011:198;39751:12;-1:-1:-1;;;;;39806:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;39830:22:0;;;;;;:11;:22;;;;;;;;39829:23;39806:46;39802:467;;;39869:48;39891:6;39899:9;39910:6;39869:21;:48::i;:::-;39802:467;;;-1:-1:-1;;;;;39940:19:0;;;;;;:11;:19;;;;;;;;39939:20;:46;;;;-1:-1:-1;;;;;;39963:22:0;;;;;;:11;:22;;;;;;;;39939:46;39935:334;;;40002:46;40022:6;40030:9;40041:6;40002:19;:46::i;39935:334::-;-1:-1:-1;;;;;40070:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40093:22:0;;;;;;:11;:22;;;;;;;;40070:45;40066:203;;;40132:48;40154:6;40162:9;40173:6;40132:21;:48::i;40066:203::-;40213:44;40231:6;40239:9;40250:6;40213:17;:44::i;:::-;40281:15;34711:1;34701:7;:11;;;34723:13;:17;;;34751:13;:17;;;34779:12;:16;34657:146;40281:15;39344:960;;;:::o;32738:549::-;32836:7;;32872;;32789;;;;;32890:283;32914:9;:16;32910:20;;32890:283;;;32980:7;32956;:21;32964:9;32974:1;32964:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32964:12:0;32956:21;;;;;;;;;;;;;:31;;:66;;;33015:7;32991;:21;32999:9;33009:1;32999:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32999:12:0;32991:21;;;;;;;;;;;;;:31;32956:66;32952:97;;;33032:7;;33041;;33024:25;;;;;;;32738:549;;:::o;32952:97::-;33084:7;:21;33092:9;33102:1;33092:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33092:12:0;33084:21;;;;;;;;;;;;;33074:31;;:7;:31;:::i;:::-;33064:41;;33140:7;:21;33148:9;33158:1;33148:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33148:12:0;33140:21;;;;;;;;;;;;;33130:31;;:7;:31;:::i;:::-;33120:41;-1:-1:-1;32932:3:0;;;;:::i;:::-;;;;32890:283;;;;33208:7;;33198;;:17;;;;:::i;:::-;33187:7;:29;33183:60;;;33226:7;;33235;;33218:25;;;;;;32738:549;;:::o;33183:60::-;33262:7;;33271;;-1:-1:-1;32738:549:0;-1:-1:-1;32738:549:0:o;31416:556::-;31476:7;31484;31492;31500;31508;31528:12;31543:24;31559:7;31543:15;:24::i;:::-;31528:39;;31578:18;31599:30;31621:7;31599:21;:30::i;:::-;31578:51;;31640:18;31661:30;31683:7;31661:21;:30::i;:::-;31640:51;;31702:17;31722:29;31743:7;31722:20;:29::i;:::-;31702:49;-1:-1:-1;31762:23:0;31799:17;31806:10;31799:4;:17;:::i;:::-;31788:29;;:7;:29;:::i;:::-;31762:55;-1:-1:-1;31865:22:0;31878:9;31865:10;:22;:::i;:::-;31846:42;;:15;:42;:::i;:::-;31828:60;31924:4;;-1:-1:-1;31930:10:0;;-1:-1:-1;31942:10:0;;-1:-1:-1;31930:10:0;-1:-1:-1;31416:556:0;;-1:-1:-1;;;31416:556:0:o;31980:583::-;32129:7;;;;32183:21;32193:11;32183:7;:21;:::i;:::-;32165:39;-1:-1:-1;32215:12:0;32230:18;32237:11;32230:4;:18;:::i;:::-;32215:33;-1:-1:-1;32259:18:0;32280:24;32293:11;32280:10;:24;:::i;:::-;32259:45;-1:-1:-1;32315:18:0;32336:24;32349:11;32336:10;:24;:::i;:::-;32315:45;-1:-1:-1;32371:17:0;32391:23;32403:11;32391:9;:23;:::i;:::-;32371:43;-1:-1:-1;32425:23:0;32371:43;32482:10;32462:17;32469:10;32462:4;:17;:::i;:::-;:30;;;;:::i;:::-;:42;;;;:::i;:::-;32451:54;;:7;:54;:::i;:::-;32524:7;;;;-1:-1:-1;32550:4:0;;-1:-1:-1;31980:583:0;;-1:-1:-1;;;;;;;;;;;31980:583:0:o;37782:272::-;37877:4;37868:23;37903:24;37920:6;37903:16;:24::i;:::-;37938:18;37959:40;37985:14;37968:4;37959:23;:40;:::i;:::-;38010:15;;:36;;37938:61;;-1:-1:-1;;;;;;38010:15:0;;:36;;;;;37938:61;;38010:15;:36;:15;:36;37938:61;38010:15;:36;;;;;;;;;;;;;;;;;;;;;37832:222;;37782:272;:::o;38062:411::-;38121:12;38136:10;38145:1;38136:6;:10;:::i;:::-;38121:25;-1:-1:-1;38157:17:0;38177:13;38121:25;38177:6;:13;:::i;:::-;38157:33;-1:-1:-1;38228:21:0;38262:22;38279:4;38262:16;:22::i;:::-;38297:18;38318:38;38342:14;38318:21;:38;:::i;:::-;38297:59;;38369:35;38382:9;38393:10;38369:12;:35::i;:::-;38422:43;;;13667:25:1;;;13723:2;13708:18;;13701:34;;;13751:18;;;13744:34;;;38422:43:0;;13655:2:1;13640:18;38422:43:0;;;;;;;38110:363;;;;38062:411;:::o;37358:416::-;37420:19;37443:10;:8;:10::i;:::-;37420:33;-1:-1:-1;37464:17:0;37484:23;37420:33;37484:9;:23;:::i;:::-;37552:14;;-1:-1:-1;;;;;37552:14:0;37544:23;;;;:7;:23;;;;;;37464:43;;-1:-1:-1;37544:35:0;;37464:43;;37544:35;:::i;:::-;37526:14;;-1:-1:-1;;;;;37526:14:0;37518:23;;;;:7;:23;;;;;;:61;;;;37631:4;37615:22;;;;:34;;37640:9;;37615:34;:::i;:::-;37606:4;37590:22;;;;:7;:22;;;;;;;;:59;;;;37675:14;;-1:-1:-1;;;;;37675:14:0;37663:27;;:11;:27;;;;;;37660:106;;;37739:14;;-1:-1:-1;;;;;37739:14:0;37731:23;;;;:7;:23;;;;;;:35;;37757:9;;37731:35;:::i;:::-;37713:14;;-1:-1:-1;;;;;37713:14:0;37705:23;;;;:7;:23;;;;;:61;37409:365;;37358:416;:::o;41572:645::-;41673:15;41689:23;41713:12;41726:23;41750:12;41763:18;41785:19;41796:7;41785:10;:19::i;:::-;-1:-1:-1;;;;;41833:15:0;;;;;;:7;:15;;;;;;41672:132;;-1:-1:-1;41672:132:0;;-1:-1:-1;41672:132:0;;-1:-1:-1;41672:132:0;-1:-1:-1;41672:132:0;-1:-1:-1;41672:132:0;-1:-1:-1;41833:25:0;;41851:7;;41833:25;:::i;:::-;-1:-1:-1;;;;;41815:15:0;;;;;;:7;:15;;;;;;;;:43;;;;41887:7;:15;;;;:25;;41905:7;;41887:25;:::i;:::-;-1:-1:-1;;;;;41869:15:0;;;;;;;:7;:15;;;;;;:43;;;;41944:18;;;;;;;:36;;41965:15;;41944:36;:::i;:::-;-1:-1:-1;;;;;41923:18:0;;;;;;:7;:18;;;;;:57;41991:26;42006:10;41991:14;:26::i;:::-;42028:87;42054:30;42076:7;42054:21;:30::i;:::-;42085:29;42106:7;42085:20;:29::i;:::-;42028:25;:87::i;:::-;42126:23;42138:4;42144;42126:11;:23::i;:::-;42182:9;-1:-1:-1;;;;;42165:44:0;42174:6;-1:-1:-1;;;;;42165:44:0;;42193:15;42165:44;;;;12444:25:1;;12432:2;12417:18;;12399:76;42165:44:0;;;;;;;;41661:556;;;;;;41572:645;;;:::o;40907:657::-;41006:15;41022:23;41046:12;41059:23;41083:12;41096:18;41118:19;41129:7;41118:10;:19::i;:::-;-1:-1:-1;;;;;41166:15:0;;;;;;:7;:15;;;;;;41005:132;;-1:-1:-1;41005:132:0;;-1:-1:-1;41005:132:0;;-1:-1:-1;41005:132:0;-1:-1:-1;41005:132:0;-1:-1:-1;41005:132:0;-1:-1:-1;41166:25:0;;41005:132;;41166:25;:::i;:::-;-1:-1:-1;;;;;41148:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;41223:18;;;;;:7;:18;;;;;:36;;41244:15;;41223:36;:::i;:::-;-1:-1:-1;;;;;41202:18:0;;;;;;:7;:18;;;;;;;;:57;;;;41291:7;:18;;;;:36;;41312:15;;41291:36;:::i;42225:713::-;42326:15;42342:23;42366:12;42379:23;42403:12;42416:18;42438:19;42449:7;42438:10;:19::i;:::-;-1:-1:-1;;;;;42486:15:0;;;;;;:7;:15;;;;;;42325:132;;-1:-1:-1;42325:132:0;;-1:-1:-1;42325:132:0;;-1:-1:-1;42325:132:0;-1:-1:-1;42325:132:0;-1:-1:-1;42325:132:0;-1:-1:-1;42486:25:0;;42504:7;;42486:25;:::i;:::-;-1:-1:-1;;;;;42468:15:0;;;;;;:7;:15;;;;;;;;:43;;;;42540:7;:15;;;;:25;;42558:7;;42540:25;:::i;40312:587::-;40409:15;40425:23;40449:12;40462:23;40486:12;40499:18;40521:19;40532:7;40521:10;:19::i;:::-;-1:-1:-1;;;;;40569:15:0;;;;;;:7;:15;;;;;;40408:132;;-1:-1:-1;40408:132:0;;-1:-1:-1;40408:132:0;;-1:-1:-1;40408:132:0;-1:-1:-1;40408:132:0;-1:-1:-1;40408:132:0;-1:-1:-1;40569:25:0;;40408:132;;40569:25;:::i;34111:120::-;34175:7;34218:5;34210:7;;34202;:15;;;;:::i;:::-;:21;;;;:::i;34239:132::-;34309:7;34358:5;34344:13;;34336:7;:21;;;;:::i;34517:132::-;34587:7;34636:5;34622:13;;34614:7;:21;;;;:::i;34379:130::-;34448:7;34496:5;34483:12;;34475:7;:20;;;;:::i;38481:475::-;38571:16;;;38585:1;38571:16;;;;;;;;38547:21;;38571:16;;;;;;;;;;-1:-1:-1;38571:16:0;38547:40;;38616:4;38598;38603:1;38598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38598:23:0;;;:7;;;;;;;;;;:23;;;;38642:15;;:22;;;-1:-1:-1;;;38642:22:0;;;;:15;;;;;:20;;:22;;;;;38598:7;;38642:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38632:4;38637:1;38632:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38632:32:0;;;:7;;;;;;;;;;:32;;;;38709:15;38677:62;;38694:4;;38709:15;38727:11;38677:8;:62::i;:::-;38752:15;;:196;;-1:-1:-1;;;38752:196:0;;-1:-1:-1;;;;;38752:15:0;;;;:66;;:196;;38833:11;;38752:15;;38875:4;;38902;;38922:15;;38752:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38536:420;38481:475;:::o;38966:370::-;39079:15;;39047:62;;39064:4;;-1:-1:-1;;;;;39079:15:0;39097:11;39047:8;:62::i;:::-;39122:15;;39272;;39122:206;;-1:-1:-1;;;39122:206:0;;39194:4;39122:206;;;4855:34:1;4905:18;;;4898:34;;;39122:15:0;4948:18:1;;;4941:34;;;4991:18;;;4984:34;-1:-1:-1;;;;;39272:15:0;;;5034:19:1;;;5027:44;39302:15:0;5087:19:1;;;5080:35;39122:15:0;;;:31;;39161:9;;4789:19:1;;39122:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33295:346::-;33358:19;33380:10;:8;:10::i;:::-;33358:32;-1:-1:-1;33401:18:0;33422:24;33358:32;33422:10;:24;:::i;:::-;33498:4;33482:22;;;;:7;:22;;;;;;33401:45;;-1:-1:-1;33482:35:0;;33401:45;;33482:35;:::i;:::-;33473:4;33457:22;;;;:7;:22;;;;;;;;:60;;;;33532:11;:26;;;;;;33528:105;;;33614:4;33598:22;;;;:7;:22;;;;;;:35;;33623:10;;33598:35;:::i;:::-;33589:4;33573:22;;;;:7;:22;;;;;:60;33347:294;;33295:346;:::o;33649:454::-;33742:19;33764:10;:8;:10::i;:::-;33742:32;-1:-1:-1;33785:18:0;33806:22;33742:32;33806:10;:22;:::i;:::-;33785:43;-1:-1:-1;33839:17:0;33859:21;33869:11;33859:9;:21;:::i;:::-;33839:41;-1:-1:-1;33942:22:0;33954:10;33839:41;33942:22;:::i;:::-;33932:4;33916:22;;;;:7;:22;;;;;;:49;;;;:::i;:::-;33907:4;33891:22;;;;:7;:22;;;;;;;;:74;;;;33980:11;:26;;;;;;33976:119;;;34072:22;34085:9;34072:10;:22;:::i;:::-;34062:4;34046:22;;;;:7;:22;;;;;;:49;;;;:::i;:::-;34037:4;34021:22;;;;:7;:22;;;;;:74;33731:372;;;33649:454;;:::o;30797:141::-;30885:4;30875:7;;:14;;;;:::i;:::-;30865:7;:24;30913:10;;:17;;30926:4;;30913:17;:::i;:::-;30900:10;:30;-1:-1:-1;;30797:141:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;947:388::-;1015:6;1023;1076:2;1064:9;1055:7;1051:23;1047:32;1044:2;;;1092:1;1089;1082:12;1044:2;1131:9;1118:23;1150:31;1175:5;1150:31;:::i;:::-;1200:5;-1:-1:-1;1257:2:1;1242:18;;1229:32;1270:33;1229:32;1270:33;:::i;:::-;1322:7;1312:17;;;1034:301;;;;;:::o;1340:456::-;1417:6;1425;1433;1486:2;1474:9;1465:7;1461:23;1457:32;1454:2;;;1502:1;1499;1492:12;1454:2;1541:9;1528:23;1560:31;1585:5;1560:31;:::i;:::-;1610:5;-1:-1:-1;1667:2:1;1652:18;;1639:32;1680:33;1639:32;1680:33;:::i;:::-;1444:352;;1732:7;;-1:-1:-1;;;1786:2:1;1771:18;;;;1758:32;;1444:352::o;1801:315::-;1866:6;1874;1927:2;1915:9;1906:7;1902:23;1898:32;1895:2;;;1943:1;1940;1933:12;1895:2;1982:9;1969:23;2001:31;2026:5;2001:31;:::i;:::-;2051:5;-1:-1:-1;2075:35:1;2106:2;2091:18;;2075:35;:::i;:::-;2065:45;;1885:231;;;;;:::o;2121:315::-;2189:6;2197;2250:2;2238:9;2229:7;2225:23;2221:32;2218:2;;;2266:1;2263;2256:12;2218:2;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;2426:2;2411:18;;;;2398:32;;-1:-1:-1;;;2208:228:1:o;2441:180::-;2497:6;2550:2;2538:9;2529:7;2525:23;2521:32;2518:2;;;2566:1;2563;2556:12;2518:2;2589:26;2605:9;2589:26;:::i;2626:180::-;2685:6;2738:2;2726:9;2717:7;2713:23;2709:32;2706:2;;;2754:1;2751;2744:12;2706:2;-1:-1:-1;2777:23:1;;2696:110;-1:-1:-1;2696:110:1:o;2811:248::-;2876:6;2884;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2989:9;2976:23;2966:33;;3018:35;3049:2;3038:9;3034:18;3018:35;:::i;3064:306::-;3152:6;3160;3168;3221:2;3209:9;3200:7;3196:23;3192:32;3189:2;;;3237:1;3234;3227:12;3189:2;3266:9;3260:16;3250:26;;3316:2;3305:9;3301:18;3295:25;3285:35;;3360:2;3349:9;3345:18;3339:25;3329:35;;3179:191;;;;;:::o;3375:385::-;3461:6;3469;3477;3485;3538:3;3526:9;3517:7;3513:23;3509:33;3506:2;;;3555:1;3552;3545:12;3506:2;-1:-1:-1;;3578:23:1;;;3648:2;3633:18;;3620:32;;-1:-1:-1;3699:2:1;3684:18;;3671:32;;3750:2;3735:18;3722:32;;-1:-1:-1;3496:264:1;-1:-1:-1;3496:264:1:o;5553:597::-;5665:4;5694:2;5723;5712:9;5705:21;5755:6;5749:13;5798:6;5793:2;5782:9;5778:18;5771:34;5823:1;5833:140;5847:6;5844:1;5841:13;5833:140;;;5942:14;;;5938:23;;5932:30;5908:17;;;5927:2;5904:26;5897:66;5862:10;;5833:140;;;5991:6;5988:1;5985:13;5982:2;;;6061:1;6056:2;6047:6;6036:9;6032:22;6028:31;6021:42;5982:2;-1:-1:-1;6134:2:1;6113:15;-1:-1:-1;;6109:29:1;6094:45;;;;6141:2;6090:54;;5674:476;-1:-1:-1;;;5674:476:1:o;6912:402::-;7114:2;7096:21;;;7153:2;7133:18;;;7126:30;7192:34;7187:2;7172:18;;7165:62;-1:-1:-1;;;7258:2:1;7243:18;;7236:36;7304:3;7289:19;;7086:228::o;8786:356::-;8988:2;8970:21;;;9007:18;;;9000:30;9066:34;9061:2;9046:18;;9039:62;9133:2;9118:18;;8960:182::o;12480:980::-;12742:4;12790:3;12779:9;12775:19;12821:6;12810:9;12803:25;12847:2;12885:6;12880:2;12869:9;12865:18;12858:34;12928:3;12923:2;12912:9;12908:18;12901:31;12952:6;12987;12981:13;13018:6;13010;13003:22;13056:3;13045:9;13041:19;13034:26;;13095:2;13087:6;13083:15;13069:29;;13116:1;13126:195;13140:6;13137:1;13134:13;13126:195;;;13205:13;;-1:-1:-1;;;;;13201:39:1;13189:52;;13296:15;;;;13261:12;;;;13237:1;13155:9;13126:195;;;-1:-1:-1;;;;;;;13377:32:1;;;;13372:2;13357:18;;13350:60;-1:-1:-1;;;13441:3:1;13426:19;13419:35;13338:3;12751:709;-1:-1:-1;;;12751:709:1:o;14374:128::-;14414:3;14445:1;14441:6;14438:1;14435:13;14432:2;;;14451:18;;:::i;:::-;-1:-1:-1;14487:9:1;;14422:80::o;14507:217::-;14547:1;14573;14563:2;;14617:10;14612:3;14608:20;14605:1;14598:31;14652:4;14649:1;14642:15;14680:4;14677:1;14670:15;14563:2;-1:-1:-1;14709:9:1;;14553:171::o;14729:168::-;14769:7;14835:1;14831;14827:6;14823:14;14820:1;14817:21;14812:1;14805:9;14798:17;14794:45;14791:2;;;14842:18;;:::i;:::-;-1:-1:-1;14882:9:1;;14781:116::o;14902:125::-;14942:4;14970:1;14967;14964:8;14961:2;;;14975:18;;:::i;:::-;-1:-1:-1;15012:9:1;;14951:76::o;15032:135::-;15071:3;-1:-1:-1;;15092:17:1;;15089:2;;;15112:18;;:::i;:::-;-1:-1:-1;15159:1:1;15148:13;;15079:88::o;15172:127::-;15233:10;15228:3;15224:20;15221:1;15214:31;15264:4;15261:1;15254:15;15288:4;15285:1;15278:15;15304:127;15365:10;15360:3;15356:20;15353:1;15346:31;15396:4;15393:1;15386:15;15420:4;15417:1;15410:15;15436:127;15497:10;15492:3;15488:20;15485:1;15478:31;15528:4;15525:1;15518:15;15552:4;15549:1;15542:15;15700:131;-1:-1:-1;;;;;15775:31:1;;15765:42;;15755:2;;15821:1;15818;15811:12

Swarm Source

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