ETH Price: $2,543.94 (+2.36%)

Token

Dramatic Chimpmunk Coin ($MUNK)
 

Overview

Max Total Supply

100,000,000 $MUNK

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.72223226 $MUNK

Value
$0.00
0x0c22a545c58de142761a15962a5c553be47bcc01
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:
MUNK

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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");

        (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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/1_Storage.sol



/*

Telegram: 

Twitter: 

Website: 

*/




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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity >=0.8.18;

contract MUNK is IERC20, Ownable {
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant TOTALSUPPLY = 100000000 * 10**9;

    string private constant NAME = "Dramatic Chimpmunk Coin";
    string private constant SYMBOL = "$MUNK";
    uint8 private constant DECIMALS = 9;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool private inSwapAndLiquify;
    bool private sell = false;

    struct Taxes {
        uint32 liquidity;
        uint32 marketing;
        uint32 utility;
        uint32 team;
    }

    struct Wallets {
        address payable marketingWallet;
        address payable utilityWallet;
        address payable teamWallet;
    }

    struct Settings {
        bool swapAndLiquifyEnabled;
    }

    struct Config {
        uint256  numTokensSellToSwap;
        uint256  maxWalletSize;
    }

    struct Ratios {
        uint256 totalLiquidity;
        uint256 totalMarketing;
        uint256 totalTeam;
        uint256 totalUtility;
    }

    Wallets public wallets =
        Wallets({
            marketingWallet: payable(
                0x9FC33cF73cF56A51e76023996EA3185DC0428458
            ),
            utilityWallet: payable(
                0x9FC33cF73cF56A51e76023996EA3185DC0428458
            ),
            teamWallet: payable(0x9FC33cF73cF56A51e76023996EA3185DC0428458)
        });

    Taxes public buyTaxes =
        Taxes({
            liquidity: 0,
            marketing: 2000,
            utility: 0,
            team: 0

        });

    
    Taxes public sellTaxes =
        Taxes({
            liquidity: 0,
            marketing: 10000,
            utility: 0,
            team: 0

        });

    Settings public settings =
        Settings({
            swapAndLiquifyEnabled: true
        });

    Ratios private ratios =
        Ratios({
            totalLiquidity: 0,
            totalMarketing: 0,
            totalTeam: 0,
            totalUtility: 0
        });

    Config public config =
        Config({
            maxWalletSize: 1000000 * 10**9, //1%
            numTokensSellToSwap: 200000 * 10**9 //0.2%

        });

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

    constructor() payable {

        _balance[owner()] = TOTALSUPPLY;
        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;

        // exclude owner and this contract from fee and maxWallet
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;

        emit Transfer(address(0), owner(), TOTALSUPPLY);
    }

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

    function name() public pure returns (string memory) {
        return NAME;
    }

    function symbol() public pure returns (string memory) {
        return SYMBOL;
    }

    function decimals() public pure returns (uint8) {
        return DECIMALS;
    }

    function totalSupply() public pure override returns (uint256) {
        return TOTALSUPPLY;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        _approve(
            sender,
            _msgSender(),
            _allowances[sender][msg.sender] - amount
        );
        return true;
    }

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

    //Set Sell Taxes Functions. Capped at 10%

    function setSellTaxes(
        uint32 liquidity,
        uint32 marketing,
        uint32 utility,
        uint32 team
    ) external onlyOwner {
        sellTaxes.liquidity = liquidity;
        sellTaxes.marketing = marketing;
        sellTaxes.utility = utility;
        sellTaxes.team = team;


    }

      //Set BUy Taxes Functions. Capped at 10%

    function setBuyTaxes(
        uint32 liquidity,
        uint32 marketing,
        uint32 utility,
        uint32 team
    ) external onlyOwner {
        buyTaxes.liquidity = liquidity;
        buyTaxes.marketing = marketing;
        buyTaxes.utility = utility;
        buyTaxes.team = team;
    }

    //Update wallet functions

    function updateWallets(
        address payable marketingWallet,
        address payable utilityWallet,
        address payable teamAWallet
    ) external onlyOwner {
        wallets.utilityWallet =  utilityWallet;
        wallets.marketingWallet = marketingWallet;
        wallets.teamWallet = teamAWallet;
    }

    //Include/Exclude from fees functions

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

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

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

    //Include/Exclude from maxwallets functions

    function excludeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = true;
    }

    function includeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = false;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

    //Set swap on/off & change value

    function setSwapValue(bool _enabled, uint32 amount) external onlyOwner {
        require(amount >= 0, "Swap value too low. It must be above 0.");
        config.numTokensSellToSwap = amount;
        settings.swapAndLiquifyEnabled = _enabled;
    }

    //Set maxwallet size.
    //Limit is set on how low it can be set.

    function setMaxWallet(uint256 amount) external onlyOwner {
        require(amount >= 100000 * 10**9, "Max wallet size is too low");
        config.maxWalletSize = amount;
    }

    //Calculate the taxes for each transaction

    function calculateTaxes(uint256 amount)
        private
        view
        returns (uint256,uint256, uint256,uint256)
    {
        if (sell == true) {
            return (
                (amount * (sellTaxes.liquidity)) / (10000),
                (amount * (sellTaxes.marketing)) / (10000),
                (amount * (sellTaxes.utility)) / (10000),
                (amount * (sellTaxes.team)) / (10000)
            );
        } else {
            return (
                (amount * (buyTaxes.liquidity)) / (10000),
                (amount * (buyTaxes.marketing)) / (10000),
                (amount * (buyTaxes.utility)) / (10000),
                (amount * (buyTaxes.team)) / (10000)
            );
        }
    }

    //main transfer function

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));
        sell = false;

        if (to == uniswapV2Pair) {
            sell = true;
        }

        //swap if conditions are met

        bool overMinTokenBalance = contractTokenBalance >= config.numTokensSellToSwap;
        if (
            from != uniswapV2Pair &&
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            settings.swapAndLiquifyEnabled
        ) {
            swapAndLiquify(contractTokenBalance);
        }

        //check if enabled for tax free

        bool takeFee = true;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        _transferStandard(from, to, amount, takeFee);
    }

     function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {       


    if ((sender==owner() || recipient==owner() ))
    {
            _balance[recipient] = _balance[recipient]+(tAmount);
            _balance[sender] = _balance[sender]-(tAmount);   

            emit Transfer(sender, recipient, tAmount);                    
    }


    else
    {
        if (takeFee == true) 
        {
            if (recipient != uniswapV2Pair && (_isExcludedFromMaxWallet[sender]!=true ||_isExcludedFromMaxWallet[recipient]!=true)) {
                require(
                    (balanceOf(recipient) + (tAmount)) <= config.maxWalletSize,
                    "Transfer exceeds max wallet size"
                );
                
            }

            (uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam) = calculateTaxes(tAmount);
            uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam)-(tMarketing)-(tUtility);

            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tTransferAmount);
            transferTaxes(sender, tLiquidity, tMarketing, tUtility, tTeam);

            ratios.totalLiquidity += tLiquidity;
            ratios.totalMarketing += tMarketing;
            ratios.totalUtility += tUtility;
            ratios.totalTeam += tTeam;

            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tAmount);
            emit Transfer(sender, recipient, tAmount);
        }
    }

    }

    //swap code

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        //calculate the taxes ratios

        uint256 marketingPercent = (ratios.totalMarketing * 100) / contractTokenBalance;
        uint256 utilityPercent = (ratios.totalUtility * 100) / contractTokenBalance;
        uint256 teamPercent =  (ratios.totalTeam * 100) / contractTokenBalance;

        //Swap liquidty if liquidity tax is enabled.

        if (buyTaxes.liquidity != 0 || sellTaxes.liquidity != 0) {
           uint256 liquidtyPercent = (ratios.totalLiquidity*100)/contractTokenBalance;  
            
            
            uint256 liquidityTokenPortion = contractTokenBalance/(100)*(liquidtyPercent);
            liquidityTokenPortion = liquidityTokenPortion/(2);

            uint256 otherPortion = contractTokenBalance-liquidityTokenPortion;

            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(otherPortion); 

            uint256 liquidtyDivisor = liquidtyPercent/(2);
            uint256 divisor = marketingPercent + utilityPercent  + teamPercent + liquidtyDivisor;

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

            uint256 liquidityETHPortion = (newBalance*100)/(divisor);
            liquidityETHPortion = (liquidityETHPortion/(100))*(liquidtyDivisor);

            uint256 newBalanceAfterLiquidty = address(this).balance-(liquidityETHPortion);

            uint256 total = 100-liquidtyPercent;

            transferToWallets(newBalanceAfterLiquidty, total, marketingPercent, utilityPercent, teamPercent);

             // add liquidity to uniswap
            addLiquidity(liquidityTokenPortion, liquidityETHPortion);
        }

        //if no liquidty tax, then just swap the other taxes

        else
        {
            swapTokensForEth(contractTokenBalance); 
            uint256 balance = address(this).balance;
            transferToWallets(balance, 100, marketingPercent, utilityPercent, teamPercent);
            

        }

        resetRatioCounters();
    }

    //transfer swapped eth to wallets

    function transferToWallets(
        uint256 balance,
        uint256 total,
        uint256 marketingPercent,
        uint256 utilityPercent,
        uint256 teamPercent
    ) private {

        if (buyTaxes.marketing != 0 || sellTaxes.marketing != 0) {
            uint256 marketing = (balance / (total)) * (marketingPercent);

            if (marketing > 0) {
                payable(wallets.marketingWallet).transfer(marketing);
            }
        }

        if (buyTaxes.utility != 0 || sellTaxes.utility != 0) {
            uint256 utility = (balance / (total)) * (utilityPercent);

            if (utility > 0) {
                payable(wallets.utilityWallet).transfer(utility);
            }
        }

        if (buyTaxes.team != 0 || sellTaxes.team != 0) {
            uint256 team = (balance / (total)) * (teamPercent);

            if (team > 0) {
                payable(wallets.teamWallet).transfer(team);
            }
        }
    }

    //swap tokens to eth

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //auto-add liquidity

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //transfer taxes

    function transferTaxes(
        address sender,
        uint256 tLiquidity,
        uint256 tMarketing,
        uint256 tUtility,
        uint256 tTeam
    ) internal {
        uint256 totalTaxes = tLiquidity + tMarketing + tUtility + tTeam;

        _balance[address(this)] = _balance[address(this)] + (tLiquidity);
        _balance[address(this)] = _balance[address(this)] + (tUtility);
        _balance[address(this)] = _balance[address(this)] + (tMarketing);
        _balance[address(this)] = _balance[address(this)] + (tTeam);

        emit Transfer(sender, address(this), totalTaxes);
    }

    //Disable limits
    //Can only be called by team wallet

    function disableLimt() external {
        require(msg.sender == wallets.teamWallet);
        config.maxWalletSize = MAX;
        settings.swapAndLiquifyEnabled = false;
    }

    //Manually pull eth from contract
    //Can only be called by team wallet

    function manualETH(uint256 amountPercentage) external {
        require(msg.sender == wallets.teamWallet);
        uint256 amountETH = address(this).balance;
        payable(owner()).transfer((amountETH * amountPercentage) / 100);
    }

    //Manually pull tokens from contract
    //Can only be called by team wallet

    function manualToken() external {
        require(msg.sender == wallets.teamWallet);
        uint256 amountToken = balanceOf(address(this));
        swapAndLiquify(amountToken);
        resetRatioCounters();
        emit Transfer(address(this), owner(), (amountToken));
    }

    //reset the ratio counters once a swap occurs

    function resetRatioCounters() internal {
        ratios.totalUtility = 0;
        ratios.totalMarketing = 0;
        ratios.totalLiquidity = 0;
        ratios.totalTeam = 0;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint256","name":"numTokensSellToSwap","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableLimt","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":"excludeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settings","outputs":[{"internalType":"bool","name":"swapAndLiquifyEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"utilityWallet","type":"address"},{"internalType":"address payable","name":"teamAWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallets","outputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"utilityWallet","type":"address"},{"internalType":"address payable","name":"teamWallet","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805460ff60a81b19169055739fc33cf73cf56a51e76023996ea3185dc0428458608081905260a081905260c0819052600780546001600160a01b0319908116831790915560088054821683179055600980549091169091179055600060e08190526107d061010052610120819052610140819052600a80546001600160801b03199081166507d00000000017909155610160829052612710610180526101a08290526101c0829052600b80549091166527100000000017905560016101e0819052600c805460ff19169091179055610200819052610220819052610240819052610260819052600d819055600e819055600f8190556010556102c060405265b5e620f4800061028081905266038d7ea4c680006102a0819052601191909155601255620001356200012f3390565b62000430565b67016345785d8a000060016000620001556000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000480565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b919062000480565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df919062000480565b600680546001600160a01b03199081166001600160a01b039384161790915560058054909116918316919091179055600160036000620003276000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526003909252812080549092166001908117909255600490620003806000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003d36000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a00006040516200042191815260200190565b60405180910390a350620004b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200049357600080fd5b81516001600160a01b0381168114620004ab57600080fd5b9392505050565b611f9480620004c26000396000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063c827a978116100a0578063df0d18961161006f578063df0d1896146106cd578063e06174e4146106ed578063ea2f0b3714610707578063f2fde38b14610727578063f66895a31461074757600080fd5b8063c827a978146105fb578063d2f4a50a14610610578063d37e18b714610667578063dd62ed3e1461068757600080fd5b806395d89b41116100dc57806395d89b41146105785780639725cd5b146105a657806397bfcda3146105bb578063a9059cbb146105db57600080fd5b8063715018a6146104a957806379502c55146104be578063864701a5146104ee5780638da5cb5b1461055a57600080fd5b80633f33e909116101855780635342acb4116101545780635342acb4146103e15780635d0044ca1461041a5780636dd3d39f1461043a57806370a082311461047357600080fd5b80633f33e90914610361578063437823ec1461038157806344e31583146103a157806349bd5a5e146103c157600080fd5b806318160ddd116101c157806318160ddd146102e057806320c51fd71461030557806323b872dd14610325578063313ce5671461034557600080fd5b806306fdde03146101fe578063095ea7b314610256578063147c9f6d146102865780631694505e146102a857600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601781527f4472616d61746963204368696d706d756e6b20436f696e00000000000000000060208201525b60405161024d9190611bbf565b60405180910390f35b34801561026257600080fd5b50610276610271366004611c22565b610783565b604051901515815260200161024d565b34801561029257600080fd5b506102a66102a1366004611c4e565b61079a565b005b3480156102b457600080fd5b506005546102c8906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b3480156102ec57600080fd5b5067016345785d8a00005b60405190815260200161024d565b34801561031157600080fd5b506102a6610320366004611cb2565b6107df565b34801561033157600080fd5b50610276610340366004611cec565b610811565b34801561035157600080fd5b506040516009815260200161024d565b34801561036d57600080fd5b506102a661037c366004611d2d565b610861565b34801561038d57600080fd5b506102a661039c366004611d2d565b61088a565b3480156103ad57600080fd5b506102a66103bc366004611d51565b6108b6565b3480156103cd57600080fd5b506006546102c8906001600160a01b031681565b3480156103ed57600080fd5b506102766103fc366004611d2d565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561042657600080fd5b506102a6610435366004611da5565b610922565b34801561044657600080fd5b50610276610455366004611d2d565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561047f57600080fd5b506102f761048e366004611d2d565b6001600160a01b031660009081526001602052604090205490565b3480156104b557600080fd5b506102a6610985565b3480156104ca57600080fd5b506011546012546104d9919082565b6040805192835260208301919091520161024d565b3480156104fa57600080fd5b50600a5461052a9063ffffffff80821691600160201b8104821691600160401b8204811691600160601b90041684565b6040805163ffffffff9586168152938516602085015291841691830191909152909116606082015260800161024d565b34801561056657600080fd5b506000546001600160a01b03166102c8565b34801561058457600080fd5b50604080518082019091526005815264244d554e4b60d81b6020820152610240565b3480156105b257600080fd5b506102a6610999565b3480156105c757600080fd5b506102a66105d6366004611da5565b610a17565b3480156105e757600080fd5b506102766105f6366004611c22565b610a90565b34801561060757600080fd5b506102a6610a9d565b34801561061c57600080fd5b5060075460085460095461063d926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161024d565b34801561067357600080fd5b506102a6610682366004611d2d565b610ac6565b34801561069357600080fd5b506102f76106a2366004611dbe565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106d957600080fd5b506102a66106e8366004611d51565b610af2565b3480156106f957600080fd5b50600c546102769060ff1681565b34801561071357600080fd5b506102a6610722366004611d2d565b610b5e565b34801561073357600080fd5b506102a6610742366004611d2d565b610b87565b34801561075357600080fd5b50600b5461052a9063ffffffff80821691600160201b8104821691600160401b8204811691600160601b90041684565b6000610790338484610c00565b5060015b92915050565b6107a2610d24565b600880546001600160a01b03199081166001600160a01b039485161790915560078054821694841694909417909355600980549093169116179055565b6107e7610d24565b6107f5565b60405180910390fd5b63ffffffff16601155600c805460ff1916911515919091179055565b600061081e848484610d7e565b61085784336001600160a01b0387166000908152600260209081526040808320338452909152902054610852908690611e0d565b610c00565b5060019392505050565b610869610d24565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610892610d24565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6108be610d24565b600a805463ffffffff95861667ffffffffffffffff1990911617600160201b948616949094029390931767ffffffffffffffff60401b1916600160401b9285169290920263ffffffff60601b191691909117600160601b9190931602919091179055565b61092a610d24565b655af3107a40008110156109805760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f7700000000000060448201526064016107ec565b601255565b61098d610d24565b6109976000610fa0565b565b6009546001600160a01b031633146109b057600080fd5b306000908152600160205260409020546109c981610ff0565b6109e260006010819055600e819055600d819055600f55565b6000546040518281526001600160a01b03909116903090600080516020611f3f8339815191529060200160405180910390a350565b6009546001600160a01b03163314610a2e57600080fd5b47610a416000546001600160a01b031690565b6001600160a01b03166108fc6064610a598585611e20565b610a639190611e37565b6040518115909202916000818181858888f19350505050158015610a8b573d6000803e3d6000fd5b505050565b6000610790338484610d7e565b6009546001600160a01b03163314610ab457600080fd5b600019601255600c805460ff19169055565b610ace610d24565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610afa610d24565b600b805463ffffffff95861667ffffffffffffffff1990911617600160201b948616949094029390931767ffffffffffffffff60401b1916600160401b9285169290920263ffffffff60601b191691909117600160601b9190931602919091179055565b610b66610d24565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610b8f610d24565b6001600160a01b038116610bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ec565b610bfd81610fa0565b50565b6001600160a01b038316610c625760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ec565b6001600160a01b038216610cc35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ec565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146109975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ec565b6001600160a01b038316610de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ec565b6001600160a01b038216610e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ec565b60008111610ea65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ec565b306000908152600160205260409020546006805460ff60a81b1981169091556001600160a01b0390811690841603610eec576006805460ff60a81b1916600160a81b1790555b60115460065490821015906001600160a01b03868116911614801590610f0f5750805b8015610f255750600654600160a01b900460ff16155b8015610f335750600c5460ff165b15610f4157610f4182610ff0565b6001600160a01b03851660009081526003602052604090205460019060ff1680610f8357506001600160a01b03851660009081526003602052604090205460ff165b15610f8c575060005b610f98868686846111e1565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b179055600e546000908290611016906064611e20565b6110209190611e37565b9050600082600d6003015460646110379190611e20565b6110419190611e37565b9050600083600d6002015460646110589190611e20565b6110629190611e37565b600a5490915063ffffffff161515806110825750600b5463ffffffff1615155b1561119b57600d54600090859061109a906064611e20565b6110a49190611e37565b90506000816110b4606488611e37565b6110be9190611e20565b90506110cb600282611e37565b905060006110d98288611e0d565b9050476110e5826115b1565b60006110f2600286611e37565b9050600081876111028a8c611e59565b61110c9190611e59565b6111169190611e59565b905060006111248447611e0d565b9050600082611134836064611e20565b61113e9190611e37565b90508361114c606483611e37565b6111569190611e20565b905060006111648247611e0d565b905060006111738a6064611e0d565b905061118282828f8f8f611703565b61118c89846118b0565b505050505050505050506111b5565b6111a4846115b1565b476111b3816064868686611703565b505b6111ce60006010819055600e819055600d819055600f55565b50506006805460ff60a01b191690555050565b6000546001600160a01b038581169116148061120a57506000546001600160a01b038481169116145b156112ac576001600160a01b038316600090815260016020526040902054611233908390611e59565b6001600160a01b038085166000908152600160205260408082209390935590861681522054611263908390611e0d565b6001600160a01b038581166000818152600160209081526040918290209490945551858152918616929091600080516020611f3f833981519152910160405180910390a36115ab565b80151560010361150c576006546001600160a01b0384811691161480159061131a57506001600160a01b03841660009081526004602052604090205460ff161515600114158061131a57506001600160a01b03831660009081526004602052604090205460ff161515600114155b1561139a5760125482611342856001600160a01b031660009081526001602052604090205490565b61134c9190611e59565b111561139a5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a6560448201526064016107ec565b6000806000806113a98661197e565b93509350935093506000828483878a6113c29190611e0d565b6113cc9190611e0d565b6113d69190611e0d565b6113e09190611e0d565b6001600160a01b038a16600090815260016020526040902054909150611407908890611e0d565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611437908290611e59565b6001600160a01b03891660009081526001602052604090205561145d8986868686611ad9565b84600d60000160008282546114729190611e59565b9091555050600e805485919060009061148c908490611e59565b9091555050601080548491906000906114a6908490611e59565b9091555050600f80548391906000906114c0908490611e59565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f3f833981519152836040516114fa91815260200190565b60405180910390a350505050506115ab565b6001600160a01b038416600090815260016020526040902054611530908390611e0d565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611560908390611e59565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f3f833981519152906115a29086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115e6576115e6611e6c565b6001600160a01b03928316602091820292909201810191909152600554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561163f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116639190611e82565b8160018151811061167657611676611e6c565b6001600160a01b03928316602091820292909201015260055461169c9130911684610c00565b60055460405163791ac94760e01b81526001600160a01b039091169063791ac947906116d5908590600090869030904290600401611e9f565b600060405180830381600087803b1580156116ef57600080fd5b505af1158015610f98573d6000803e3d6000fd5b600a54600160201b900463ffffffff1615158061172e5750600b54600160201b900463ffffffff1615155b15611790576000836117408688611e37565b61174a9190611e20565b9050801561178e576007546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561178c573d6000803e3d6000fd5b505b505b600a54600160401b900463ffffffff161515806117bb5750600b54600160401b900463ffffffff1615155b1561181d576000826117cd8688611e37565b6117d79190611e20565b9050801561181b576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611819573d6000803e3d6000fd5b505b505b600a54600160601b900463ffffffff161515806118485750600b54600160601b900463ffffffff1615155b156118a95760008161185a8688611e37565b6118649190611e20565b90508015610f98576009546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156118a6573d6000803e3d6000fd5b50505b5050505050565b6005546118c89030906001600160a01b031684610c00565b6005546001600160a01b031663f305d7198230856000806118f16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611959573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118a99190611f10565b600654600090819081908190600160a81b900460ff161515600103611a4357600b54612710906119b49063ffffffff1687611e20565b6119be9190611e37565b600b54612710906119dc90600160201b900463ffffffff1688611e20565b6119e69190611e37565b600b5461271090611a0490600160401b900463ffffffff1689611e20565b611a0e9190611e37565b600b5461271090611a2c90600160601b900463ffffffff168a611e20565b611a369190611e37565b9350935093509350611ad2565b600a5461271090611a5a9063ffffffff1687611e20565b611a649190611e37565b600a5461271090611a8290600160201b900463ffffffff1688611e20565b611a8c9190611e37565b600a5461271090611aaa90600160401b900463ffffffff1689611e20565b611ab49190611e37565b600a5461271090611a2c90600160601b900463ffffffff168a611e20565b9193509193565b60008183611ae78688611e59565b611af19190611e59565b611afb9190611e59565b30600090815260016020526040902054909150611b19908690611e59565b306000908152600160205260409020819055611b36908490611e59565b306000908152600160205260409020819055611b53908590611e59565b306000908152600160205260409020819055611b70908390611e59565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f3f83398151915290611baf9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bec57858101830151858201604001528201611bd0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bfd57600080fd5b60008060408385031215611c3557600080fd5b8235611c4081611c0d565b946020939093013593505050565b600080600060608486031215611c6357600080fd5b8335611c6e81611c0d565b92506020840135611c7e81611c0d565b91506040840135611c8e81611c0d565b809150509250925092565b803563ffffffff81168114611cad57600080fd5b919050565b60008060408385031215611cc557600080fd5b82358015158114611cd557600080fd5b9150611ce360208401611c99565b90509250929050565b600080600060608486031215611d0157600080fd5b8335611d0c81611c0d565b92506020840135611d1c81611c0d565b929592945050506040919091013590565b600060208284031215611d3f57600080fd5b8135611d4a81611c0d565b9392505050565b60008060008060808587031215611d6757600080fd5b611d7085611c99565b9350611d7e60208601611c99565b9250611d8c60408601611c99565b9150611d9a60608601611c99565b905092959194509250565b600060208284031215611db757600080fd5b5035919050565b60008060408385031215611dd157600080fd5b8235611ddc81611c0d565b91506020830135611dec81611c0d565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079457610794611df7565b808202811582820484141761079457610794611df7565b600082611e5457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561079457610794611df7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9457600080fd5b8151611d4a81611c0d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611eef5784516001600160a01b031683529383019391830191600101611eca565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2557600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f85d6d47b15b4a4d7bcfbf2c2525cef4257ea9a0c8164f8996e2360efd75a9a264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063715018a61161010d578063c827a978116100a0578063df0d18961161006f578063df0d1896146106cd578063e06174e4146106ed578063ea2f0b3714610707578063f2fde38b14610727578063f66895a31461074757600080fd5b8063c827a978146105fb578063d2f4a50a14610610578063d37e18b714610667578063dd62ed3e1461068757600080fd5b806395d89b41116100dc57806395d89b41146105785780639725cd5b146105a657806397bfcda3146105bb578063a9059cbb146105db57600080fd5b8063715018a6146104a957806379502c55146104be578063864701a5146104ee5780638da5cb5b1461055a57600080fd5b80633f33e909116101855780635342acb4116101545780635342acb4146103e15780635d0044ca1461041a5780636dd3d39f1461043a57806370a082311461047357600080fd5b80633f33e90914610361578063437823ec1461038157806344e31583146103a157806349bd5a5e146103c157600080fd5b806318160ddd116101c157806318160ddd146102e057806320c51fd71461030557806323b872dd14610325578063313ce5671461034557600080fd5b806306fdde03146101fe578063095ea7b314610256578063147c9f6d146102865780631694505e146102a857600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601781527f4472616d61746963204368696d706d756e6b20436f696e00000000000000000060208201525b60405161024d9190611bbf565b60405180910390f35b34801561026257600080fd5b50610276610271366004611c22565b610783565b604051901515815260200161024d565b34801561029257600080fd5b506102a66102a1366004611c4e565b61079a565b005b3480156102b457600080fd5b506005546102c8906001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b3480156102ec57600080fd5b5067016345785d8a00005b60405190815260200161024d565b34801561031157600080fd5b506102a6610320366004611cb2565b6107df565b34801561033157600080fd5b50610276610340366004611cec565b610811565b34801561035157600080fd5b506040516009815260200161024d565b34801561036d57600080fd5b506102a661037c366004611d2d565b610861565b34801561038d57600080fd5b506102a661039c366004611d2d565b61088a565b3480156103ad57600080fd5b506102a66103bc366004611d51565b6108b6565b3480156103cd57600080fd5b506006546102c8906001600160a01b031681565b3480156103ed57600080fd5b506102766103fc366004611d2d565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561042657600080fd5b506102a6610435366004611da5565b610922565b34801561044657600080fd5b50610276610455366004611d2d565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561047f57600080fd5b506102f761048e366004611d2d565b6001600160a01b031660009081526001602052604090205490565b3480156104b557600080fd5b506102a6610985565b3480156104ca57600080fd5b506011546012546104d9919082565b6040805192835260208301919091520161024d565b3480156104fa57600080fd5b50600a5461052a9063ffffffff80821691600160201b8104821691600160401b8204811691600160601b90041684565b6040805163ffffffff9586168152938516602085015291841691830191909152909116606082015260800161024d565b34801561056657600080fd5b506000546001600160a01b03166102c8565b34801561058457600080fd5b50604080518082019091526005815264244d554e4b60d81b6020820152610240565b3480156105b257600080fd5b506102a6610999565b3480156105c757600080fd5b506102a66105d6366004611da5565b610a17565b3480156105e757600080fd5b506102766105f6366004611c22565b610a90565b34801561060757600080fd5b506102a6610a9d565b34801561061c57600080fd5b5060075460085460095461063d926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161024d565b34801561067357600080fd5b506102a6610682366004611d2d565b610ac6565b34801561069357600080fd5b506102f76106a2366004611dbe565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106d957600080fd5b506102a66106e8366004611d51565b610af2565b3480156106f957600080fd5b50600c546102769060ff1681565b34801561071357600080fd5b506102a6610722366004611d2d565b610b5e565b34801561073357600080fd5b506102a6610742366004611d2d565b610b87565b34801561075357600080fd5b50600b5461052a9063ffffffff80821691600160201b8104821691600160401b8204811691600160601b90041684565b6000610790338484610c00565b5060015b92915050565b6107a2610d24565b600880546001600160a01b03199081166001600160a01b039485161790915560078054821694841694909417909355600980549093169116179055565b6107e7610d24565b6107f5565b60405180910390fd5b63ffffffff16601155600c805460ff1916911515919091179055565b600061081e848484610d7e565b61085784336001600160a01b0387166000908152600260209081526040808320338452909152902054610852908690611e0d565b610c00565b5060019392505050565b610869610d24565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610892610d24565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6108be610d24565b600a805463ffffffff95861667ffffffffffffffff1990911617600160201b948616949094029390931767ffffffffffffffff60401b1916600160401b9285169290920263ffffffff60601b191691909117600160601b9190931602919091179055565b61092a610d24565b655af3107a40008110156109805760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f7700000000000060448201526064016107ec565b601255565b61098d610d24565b6109976000610fa0565b565b6009546001600160a01b031633146109b057600080fd5b306000908152600160205260409020546109c981610ff0565b6109e260006010819055600e819055600d819055600f55565b6000546040518281526001600160a01b03909116903090600080516020611f3f8339815191529060200160405180910390a350565b6009546001600160a01b03163314610a2e57600080fd5b47610a416000546001600160a01b031690565b6001600160a01b03166108fc6064610a598585611e20565b610a639190611e37565b6040518115909202916000818181858888f19350505050158015610a8b573d6000803e3d6000fd5b505050565b6000610790338484610d7e565b6009546001600160a01b03163314610ab457600080fd5b600019601255600c805460ff19169055565b610ace610d24565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610afa610d24565b600b805463ffffffff95861667ffffffffffffffff1990911617600160201b948616949094029390931767ffffffffffffffff60401b1916600160401b9285169290920263ffffffff60601b191691909117600160601b9190931602919091179055565b610b66610d24565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610b8f610d24565b6001600160a01b038116610bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ec565b610bfd81610fa0565b50565b6001600160a01b038316610c625760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ec565b6001600160a01b038216610cc35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ec565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146109975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ec565b6001600160a01b038316610de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ec565b6001600160a01b038216610e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ec565b60008111610ea65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ec565b306000908152600160205260409020546006805460ff60a81b1981169091556001600160a01b0390811690841603610eec576006805460ff60a81b1916600160a81b1790555b60115460065490821015906001600160a01b03868116911614801590610f0f5750805b8015610f255750600654600160a01b900460ff16155b8015610f335750600c5460ff165b15610f4157610f4182610ff0565b6001600160a01b03851660009081526003602052604090205460019060ff1680610f8357506001600160a01b03851660009081526003602052604090205460ff165b15610f8c575060005b610f98868686846111e1565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006805460ff60a01b1916600160a01b179055600e546000908290611016906064611e20565b6110209190611e37565b9050600082600d6003015460646110379190611e20565b6110419190611e37565b9050600083600d6002015460646110589190611e20565b6110629190611e37565b600a5490915063ffffffff161515806110825750600b5463ffffffff1615155b1561119b57600d54600090859061109a906064611e20565b6110a49190611e37565b90506000816110b4606488611e37565b6110be9190611e20565b90506110cb600282611e37565b905060006110d98288611e0d565b9050476110e5826115b1565b60006110f2600286611e37565b9050600081876111028a8c611e59565b61110c9190611e59565b6111169190611e59565b905060006111248447611e0d565b9050600082611134836064611e20565b61113e9190611e37565b90508361114c606483611e37565b6111569190611e20565b905060006111648247611e0d565b905060006111738a6064611e0d565b905061118282828f8f8f611703565b61118c89846118b0565b505050505050505050506111b5565b6111a4846115b1565b476111b3816064868686611703565b505b6111ce60006010819055600e819055600d819055600f55565b50506006805460ff60a01b191690555050565b6000546001600160a01b038581169116148061120a57506000546001600160a01b038481169116145b156112ac576001600160a01b038316600090815260016020526040902054611233908390611e59565b6001600160a01b038085166000908152600160205260408082209390935590861681522054611263908390611e0d565b6001600160a01b038581166000818152600160209081526040918290209490945551858152918616929091600080516020611f3f833981519152910160405180910390a36115ab565b80151560010361150c576006546001600160a01b0384811691161480159061131a57506001600160a01b03841660009081526004602052604090205460ff161515600114158061131a57506001600160a01b03831660009081526004602052604090205460ff161515600114155b1561139a5760125482611342856001600160a01b031660009081526001602052604090205490565b61134c9190611e59565b111561139a5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a6560448201526064016107ec565b6000806000806113a98661197e565b93509350935093506000828483878a6113c29190611e0d565b6113cc9190611e0d565b6113d69190611e0d565b6113e09190611e0d565b6001600160a01b038a16600090815260016020526040902054909150611407908890611e0d565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611437908290611e59565b6001600160a01b03891660009081526001602052604090205561145d8986868686611ad9565b84600d60000160008282546114729190611e59565b9091555050600e805485919060009061148c908490611e59565b9091555050601080548491906000906114a6908490611e59565b9091555050600f80548391906000906114c0908490611e59565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f3f833981519152836040516114fa91815260200190565b60405180910390a350505050506115ab565b6001600160a01b038416600090815260016020526040902054611530908390611e0d565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611560908390611e59565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f3f833981519152906115a29086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115e6576115e6611e6c565b6001600160a01b03928316602091820292909201810191909152600554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561163f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116639190611e82565b8160018151811061167657611676611e6c565b6001600160a01b03928316602091820292909201015260055461169c9130911684610c00565b60055460405163791ac94760e01b81526001600160a01b039091169063791ac947906116d5908590600090869030904290600401611e9f565b600060405180830381600087803b1580156116ef57600080fd5b505af1158015610f98573d6000803e3d6000fd5b600a54600160201b900463ffffffff1615158061172e5750600b54600160201b900463ffffffff1615155b15611790576000836117408688611e37565b61174a9190611e20565b9050801561178e576007546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561178c573d6000803e3d6000fd5b505b505b600a54600160401b900463ffffffff161515806117bb5750600b54600160401b900463ffffffff1615155b1561181d576000826117cd8688611e37565b6117d79190611e20565b9050801561181b576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611819573d6000803e3d6000fd5b505b505b600a54600160601b900463ffffffff161515806118485750600b54600160601b900463ffffffff1615155b156118a95760008161185a8688611e37565b6118649190611e20565b90508015610f98576009546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156118a6573d6000803e3d6000fd5b50505b5050505050565b6005546118c89030906001600160a01b031684610c00565b6005546001600160a01b031663f305d7198230856000806118f16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611959573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118a99190611f10565b600654600090819081908190600160a81b900460ff161515600103611a4357600b54612710906119b49063ffffffff1687611e20565b6119be9190611e37565b600b54612710906119dc90600160201b900463ffffffff1688611e20565b6119e69190611e37565b600b5461271090611a0490600160401b900463ffffffff1689611e20565b611a0e9190611e37565b600b5461271090611a2c90600160601b900463ffffffff168a611e20565b611a369190611e37565b9350935093509350611ad2565b600a5461271090611a5a9063ffffffff1687611e20565b611a649190611e37565b600a5461271090611a8290600160201b900463ffffffff1688611e20565b611a8c9190611e37565b600a5461271090611aaa90600160401b900463ffffffff1689611e20565b611ab49190611e37565b600a5461271090611a2c90600160601b900463ffffffff168a611e20565b9193509193565b60008183611ae78688611e59565b611af19190611e59565b611afb9190611e59565b30600090815260016020526040902054909150611b19908690611e59565b306000908152600160205260409020819055611b36908490611e59565b306000908152600160205260409020819055611b53908590611e59565b306000908152600160205260409020819055611b70908390611e59565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f3f83398151915290611baf9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bec57858101830151858201604001528201611bd0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bfd57600080fd5b60008060408385031215611c3557600080fd5b8235611c4081611c0d565b946020939093013593505050565b600080600060608486031215611c6357600080fd5b8335611c6e81611c0d565b92506020840135611c7e81611c0d565b91506040840135611c8e81611c0d565b809150509250925092565b803563ffffffff81168114611cad57600080fd5b919050565b60008060408385031215611cc557600080fd5b82358015158114611cd557600080fd5b9150611ce360208401611c99565b90509250929050565b600080600060608486031215611d0157600080fd5b8335611d0c81611c0d565b92506020840135611d1c81611c0d565b929592945050506040919091013590565b600060208284031215611d3f57600080fd5b8135611d4a81611c0d565b9392505050565b60008060008060808587031215611d6757600080fd5b611d7085611c99565b9350611d7e60208601611c99565b9250611d8c60408601611c99565b9150611d9a60608601611c99565b905092959194509250565b600060208284031215611db757600080fd5b5035919050565b60008060408385031215611dd157600080fd5b8235611ddc81611c0d565b91506020830135611dec81611c0d565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079457610794611df7565b808202811582820484141761079457610794611df7565b600082611e5457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561079457610794611df7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9457600080fd5b8151611d4a81611c0d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611eef5784516001600160a01b031683529383019391830191600101611eca565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2557600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f85d6d47b15b4a4d7bcfbf2c2525cef4257ea9a0c8164f8996e2360efd75a9a264736f6c63430008120033

Deployed Bytecode Sourcemap

22450:17925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26020:82;;;;;;;;;;-1:-1:-1;26090:4:0;;;;;;;;;;;;;;;;;26020:82;;;;;;;:::i;:::-;;;;;;;;26926:193;;;;;;;;;;-1:-1:-1;26926:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;26926:193:0;1023:187:1;28633:321:0;;;;;;;;;;-1:-1:-1;28633:321:0;;;;;:::i;:::-;;:::i;:::-;;23043:41;;;;;;;;;;-1:-1:-1;23043:41:0;;;;-1:-1:-1;;;;;23043:41:0;;;;;;-1:-1:-1;;;;;1963:32:1;;;1945:51;;1933:2;1918:18;23043:41:0;1773:229:1;26294:99:0;;;;;;;;;;-1:-1:-1;22863:17:0;26294:99;;;2153:25:1;;;2141:2;2126:18;26294:99:0;2007:177:1;29878:251:0;;;;;;;;;;-1:-1:-1;29878:251:0;;;;;:::i;:::-;;:::i;27127:350::-;;;;;;;;;;-1:-1:-1;27127:350:0;;;;;:::i;:::-;;:::i;26204:82::-;;;;;;;;;;-1:-1:-1;26204:82:0;;23033:1;3310:36:1;;3298:2;3283:18;26204:82:0;3168:184:1;29562:124:0;;;;;;;;;;-1:-1:-1;29562:124:0;;;;;:::i;:::-;;:::i;29007:113::-;;;;;;;;;;-1:-1:-1;29007:113:0;;;;;:::i;:::-;;:::i;28286:306::-;;;;;;;;;;-1:-1:-1;28286:306:0;;;;;:::i;:::-;;:::i;23091:28::-;;;;;;;;;;-1:-1:-1;23091:28:0;;;;-1:-1:-1;;;;;23091:28:0;;;29248:124;;;;;;;;;;-1:-1:-1;29248:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29337:27:0;29313:4;29337:27;;;:18;:27;;;;;;;;;29248:124;30212:179;;;;;;;;;;-1:-1:-1;30212:179:0;;;;;:::i;:::-;;:::i;29694:136::-;;;;;;;;;;-1:-1:-1;29694:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;29789:33:0;29765:4;29789:33;;;:24;:33;;;;;;;;;29694:136;26401:118;;;;;;;;;;-1:-1:-1;26401:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;26494:17:0;26467:7;26494:17;;;:8;:17;;;;;;;26401:118;12204:103;;;;;;;;;;;;;:::i;24801:160::-;;;;;;;;;;-1:-1:-1;24801:160:0;;;;;;;;;;;;;4582:25:1;;;4638:2;4623:18;;4616:34;;;;4555:18;24801:160:0;4408:248:1;24171:157:0;;;;;;;;;;-1:-1:-1;24171:157:0;;;;;;;;;-1:-1:-1;;;24171:157:0;;;;;-1:-1:-1;;;24171:157:0;;;;;-1:-1:-1;;;24171:157:0;;;;;;;;;4894:10:1;4931:15;;;4913:34;;4983:15;;;4978:2;4963:18;;4956:43;5035:15;;;5015:18;;;5008:43;;;;5087:15;;;5082:2;5067:18;;5060:43;4871:3;4856:19;24171:157:0;4661:448:1;11556:87:0;;;;;;;;;;-1:-1:-1;11602:7:0;11629:6;-1:-1:-1;;;;;11629:6:0;11556:87;;26110:86;;;;;;;;;;-1:-1:-1;26182:6:0;;;;;;;;;;;;-1:-1:-1;;;26182:6:0;;;;26110:86;;39846:281;;;;;;;;;;;;;:::i;39513:240::-;;;;;;;;;;-1:-1:-1;39513:240:0;;;;;:::i;:::-;;:::i;26527:199::-;;;;;;;;;;-1:-1:-1;26527:199:0;;;;;:::i;:::-;;:::i;39245:178::-;;;;;;;;;;;;;:::i;23802:360::-;;;;;;;;;;-1:-1:-1;23802:360:0;;;;;;;;-1:-1:-1;;;;;23802:360:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5420:15:1;;;5402:34;;5472:15;;;5467:2;5452:18;;5445:43;5524:15;;5504:18;;;5497:43;;;;5352:2;5337:18;23802:360:0;5114:432:1;29431:123:0;;;;;;;;;;-1:-1:-1;29431:123:0;;;;;:::i;:::-;;:::i;26734:184::-;;;;;;;;;;-1:-1:-1;26734:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26883:18:0;;;26851:7;26883:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26734:184;27913:315;;;;;;;;;;-1:-1:-1;27913:315:0;;;;;:::i;:::-;;:::i;24511:99::-;;;;;;;;;;-1:-1:-1;24511:99:0;;;;;;;;29128:112;;;;;;;;;;-1:-1:-1;29128:112:0;;;;;:::i;:::-;;:::i;12462:201::-;;;;;;;;;;-1:-1:-1;12462:201:0;;;;;:::i;:::-;;:::i;24343:159::-;;;;;;;;;;-1:-1:-1;24343:159:0;;;;;;;;;-1:-1:-1;;;24343:159:0;;;;;-1:-1:-1;;;24343:159:0;;;;;-1:-1:-1;;;24343:159:0;;;;;26926:193;27028:4;27050:39;10187:10;27073:7;27082:6;27050:8;:39::i;:::-;-1:-1:-1;27107:4:0;26926:193;;;;;:::o;28633:321::-;11442:13;:11;:13::i;:::-;28813:21;:38;;-1:-1:-1;;;;;;28813:38:0;;::::1;-1:-1:-1::0;;;;;28813:38:0;;::::1;;::::0;;;:7:::1;28862:41:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28914:18;:32;;;;::::1;::::0;::::1;;::::0;;28633:321::o;29878:251::-;11442:13;:11;:13::i;:::-;29960:63:::1;::::0;::::1;;;;;;;;;30034:35;;:6;:35:::0;30080:8:::1;:41:::0;;-1:-1:-1;;30080:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29878:251::o;27127:350::-;27259:4;27276:36;27286:6;27294:9;27305:6;27276:9;:36::i;:::-;27325:122;27348:6;10187:10;-1:-1:-1;;;;;27396:19:0;;;;;;:11;:19;;;;;;;;27416:10;27396:31;;;;;;;;:40;;27430:6;;27396:40;:::i;:::-;27325:8;:122::i;:::-;-1:-1:-1;27465:4:0;27127:350;;;;;:::o;29562:124::-;11442:13;:11;:13::i;:::-;-1:-1:-1;;;;;29637:33:0::1;29673:5;29637:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;29637:41:0::1;::::0;;29562:124::o;29007:113::-;11442:13;:11;:13::i;:::-;-1:-1:-1;;;;;29078:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29078:34:0::1;29108:4;29078:34;::::0;;29007:113::o;28286:306::-;11442:13;:11;:13::i;:::-;28445:8:::1;:30:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;28486:30:0;;;;-1:-1:-1;;;28486:30:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;28564:20:0;-1:-1:-1;;;28527:26:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;28564:20:0;;;;;-1:-1:-1;;;28564:20:0;;;::::1;;::::0;;;::::1;::::0;;28286:306::o;30212:179::-;11442:13;:11;:13::i;:::-;30298:14:::1;30288:6;:24;;30280:63;;;::::0;-1:-1:-1;;;30280:63:0;;6819:2:1;30280:63:0::1;::::0;::::1;6801:21:1::0;6858:2;6838:18;;;6831:30;6897:28;6877:18;;;6870:56;6943:18;;30280:63:0::1;6617:350:1::0;30280:63:0::1;30354:20:::0;:29;30212:179::o;12204:103::-;11442:13;:11;:13::i;:::-;12269:30:::1;12296:1;12269:18;:30::i;:::-;12204:103::o:0;39846:281::-;39911:18;;-1:-1:-1;;;;;39911:18:0;39897:10;:32;39889:41;;;;;;39981:4;39941:19;26494:17;;;:8;:17;;;;;;39998:27;26494:17;39998:14;:27::i;:::-;40036:20;40260:1;40238:19;:23;;;40272:21;:25;;;40238:6;40308:25;;;40344:16;:20;40188:184;40036:20;11602:7;11629:6;40072:47;;2153:25:1;;;-1:-1:-1;;;;;11629:6:0;;;;40089:4;;-1:-1:-1;;;;;;;;;;;40072:47:0;2141:2:1;2126:18;40072:47:0;;;;;;;39878:249;39846:281::o;39513:240::-;39600:18;;-1:-1:-1;;;;;39600:18:0;39586:10;:32;39578:41;;;;;;39650:21;39690:7;11602;11629:6;-1:-1:-1;;;;;11629:6:0;;11556:87;39690:7;-1:-1:-1;;;;;39682:25:0;:63;39741:3;39709:28;39721:16;39709:9;:28;:::i;:::-;39708:36;;;;:::i;:::-;39682:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39567:186;39513:240;:::o;26527:199::-;26632:4;26654:42;10187:10;26678:9;26689:6;26654:9;:42::i;39245:178::-;39310:18;;-1:-1:-1;;;;;39310:18:0;39296:10;:32;39288:41;;;;;;-1:-1:-1;;39340:20:0;:26;39377:8;:38;;-1:-1:-1;;39377:38:0;;;39245:178::o;29431:123::-;11442:13;:11;:13::i;:::-;-1:-1:-1;;;;;29506:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;29506:40:0::1;29542:4;29506:40;::::0;;29431:123::o;27913:315::-;11442:13;:11;:13::i;:::-;28073:9:::1;:31:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;28115:31:0;;;;-1:-1:-1;;;28115:31:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;28195:21:0;-1:-1:-1;;;28157:27:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;28195:21:0;;;;;-1:-1:-1;;;28195:21:0;;;::::1;;::::0;;;::::1;::::0;;27913:315::o;29128:112::-;11442:13;:11;:13::i;:::-;-1:-1:-1;;;;;29197:27:0::1;29227:5;29197:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29197:35:0::1;::::0;;29128:112::o;12462:201::-;11442:13;:11;:13::i;:::-;-1:-1:-1;;;;;12551:22:0;::::1;12543:73;;;::::0;-1:-1:-1;;;12543:73:0;;7569:2:1;12543:73:0::1;::::0;::::1;7551:21:1::0;7608:2;7588:18;;;7581:30;7647:34;7627:18;;;7620:62;-1:-1:-1;;;7698:18:1;;;7691:36;7744:19;;12543:73:0::1;7367:402:1::0;12543:73:0::1;12627:28;12646:8;12627:18;:28::i;:::-;12462:201:::0;:::o;27485:371::-;-1:-1:-1;;;;;27612:19:0;;27604:68;;;;-1:-1:-1;;;27604:68:0;;7976:2:1;27604:68:0;;;7958:21:1;8015:2;7995:18;;;7988:30;8054:34;8034:18;;;8027:62;-1:-1:-1;;;8105:18:1;;;8098:34;8149:19;;27604:68:0;7774:400:1;27604:68:0;-1:-1:-1;;;;;27691:21:0;;27683:68;;;;-1:-1:-1;;;27683:68:0;;8381:2:1;27683:68:0;;;8363:21:1;8420:2;8400:18;;;8393:30;8459:34;8439:18;;;8432:62;-1:-1:-1;;;8510:18:1;;;8503:32;8552:19;;27683:68:0;8179:398:1;27683:68:0;-1:-1:-1;;;;;27764:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27816:32;;2153:25:1;;;27816:32:0;;2126:18:1;27816:32:0;;;;;;;27485:371;;;:::o;11721:132::-;11602:7;11629:6;-1:-1:-1;;;;;11629:6:0;10187:10;11785:23;11777:68;;;;-1:-1:-1;;;11777:68:0;;8784:2:1;11777:68:0;;;8766:21:1;;;8803:18;;;8796:30;8862:34;8842:18;;;8835:62;8914:18;;11777:68:0;8582:356:1;31227:1119:0;-1:-1:-1;;;;;31349:18:0;;31341:68;;;;-1:-1:-1;;;31341:68:0;;9145:2:1;31341:68:0;;;9127:21:1;9184:2;9164:18;;;9157:30;9223:34;9203:18;;;9196:62;-1:-1:-1;;;9274:18:1;;;9267:35;9319:19;;31341:68:0;8943:401:1;31341:68:0;-1:-1:-1;;;;;31428:16:0;;31420:64;;;;-1:-1:-1;;;31420:64:0;;9551:2:1;31420:64:0;;;9533:21:1;9590:2;9570:18;;;9563:30;9629:34;9609:18;;;9602:62;-1:-1:-1;;;9680:18:1;;;9673:33;9723:19;;31420:64:0;9349:399:1;31420:64:0;31512:1;31503:6;:10;31495:64;;;;-1:-1:-1;;;31495:64:0;;9955:2:1;31495:64:0;;;9937:21:1;9994:2;9974:18;;;9967:30;10033:34;10013:18;;;10006:62;-1:-1:-1;;;10084:18:1;;;10077:39;10133:19;;31495:64:0;9753:405:1;31495:64:0;31621:4;31572:28;26494:17;;;:8;:17;;;;;;31638:4;:12;;-1:-1:-1;;;;31638:12:0;;;;;-1:-1:-1;;;;;31673:13:0;;;31667:19;;;;31663:63;;31703:4;:11;;-1:-1:-1;;;;31703:11:0;-1:-1:-1;;;31703:11:0;;;31663:63;31829:6;:26;31892:13;;31805:50;;;;;-1:-1:-1;;;;;31884:21:0;;;31892:13;;31884:21;;;;:57;;;31922:19;31884:57;:91;;;;-1:-1:-1;31959:16:0;;-1:-1:-1;;;31959:16:0;;;;31958:17;31884:91;:138;;;;-1:-1:-1;31992:8:0;:30;;;31884:138;31866:231;;;32049:36;32064:20;32049:14;:36::i;:::-;-1:-1:-1;;;;;32188:24:0;;32152:12;32188:24;;;:18;:24;;;;;;32167:4;;32188:24;;;:50;;-1:-1:-1;;;;;;32216:22:0;;;;;;:18;:22;;;;;;;;32188:50;32184:98;;;-1:-1:-1;32265:5:0;32184:98;32294:44;32312:4;32318:2;32322:6;32330:7;32294:17;:44::i;:::-;31330:1016;;;31227:1119;;;:::o;12823:191::-;12897:16;12916:6;;-1:-1:-1;;;;;12933:17:0;;;-1:-1:-1;;;;;;12933:17:0;;;;;;12966:40;;12916:6;;;;;;;12966:40;;12897:16;12966:40;12886:128;12823:191;:::o;34135:2190::-;25004:16;:23;;-1:-1:-1;;;;25004:23:0;-1:-1:-1;;;25004:23:0;;;34290:21;;25004:23;;34321:20;;34290:27:::1;::::0;34314:3:::1;34290:27;:::i;:::-;34289:52;;;;:::i;:::-;34262:79;;34352:22;34407:20;34378:6;:19;;;34400:3;34378:25;;;;:::i;:::-;34377:50;;;;:::i;:::-;34352:75;;34438:19;34488:20;34462:6;:16;;;34481:3;34462:22;;;;:::i;:::-;34461:47;;;;:::i;:::-;34581:8;:18:::0;34438:70;;-1:-1:-1;34581:18:0::1;;:23:::0;::::1;::::0;:51:::1;;-1:-1:-1::0;34608:9:0::1;:19:::0;::::1;;:24:::0;::::1;34581:51;34577:1708;;;34675:6;:21:::0;34648:23:::1;::::0;34702:20;;34675:25:::1;::::0;34697:3:::1;34675:25;:::i;:::-;34674:48;;;;:::i;:::-;34648:74:::0;-1:-1:-1;34767:29:0::1;34648:74:::0;34799:26:::1;34821:3;34799:20:::0;:26:::1;:::i;:::-;:44;;;;:::i;:::-;34767:76:::0;-1:-1:-1;34882:25:0::1;34905:1;34767:76:::0;34882:25:::1;:::i;:::-;34858:49:::0;-1:-1:-1;34924:20:0::1;34947:42;34858:49:::0;34947:20;:42:::1;:::i;:::-;34924:65:::0;-1:-1:-1;35031:21:0::1;35105:30;34924:65:::0;35105:16:::1;:30::i;:::-;35153:23;35179:19;35196:1;35179:15:::0;:19:::1;:::i;:::-;35153:45:::0;-1:-1:-1;35213:15:0::1;35153:45:::0;35268:11;35231:33:::1;35250:14:::0;35231:16;:33:::1;:::i;:::-;:48;;;;:::i;:::-;:66;;;;:::i;:::-;35213:84:::0;-1:-1:-1;35366:18:0::1;35387:38;35410:14:::0;35387:21:::1;:38;:::i;:::-;35366:59:::0;-1:-1:-1;35442:27:0::1;35490:7:::0;35473:14:::1;35366:59:::0;35484:3:::1;35473:14;:::i;:::-;35472:26;;;;:::i;:::-;35442:56:::0;-1:-1:-1;35564:15:0;35536:25:::1;35557:3;35442:56:::0;35536:25:::1;:::i;:::-;35535:45;;;;:::i;:::-;35513:67:::0;-1:-1:-1;35597:31:0::1;35631:43;35513:67:::0;35631:21:::1;:43;:::i;:::-;35597:77:::0;-1:-1:-1;35691:13:0::1;35707:19;35711:15:::0;35707:3:::1;:19;:::i;:::-;35691:35;;35743:96;35761:23;35786:5;35793:16;35811:14;35827:11;35743:17;:96::i;:::-;35898:56;35911:21;35934:19;35898:12;:56::i;:::-;34634:1332;;;;;;;;;;34577:1708;;;36071:38;36088:20;36071:16;:38::i;:::-;36143:21;36179:78;36143:21:::0;36206:3:::1;36211:16:::0;36229:14;36245:11;36179:17:::1;:78::i;:::-;36056:229;34577:1708;36297:20;40260:1:::0;40238:19;:23;;;40272:21;:25;;;40238:6;40308:25;;;40344:16;:20;40188:184;36297:20:::1;-1:-1:-1::0;;25050:16:0;:24;;-1:-1:-1;;;;25050:24:0;;;-1:-1:-1;;34135:2190:0:o;32355:1753::-;11602:7;11629:6;-1:-1:-1;;;;;32522:15:0;;;11629:6;;32522:15;;:37;;-1:-1:-1;11602:7:0;11629:6;-1:-1:-1;;;;;32541:18:0;;;11629:6;;32541:18;32522:37;32517:1582;;;-1:-1:-1;;;;;32605:19:0;;;;;;:8;:19;;;;;;:29;;32626:7;;32605:29;:::i;:::-;-1:-1:-1;;;;;32583:19:0;;;;;;;:8;:19;;;;;;:51;;;;32668:16;;;;;;;:26;;32686:7;;32668:26;:::i;:::-;-1:-1:-1;;;;;32649:16:0;;;;;;;:8;:16;;;;;;;;;:45;;;;32719:36;2153:25:1;;;32719:36:0;;;;32649:16;;-1:-1:-1;;;;;;;;;;;32719:36:0;2126:18:1;32719:36:0;;;;;;;32517:1582;;;32818:15;;;32829:4;32818:15;32814:1278;;32877:13;;-1:-1:-1;;;;;32864:26:0;;;32877:13;;32864:26;;;;:114;;-1:-1:-1;;;;;;32895:32:0;;;;;;:24;:32;;;;;;;;:38;;:32;:38;;;:82;;-1:-1:-1;;;;;;32936:35:0;;;;;;:24;:35;;;;;;;;:41;;:35;:41;;32895:82;32860:337;;;33067:20;;33054:7;33030:20;33040:9;-1:-1:-1;;;;;26494:17:0;26467:7;26494:17;;;:8;:17;;;;;;;26401:118;33030:20;:32;;;;:::i;:::-;33029:58;;32999:164;;;;-1:-1:-1;;;32999:164:0;;10495:2:1;32999:164:0;;;10477:21:1;;;10514:18;;;10507:30;10573:34;10553:18;;;10546:62;10625:18;;32999:164:0;10293:356:1;32999:164:0;33214:18;33234;33254:16;33272:13;33289:23;33304:7;33289:14;:23::i;:::-;33213:99;;;;;;;;33327:23;33396:8;33383:10;33375:5;33362:10;33353:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;-1:-1:-1;;;;;33441:16:0;;;;;;:8;:16;;;;;;33327:78;;-1:-1:-1;33441:28:0;;33461:7;;33441:28;:::i;:::-;-1:-1:-1;;;;;33422:16:0;;;;;;;:8;:16;;;;;;:47;;;;33506:19;;;;;;;:39;;33529:15;;33506:39;:::i;:::-;-1:-1:-1;;;;;33484:19:0;;;;;;:8;:19;;;;;:61;33560:62;33574:6;33582:10;33594;33606:8;33616:5;33560:13;:62::i;:::-;33664:10;33639:6;:21;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;33689:21:0;:35;;33714:10;;33689:21;;;:35;;33714:10;;33689:35;:::i;:::-;;;;-1:-1:-1;;33739:19:0;:31;;33762:8;;33739:19;;;:31;;33762:8;;33739:31;:::i;:::-;;;;-1:-1:-1;;33785:16:0;:25;;33805:5;;33785:16;;;:25;;33805:5;;33785:25;:::i;:::-;;;;;;;;33849:9;-1:-1:-1;;;;;33832:44:0;33841:6;-1:-1:-1;;;;;33832:44:0;-1:-1:-1;;;;;;;;;;;33860:15:0;33832:44;;;;2153:25:1;;2141:2;2126:18;;2007:177;33832:44:0;;;;;;;;32845:1043;;;;;32814:1278;;;-1:-1:-1;;;;;33928:16:0;;;;;;:8;:16;;;;;;:28;;33948:7;;33928:28;:::i;:::-;-1:-1:-1;;;;;33909:16:0;;;;;;;:8;:16;;;;;;:47;;;;33993:19;;;;;;;:31;;34016:7;;33993:31;:::i;:::-;-1:-1:-1;;;;;33971:19:0;;;;;;;:8;:19;;;;;;;:53;;;;34044:36;;;;;;-1:-1:-1;;;;;;;;;;;34044:36:0;;;34072:7;2153:25:1;;2141:2;2126:18;;2007:177;34044:36:0;;;;;;;;32814:1278;32355:1753;;;;:::o;37393:589::-;37543:16;;;37557:1;37543:16;;;;;;;;37519:21;;37543:16;;;;;;;;;;-1:-1:-1;37543:16:0;37519:40;;37588:4;37570;37575:1;37570:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37570:23:0;;;:7;;;;;;;;;;:23;;;;37614:15;;:22;;;-1:-1:-1;;;37614:22:0;;;;:15;;;;;:20;;:22;;;;;37570:7;;37614:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37604:4;37609:1;37604:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37604:32:0;;;:7;;;;;;;;;:32;37681:15;;37649:62;;37666:4;;37681:15;37699:11;37649:8;:62::i;:::-;37750:15;;:224;;-1:-1:-1;;;37750:224:0;;-1:-1:-1;;;;;37750:15:0;;;;:66;;:224;;37831:11;;37750:15;;37901:4;;37928;;37948:15;;37750:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36374:983;36581:8;:18;-1:-1:-1;;;36581:18:0;;;;:23;;;:51;;-1:-1:-1;36608:9:0;:19;-1:-1:-1;;;36608:19:0;;;;:24;;36581:51;36577:266;;;36649:17;36692:16;36670:17;36681:5;36670:7;:17;:::i;:::-;36669:40;;;;:::i;:::-;36649:60;-1:-1:-1;36730:13:0;;36726:106;;36772:7;:23;36764:52;;-1:-1:-1;;;;;36772:23:0;;;;36764:52;;;;;36806:9;;36772:23;36764:52;36772:23;36764:52;36806:9;36772:23;36764:52;;;;;;;;;;;;;;;;;;;;;36726:106;36634:209;36577:266;36859:8;:16;-1:-1:-1;;;36859:16:0;;;;:21;;;:47;;-1:-1:-1;36884:9:0;:17;-1:-1:-1;;;36884:17:0;;;;:22;;36859:47;36855:252;;;36923:15;36964:14;36942:17;36953:5;36942:7;:17;:::i;:::-;36941:38;;;;:::i;:::-;36923:56;-1:-1:-1;37000:11:0;;36996:100;;37040:21;;37032:48;;-1:-1:-1;;;;;37040:21:0;;;;37032:48;;;;;37072:7;;37040:21;37032:48;37040:21;37032:48;37072:7;37040:21;37032:48;;;;;;;;;;;;;;;;;;;;;36996:100;36908:199;36855:252;37123:8;:13;-1:-1:-1;;;37123:13:0;;;;:18;;;:41;;-1:-1:-1;37145:9:0;:14;-1:-1:-1;;;37145:14:0;;;;:19;;37123:41;37119:231;;;37181:12;37219:11;37197:17;37208:5;37197:7;:17;:::i;:::-;37196:35;;;;:::i;:::-;37181:50;-1:-1:-1;37252:8:0;;37248:91;;37289:18;;37281:42;;-1:-1:-1;;;;;37289:18:0;;;;37281:42;;;;;37318:4;;37289:18;37281:42;37289:18;37281:42;37318:4;37289:18;37281:42;;;;;;;;;;;;;;;;;;;;;37166:184;37119:231;36374:983;;;;;:::o;38018:511::-;38198:15;;38166:62;;38183:4;;-1:-1:-1;;;;;38198:15:0;38216:11;38166:8;:62::i;:::-;38269:15;;-1:-1:-1;;;;;38269:15:0;:31;38308:9;38341:4;38361:11;38269:15;;38473:7;11602;11629:6;-1:-1:-1;;;;;11629:6:0;;11556:87;38473:7;38269:252;;;;;;-1:-1:-1;;;;;;38269:252:0;;;-1:-1:-1;;;;;12518:15:1;;;38269:252:0;;;12500:34:1;12550:18;;;12543:34;;;;12593:18;;;12586:34;;;;12636:18;;;12629:34;12700:15;;;12679:19;;;12672:44;38495:15:0;12732:19:1;;;12725:35;12434:19;;38269:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30449:738::-;30592:4;;30538:7;;;;;;;;-1:-1:-1;;;30592:4:0;;;;:12;;30600:4;30592:12;30588:592;;30658:9;:19;30683:5;;30648:30;;30658:19;;30648:6;:30;:::i;:::-;30647:42;;;;:::i;:::-;30719:9;:19;30744:5;;30709:30;;-1:-1:-1;;;30719:19:0;;;;30709:6;:30;:::i;:::-;30708:42;;;;:::i;:::-;30780:9;:17;30803:5;;30770:28;;-1:-1:-1;;;30780:17:0;;;;30770:6;:28;:::i;:::-;30769:40;;;;:::i;:::-;30839:9;:14;30859:5;;30829:25;;-1:-1:-1;;;30839:14:0;;;;30829:6;:25;:::i;:::-;30828:37;;;;:::i;:::-;30621:259;;;;;;;;;;30588:592;30950:8;:18;30974:5;;30940:29;;30950:18;;30940:6;:29;:::i;:::-;30939:41;;;;:::i;:::-;31010:8;:18;31034:5;;31000:29;;-1:-1:-1;;;31010:18:0;;;;31000:6;:29;:::i;:::-;30999:41;;;;:::i;:::-;31070:8;:16;31092:5;;31060:27;;-1:-1:-1;;;31070:16:0;;;;31060:6;:27;:::i;:::-;31059:39;;;;:::i;:::-;31128:8;:13;31147:5;;31118:24;;-1:-1:-1;;;31128:13:0;;;;31118:6;:24;:::i;30588:592::-;30449:738;;;;;:::o;38561:611::-;38745:18;38803:5;38792:8;38766:23;38779:10;38766;:23;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;38864:4;38847:23;;;;:8;:23;;;;;;38745:63;;-1:-1:-1;38847:38:0;;38874:10;;38847:38;:::i;:::-;38838:4;38821:23;;;;:8;:23;;;;;:64;;;38922:36;;38949:8;;38922:36;:::i;:::-;38913:4;38896:23;;;;:8;:23;;;;;:62;;;38995:38;;39022:10;;38995:38;:::i;:::-;38986:4;38969:23;;;;:8;:23;;;;;:64;;;39070:33;;39097:5;;39070:33;:::i;:::-;39061:4;39044:23;;;;:8;:23;;;;;;;:59;;;;39121:43;;-1:-1:-1;;;;;39121:43:0;;;-1:-1:-1;;;;;;;;;;;39121:43:0;;;39153:10;2153:25:1;;2141:2;2126:18;;2007:177;39121:43:0;;;;;;;;38734:438;38561:611;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:553::-;1316:6;1324;1332;1385:2;1373:9;1364:7;1360:23;1356:32;1353:52;;;1401:1;1398;1391:12;1353:52;1440:9;1427:23;1459:31;1484:5;1459:31;:::i;:::-;1509:5;-1:-1:-1;1566:2:1;1551:18;;1538:32;1579:33;1538:32;1579:33;:::i;:::-;1631:7;-1:-1:-1;1690:2:1;1675:18;;1662:32;1703:33;1662:32;1703:33;:::i;:::-;1755:7;1745:17;;;1215:553;;;;;:::o;2189:163::-;2256:20;;2316:10;2305:22;;2295:33;;2285:61;;2342:1;2339;2332:12;2285:61;2189:163;;;:::o;2357:345::-;2421:6;2429;2482:2;2470:9;2461:7;2457:23;2453:32;2450:52;;;2498:1;2495;2488:12;2450:52;2537:9;2524:23;2590:5;2583:13;2576:21;2569:5;2566:32;2556:60;;2612:1;2609;2602:12;2556:60;2635:5;-1:-1:-1;2659:37:1;2692:2;2677:18;;2659:37;:::i;:::-;2649:47;;2357:345;;;;;:::o;2707:456::-;2784:6;2792;2800;2853:2;2841:9;2832:7;2828:23;2824:32;2821:52;;;2869:1;2866;2859:12;2821:52;2908:9;2895:23;2927:31;2952:5;2927:31;:::i;:::-;2977:5;-1:-1:-1;3034:2:1;3019:18;;3006:32;3047:33;3006:32;3047:33;:::i;:::-;2707:456;;3099:7;;-1:-1:-1;;;3153:2:1;3138:18;;;;3125:32;;2707:456::o;3357:247::-;3416:6;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;3524:9;3511:23;3543:31;3568:5;3543:31;:::i;:::-;3593:5;3357:247;-1:-1:-1;;;3357:247:1:o;3609:401::-;3691:6;3699;3707;3715;3768:3;3756:9;3747:7;3743:23;3739:33;3736:53;;;3785:1;3782;3775:12;3736:53;3808:28;3826:9;3808:28;:::i;:::-;3798:38;;3855:37;3888:2;3877:9;3873:18;3855:37;:::i;:::-;3845:47;;3911:37;3944:2;3933:9;3929:18;3911:37;:::i;:::-;3901:47;;3967:37;4000:2;3989:9;3985:18;3967:37;:::i;:::-;3957:47;;3609:401;;;;;;;:::o;4223:180::-;4282:6;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;-1:-1:-1;4374:23:1;;4223:180;-1:-1:-1;4223:180:1:o;5551:388::-;5619:6;5627;5680:2;5668:9;5659:7;5655:23;5651:32;5648:52;;;5696:1;5693;5686:12;5648:52;5735:9;5722:23;5754:31;5779:5;5754:31;:::i;:::-;5804:5;-1:-1:-1;5861:2:1;5846:18;;5833:32;5874:33;5833:32;5874:33;:::i;:::-;5926:7;5916:17;;;5551:388;;;;;:::o;6352:127::-;6413:10;6408:3;6404:20;6401:1;6394:31;6444:4;6441:1;6434:15;6468:4;6465:1;6458:15;6484:128;6551:9;;;6572:11;;;6569:37;;;6586:18;;:::i;6972:168::-;7045:9;;;7076;;7093:15;;;7087:22;;7073:37;7063:71;;7114:18;;:::i;7145:217::-;7185:1;7211;7201:132;;7255:10;7250:3;7246:20;7243:1;7236:31;7290:4;7287:1;7280:15;7318:4;7315:1;7308:15;7201:132;-1:-1:-1;7347:9:1;;7145:217::o;10163:125::-;10228:9;;;10249:10;;;10246:36;;;10262:18;;:::i;10786:127::-;10847:10;10842:3;10838:20;10835:1;10828:31;10878:4;10875:1;10868:15;10902:4;10899:1;10892:15;10918:251;10988:6;11041:2;11029:9;11020:7;11016:23;11012:32;11009:52;;;11057:1;11054;11047:12;11009:52;11089:9;11083:16;11108:31;11133:5;11108:31;:::i;11174:980::-;11436:4;11484:3;11473:9;11469:19;11515:6;11504:9;11497:25;11541:2;11579:6;11574:2;11563:9;11559:18;11552:34;11622:3;11617:2;11606:9;11602:18;11595:31;11646:6;11681;11675:13;11712:6;11704;11697:22;11750:3;11739:9;11735:19;11728:26;;11789:2;11781:6;11777:15;11763:29;;11810:1;11820:195;11834:6;11831:1;11828:13;11820:195;;;11899:13;;-1:-1:-1;;;;;11895:39:1;11883:52;;11990:15;;;;11955:12;;;;11931:1;11849:9;11820:195;;;-1:-1:-1;;;;;;;12071:32:1;;;;12066:2;12051:18;;12044:60;-1:-1:-1;;;12135:3:1;12120:19;12113:35;12032:3;11174:980;-1:-1:-1;;;11174:980:1:o;12771:306::-;12859:6;12867;12875;12928:2;12916:9;12907:7;12903:23;12899:32;12896:52;;;12944:1;12941;12934:12;12896:52;12973:9;12967:16;12957:26;;13023:2;13012:9;13008:18;13002:25;12992:35;;13067:2;13056:9;13052:18;13046:25;13036:35;;12771:306;;;;;:::o

Swarm Source

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