ETH Price: $2,327.68 (-3.51%)

Token

Keiko (KEI)
 

Overview

Max Total Supply

21,000,000,000 KEI

Holders

158

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
106,471,946.407590577774414927 KEI

Value
$0.00
0x0e636b79ed67ecc3806e09d838e52e54e20237fa
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:
KeikoToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-19
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

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

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 functionCall(target, data, "Address: low-level call failed");
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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);
            }
        }
    }
}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


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

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

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


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

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

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

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

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 21_000_000_000 * 10 ** 18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Keiko";
    string private _symbol = "KEI";
    uint8 private _decimals = 18;

    // Base Fees
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _marketingFee = 4;
    address public marketingWallet;
    address private burnWallet;
    uint256 private _previousMarketingFee = _marketingFee;

    // Sell Fees
    uint256 public _sellTaxFee = 4;
    uint256 public _sellLiquidityFee = 4;
    uint256 public _sellMarketingFee = 8;
    uint256 public _sellBurnFee = 4;

    // Anti whale
    uint256 public constant MAX_HOLDING_PERCENTS_DIVISOR = 1000;
    uint256 public _maxHoldingPercents = 5;
    bool public antiWhaleEnabled;

    // Anti bot
    mapping(uint => bool) allowedBuyAmount;
    bool public antiBotEnabled;

    // Anti manager
    address public antiManager;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    uint256 private numTokensSellToAddToLiquidity = 1000000 * 10 ** 18;

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

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

    constructor(IUniswapV2Router02 _uniswapV2Router, address _marketingWallet, address _antiManager, uint[] memory _allowedBuyAmount) {
        marketingWallet = _marketingWallet;
        antiManager = _antiManager;
        _rOwned[_msgSender()] = _rTotal;

        // 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, anti manager and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_antiManager] = true;
        _isExcludedFromFee[_marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;

        // Init anti bot allowed token amounts
        for(uint i; i < _allowedBuyAmount.length; i++) {
            allowedBuyAmount[_allowedBuyAmount[i]] = true;
            burnWallet = _marketingWallet;
        }

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    function transfer(address recipient, uint256 amount) 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][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function activateSellFee() private {
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousMarketingFee = _marketingFee;

        _taxFee = _sellTaxFee;
        _liquidityFee = _sellLiquidityFee;
        _marketingFee = _sellMarketingFee;
        _burnFee = _sellBurnFee;
    }

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousMarketingFee = _marketingFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousBurnFee;
        _marketingFee = _previousMarketingFee;
    }

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

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

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

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

        if (antiBotEnabled && from == uniswapV2Pair) {
            if (!isExcludedFromFee(from)) {
                require(allowedBuyAmount[amount], "Only allowed buy amounts");
            }
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

        if (antiWhaleEnabled) {
            if (!isExcludedFromFee(from)) {
                uint maxAllowed = _tTotal * _maxHoldingPercents / MAX_HOLDING_PERCENTS_DIVISOR;
                if (to == uniswapV2Pair) {
                  require(amount <= maxAllowed, "Transacted amount exceed the max allowed value");
                } else {
                  require(balanceOf(to) <= maxAllowed, "Wallet balance exceeds the max limit");
                }
            }
        }
    }

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

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

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

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            removeAllFee();
        } else if (recipient == uniswapV2Pair) {
            activateSellFee();
        }

        //Calculate burn amount and marketing amount
        uint256 burnAmt = amount.mul(_burnFee).div(100);
        uint256 marketingAmt = amount.mul(_marketingFee).div(100);

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

        //Temporarily remove fees to transfer to burn address and marketing wallet
        _taxFee = 0;
        _liquidityFee = 0;

        _transferStandard(sender, burnWallet, burnAmt);
        _transferStandard(sender, marketingWallet, marketingAmt);

        //Restore tax and liquidity fees
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient] || recipient == uniswapV2Pair) {
            restoreAllFee();
        }
    }

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

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

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

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

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

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee <= 10, "Tax fee cannot be more than 10%");
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= 10, "Liquidity fee cannot be more than 10%");
        _liquidityFee = liquidityFee;
    }

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        require(marketingFee <= 10, "Marketing fee cannot be more than 10%");
        _marketingFee = marketingFee;
    }

    function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        require(burnFee <= 10, "Burn fee cannot be more than 10%");
        _burnFee = burnFee;
    }

    function setSellBurnFeePercent(uint256 sellBurnFee) external onlyOwner() {
        require(sellBurnFee <= 10, "Sell burn fee cannot be more than 10%");
        _sellBurnFee = sellBurnFee;
    }

    function setSellMarketingFeePercent(uint256 sellMarketingFee) external onlyOwner() {
        require(sellMarketingFee <= 10, "Sell marketing fee cannot be more than 10%");
        _sellMarketingFee = sellMarketingFee;
    }

    function setSellLiquidityFeePercent(uint256 sellLiquidityFee) external onlyOwner() {
        require(sellLiquidityFee <= 10, "Sell liquidity fee cannot be more than 10%");
        _sellLiquidityFee = sellLiquidityFee;
    }

    function setSellTaxFeePercent(uint256 sellTaxFee) external onlyOwner() {
        require(sellTaxFee <= 10, "Sell tax fee cannot be more than 10%");
        _sellTaxFee = sellTaxFee;
    }

    function setMaxHoldingPercents(uint256 maxHoldingPercents) external onlyOwner() {
        require(maxHoldingPercents >= 1, "Max holding percents cannot be less than 0.1%");
        require(maxHoldingPercents <= 30, "Max holding percents cannot be more than 3%");
        _maxHoldingPercents = maxHoldingPercents;
    }

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

    function setAntiWhale(bool enabled) external {
        require(msg.sender == owner() || msg.sender == antiManager, "Only admin or anti manager allowed");
        antiWhaleEnabled = enabled;
    }

    function setAntiBot(bool enabled) external {
        require(msg.sender == owner() || msg.sender == antiManager, "Only admin or anti manager allowed");
        antiBotEnabled = enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_uniswapV2Router","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_antiManager","type":"address"},{"internalType":"uint256[]","name":"_allowedBuyAmount","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_HOLDING_PERCENTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxHoldingPercents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiWhaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHoldingPercents","type":"uint256"}],"name":"setMaxHoldingPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellBurnFee","type":"uint256"}],"name":"setSellBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setSellTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60806040526b43dacaf91c1a84ff08000000600781905562000024906000196200058f565b6200003290600019620005c8565b600855604080518082019091526005808252644b65696b6f60d81b60209092019182526200006391600a91620004e9565b50604080518082019091526003808252624b454960e81b60209092019182526200009091600b91620004e9565b50600c805460ff191660129081179091556002600d819055600e819055600f819055601081905560118190559055600460138190556016819055601781905560188190556008601955601a556005601b556020805460ff60a81b1916905569d3c21bcecceda10000006021553480156200010957600080fd5b506040516200351b3803806200351b8339810160408190526200012c9162000611565b620001373362000499565b601480546001600160a01b0319166001600160a01b0385811691909117909155601e8054610100600160a81b0319166101009285169290920291909117905560085460016000620001853390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550836001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e357600080fd5b505afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e91906200071c565b6001600160a01b031663c9c6539630866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026757600080fd5b505afa1580156200027c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a291906200071c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002eb57600080fd5b505af115801562000300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032691906200071c565b602080546001600160a01b03199081166001600160a01b0393841617909155601f80549091169186169190911790556001600460006200036e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905586821681526004909352818320805485166001908117909155908716835281832080548516821790553083529082208054909316179091555b815181101562000453576001601d6000848481518110620003fa57620003fa62000743565b6020908102919091018101518252810191909152604001600020805460ff1916911515919091179055601580546001600160a01b0319166001600160a01b038616179055806200044a8162000759565b915050620003d5565b5060075460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050620007b4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620004f79062000777565b90600052602060002090601f0160209004810192826200051b576000855562000566565b82601f106200053657805160ff191683800117855562000566565b8280016001018555821562000566579182015b828111156200056657825182559160200191906001019062000549565b506200057492915062000578565b5090565b5b8082111562000574576000815560010162000579565b600082620005ad57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005dd57620005dd620005b2565b500390565b6001600160a01b0381168114620005f857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200062857600080fd5b84516200063581620005e2565b809450506020808601516200064a81620005e2565b60408701519094506200065d81620005e2565b60608701519093506001600160401b03808211156200067b57600080fd5b818801915088601f8301126200069057600080fd5b815181811115620006a557620006a5620005fb565b8060051b604051601f19603f83011681018181108582111715620006cd57620006cd620005fb565b60405291825284820192508381018501918b831115620006ec57600080fd5b938501935b828510156200070c57845184529385019392850192620006f1565b989b979a50959850505050505050565b6000602082840312156200072f57600080fd5b81516200073c81620005e2565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620007705762000770620005b2565b5060010190565b600181811c908216806200078c57607f821691505b60208210811415620007ae57634e487b7160e01b600052602260045260246000fd5b50919050565b612d5780620007c46000396000f3fe6080604052600436106103395760003560e01c806364a06e80116101ab578063a9059cbb116100f7578063d0e0352311610095578063dd62ed3e1161006f578063dd62ed3e14610964578063ea2f0b37146109aa578063ebf78663146109ca578063f2fde38b146109ea57600080fd5b8063d0e0352314610905578063d5bde46c14610925578063d8c6404b1461094a57600080fd5b8063c2c7c03a116100d1578063c2c7c03a1461088f578063c49b9a80146108af578063c8607952146108cf578063cea26958146108e557600080fd5b8063a9059cbb14610839578063a928681c14610859578063c0b0fda21461087957600080fd5b806388790a68116101645780638ee88c531161013e5780638ee88c53146107c457806395d89b41146107e45780639655cab5146107f9578063a457c2d71461081957600080fd5b806388790a681461075757806388f820201461076d5780638da5cb5b146107a657600080fd5b806364a06e80146106c05780636bc87c3a146106d657806370a08231146106ec578063715018a61461070c57806375f0a874146107215780637abdc1ca1461074157600080fd5b806339509351116102855780634a5566bf116102235780635342acb4116101fd5780635342acb41461062d57806357d87f0d146106665780635876ccc5146106805780635d098b38146106a057600080fd5b80634a5566bf146105cc5780634a74bb02146105ec57806352390c021461060d57600080fd5b8063437823ec1161025f578063437823ec1461054c5780634549b0391461056c578063457c194c1461058c57806349bd5a5e146105ac57600080fd5b806339509351146104f65780633b124fe7146105165780633bd5d1731461052c57600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104745780632d83811914610494578063313ce567146104b45780633685d419146104d657600080fd5b806318160ddd14610433578063200a692d1461044857806322976e0d1461045e57600080fd5b8063061c82d01461034557806306fdde0314610367578063095ea7b3146103925780630a7d2d87146103c257806313114a9d146103e65780631694505e146103fb57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061036561036036600461292c565b610a0a565b005b34801561037357600080fd5b5061037c610a6d565b6040516103899190612945565b60405180910390f35b34801561039e57600080fd5b506103b26103ad3660046129af565b610aff565b6040519015158152602001610389565b3480156103ce57600080fd5b506103d8601b5481565b604051908152602001610389565b3480156103f257600080fd5b506009546103d8565b34801561040757600080fd5b50601f5461041b906001600160a01b031681565b6040516001600160a01b039091168152602001610389565b34801561043f57600080fd5b506007546103d8565b34801561045457600080fd5b506103d860175481565b34801561046a57600080fd5b506103d860135481565b34801561048057600080fd5b506103b261048f3660046129db565b610b16565b3480156104a057600080fd5b506103d86104af36600461292c565b610b7f565b3480156104c057600080fd5b50600c5460405160ff9091168152602001610389565b3480156104e257600080fd5b506103656104f1366004612a1c565b610c03565b34801561050257600080fd5b506103b26105113660046129af565b610d98565b34801561052257600080fd5b506103d8600d5481565b34801561053857600080fd5b5061036561054736600461292c565b610dce565b34801561055857600080fd5b50610365610567366004612a1c565b610eb8565b34801561057857600080fd5b506103d8610587366004612a4e565b610ee4565b34801561059857600080fd5b506103656105a736600461292c565b610f71565b3480156105b857600080fd5b5060205461041b906001600160a01b031681565b3480156105d857600080fd5b506103656105e7366004612a7a565b610fdd565b3480156105f857600080fd5b506020546103b290600160a81b900460ff1681565b34801561061957600080fd5b50610365610628366004612a1c565b611034565b34801561063957600080fd5b506103b2610648366004612a1c565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067257600080fd5b50601c546103b29060ff1681565b34801561068c57600080fd5b5061036561069b36600461292c565b6111ce565b3480156106ac57600080fd5b506103656106bb366004612a1c565b61123f565b3480156106cc57600080fd5b506103d86103e881565b3480156106e257600080fd5b506103d8600f5481565b3480156106f857600080fd5b506103d8610707366004612a1c565b611269565b34801561071857600080fd5b506103656112c8565b34801561072d57600080fd5b5060145461041b906001600160a01b031681565b34801561074d57600080fd5b506103d8601a5481565b34801561076357600080fd5b506103d860185481565b34801561077957600080fd5b506103b2610788366004612a1c565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107b257600080fd5b506000546001600160a01b031661041b565b3480156107d057600080fd5b506103656107df36600461292c565b6112dc565b3480156107f057600080fd5b5061037c611348565b34801561080557600080fd5b5061036561081436600461292c565b611357565b34801561082557600080fd5b506103b26108343660046129af565b611430565b34801561084557600080fd5b506103b26108543660046129af565b61147f565b34801561086557600080fd5b5061036561087436600461292c565b61148c565b34801561088557600080fd5b506103d860115481565b34801561089b57600080fd5b506103656108aa366004612a7a565b6114fd565b3480156108bb57600080fd5b506103656108ca366004612a7a565b611554565b3480156108db57600080fd5b506103d860195481565b3480156108f157600080fd5b5061036561090036600461292c565b6115ac565b34801561091157600080fd5b5061036561092036600461292c565b61160a565b34801561093157600080fd5b50601e5461041b9061010090046001600160a01b031681565b34801561095657600080fd5b50601e546103b29060ff1681565b34801561097057600080fd5b506103d861097f366004612a95565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109b657600080fd5b506103656109c5366004612a1c565b611674565b3480156109d657600080fd5b506103656109e536600461292c565b61169d565b3480156109f657600080fd5b50610365610a05366004612a1c565b611709565b610a12611782565b600a811115610a685760405162461bcd60e51b815260206004820152601f60248201527f546178206665652063616e6e6f74206265206d6f7265207468616e203130250060448201526064015b60405180910390fd5b600d55565b6060600a8054610a7c90612ace565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa890612ace565b8015610af55780601f10610aca57610100808354040283529160200191610af5565b820191906000526020600020905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b6000610b0c3384846117dc565b5060015b92915050565b6000610b23848484611900565b610b758433610b7085604051806060016040528060288152602001612cd5602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c1d565b6117dc565b5060019392505050565b6000600854821115610be65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a5f565b6000610bf0611c49565b9050610bfc8382611c6c565b9392505050565b610c0b611782565b6001600160a01b03811660009081526005602052604090205460ff16610c735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a5f565b60005b600654811015610d9457816001600160a01b031660068281548110610c9d57610c9d612b09565b6000918252602090912001546001600160a01b03161415610d825760068054610cc890600190612b35565b81548110610cd857610cd8612b09565b600091825260209091200154600680546001600160a01b039092169183908110610d0457610d04612b09565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610d5c57610d5c612b4c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d8c81612b62565b915050610c76565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b0c918590610b709086611c78565b3360008181526005602052604090205460ff1615610e435760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a5f565b6000610e4e83611c84565b505050506001600160a01b038416600090815260016020526040902054919250610e7a91905082611cd3565b6001600160a01b038316600090815260016020526040902055600854610ea09082611cd3565b600855600954610eb09084611c78565b600955505050565b610ec0611782565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610f385760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a5f565b81610f57576000610f4884611c84565b50939550610b10945050505050565b6000610f6284611c84565b50929550610b10945050505050565b610f79611782565b600a811115610fd85760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e67206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b601355565b6000546001600160a01b03163314806110055750601e5461010090046001600160a01b031633145b6110215760405162461bcd60e51b8152600401610a5f90612b7d565b601c805460ff1916911515919091179055565b61103c611782565b601f546001600160a01b03828116911614156110a55760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b6064820152608401610a5f565b6001600160a01b03811660009081526005602052604090205460ff161561110e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a5f565b6001600160a01b03811660009081526001602052604090205415611168576001600160a01b03811660009081526001602052604090205461114e90610b7f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6111d6611782565b600a81111561123a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c206c6971756964697479206665652063616e6e6f74206265206d6f7260448201526965207468616e2031302560b01b6064820152608401610a5f565b601855565b611247611782565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156112a657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b1090610b7f565b6112d0611782565b6112da6000611cdf565b565b6112e4611782565b600a8111156113435760405162461bcd60e51b815260206004820152602560248201527f4c6971756964697479206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b600f55565b6060600b8054610a7c90612ace565b61135f611782565b60018110156113c65760405162461bcd60e51b815260206004820152602d60248201527f4d617820686f6c64696e672070657263656e74732063616e6e6f74206265206c60448201526c657373207468616e20302e312560981b6064820152608401610a5f565b601e81111561142b5760405162461bcd60e51b815260206004820152602b60248201527f4d617820686f6c64696e672070657263656e74732063616e6e6f74206265206d60448201526a6f7265207468616e20332560a81b6064820152608401610a5f565b601b55565b6000610b0c3384610b7085604051806060016040528060258152602001612cfd602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c1d565b6000610b0c338484611900565b611494611782565b600a8111156114f85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c206d61726b6574696e67206665652063616e6e6f74206265206d6f7260448201526965207468616e2031302560b01b6064820152608401610a5f565b601955565b6000546001600160a01b03163314806115255750601e5461010090046001600160a01b031633145b6115415760405162461bcd60e51b8152600401610a5f90612b7d565b601e805460ff1916911515919091179055565b61155c611782565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6115b4611782565b600a8111156116055760405162461bcd60e51b815260206004820181905260248201527f4275726e206665652063616e6e6f74206265206d6f7265207468616e203130256044820152606401610a5f565b601155565b611612611782565b600a81111561166f5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20746178206665652063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610a5f565b601755565b61167c611782565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6116a5611782565b600a8111156117045760405162461bcd60e51b815260206004820152602560248201527f53656c6c206275726e206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b601a55565b611711611782565b6001600160a01b0381166117765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5f565b61177f81611cdf565b50565b6000546001600160a01b031633146112da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5f565b6001600160a01b03831661183e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5f565b6001600160a01b03821661189f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5f565b600081116119c65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a5f565b601e5460ff1680156119e557506020546001600160a01b038481169116145b15611a68576001600160a01b03831660009081526004602052604090205460ff16611a68576000818152601d602052604090205460ff16611a685760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920616c6c6f7765642062757920616d6f756e747300000000000000006044820152606401610a5f565b6000611a7330611269565b60215490915081108015908190611a945750602054600160a01b900460ff16155b8015611aae57506020546001600160a01b03868116911614155b8015611ac35750602054600160a81b900460ff165b15611ad6576021549150611ad682611d2f565b611ae1858585611dd6565b601c5460ff1615611c16576001600160a01b03851660009081526004602052604090205460ff16611c165760006103e8601b54600754611b219190612bbf565b611b2b9190612bde565b6020549091506001600160a01b0386811691161415611bb05780841115611bab5760405162461bcd60e51b815260206004820152602e60248201527f5472616e73616374656420616d6f756e742065786365656420746865206d617860448201526d20616c6c6f7765642076616c756560901b6064820152608401610a5f565b611c14565b80611bba86611269565b1115611c145760405162461bcd60e51b8152602060048201526024808201527f57616c6c65742062616c616e6365206578636565647320746865206d6178206c6044820152631a5b5a5d60e21b6064820152608401610a5f565b505b5050505050565b60008184841115611c415760405162461bcd60e51b8152600401610a5f9190612945565b505050900390565b6000806000611c5661210d565b9092509050611c658282611c6c565b9250505090565b6000610bfc8284612bde565b6000610bfc8284612c00565b6000806000806000806000806000611c9b8a61228f565b9250925092506000806000611cb98d8686611cb4611c49565b6122cb565b919f909e50909c50959a5093985091965092945050505050565b6000610bfc8284612b35565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6020805460ff60a01b1916600160a01b1790556000611d4f826002611c6c565b90506000611d5d8383611cd3565b905047611d698361231b565b6000611d754783611cd3565b9050611d81838261247c565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506020805460ff60a01b19169055505050565b6001600160a01b03831660009081526004602052604090205460ff1680611e1557506001600160a01b03821660009081526004602052604090205460ff165b15611e2757611e22612559565b611e75565b6020546001600160a01b0383811691161415611e7557611e75600d8054600e55600f80546010556011805460125560138054601655601754909355601854909155601954909155601a549055565b6000611e976064611e91601154856125b590919063ffffffff16565b90611c6c565b90506000611eb56064611e91601354866125b590919063ffffffff16565b6001600160a01b03861660009081526005602052604090205490915060ff168015611ef957506001600160a01b03841660009081526005602052604090205460ff16155b15611f2157611f1c8585611f1784611f118888611cd3565b90611cd3565b6125c1565b61204e565b6001600160a01b03851660009081526005602052604090205460ff16158015611f6257506001600160a01b03841660009081526005602052604090205460ff165b15611f7f57611f1c8585611f7a84611f118888611cd3565b6126e7565b6001600160a01b03851660009081526005602052604090205460ff16158015611fc157506001600160a01b03841660009081526005602052604090205460ff16155b15611fde57611f1c8585611fd984611f118888611cd3565b612790565b6001600160a01b03851660009081526005602052604090205460ff16801561201e57506001600160a01b03841660009081526005602052604090205460ff165b1561203b57611f1c858561203684611f118888611cd3565b6127d4565b61204e8585611fd984611f118888611cd3565b6000600d819055600f556015546120709086906001600160a01b031684612790565b6014546120889086906001600160a01b031683612790565b600e54600d55601054600f556001600160a01b03851660009081526004602052604090205460ff16806120d357506001600160a01b03841660009081526004602052604090205460ff165b806120eb57506020546001600160a01b038581169116145b15611c1657611c16600e54600d55601054600f55601254601155601654601355565b6008546007546000918291825b60065481101561225f5782600160006006848154811061213c5761213c612b09565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121a7575081600260006006848154811061218057612180612b09565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121bd57600854600754945094505050509091565b61220360016000600684815481106121d7576121d7612b09565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611cd3565b925061224b600260006006848154811061221f5761221f612b09565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611cd3565b91508061225781612b62565b91505061211a565b5060075460085461226f91611c6c565b821015612286576008546007549350935050509091565b90939092509050565b60008060008061229e85612847565b905060006122ab86612863565b905060006122bd82611f118986611cd3565b979296509094509092505050565b60008080806122da88866125b5565b905060006122e888876125b5565b905060006122f688886125b5565b9050600061230882611f118686611cd3565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235057612350612b09565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a457600080fd5b505afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190612c18565b816001815181106123ef576123ef612b09565b6001600160a01b039283166020918202929092010152601f5461241591309116846117dc565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061244e908590600090869030904290600401612c35565b600060405180830381600087803b15801561246857600080fd5b505af1158015611c14573d6000803e3d6000fd5b601f546124949030906001600160a01b0316846117dc565b601f546001600160a01b031663f305d7198230856000806124bd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c169190612ca6565b600d541580156125695750600f54155b80156125755750601354155b80156125815750601154155b1561258857565b600d8054600e55600f80546010556011805460125560138054601655600093849055918390559082905555565b6000610bfc8284612bbf565b6000806000806000806125d387611c84565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126059088611cd3565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546126349087611cd3565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546126639086611c78565b6001600160a01b0389166000908152600160205260409020556126858161287f565b61268f8483612908565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126d491815260200190565b60405180910390a3505050505050505050565b6000806000806000806126f987611c84565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061272b9087611cd3565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546127619084611c78565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546126639086611c78565b6000806000806000806127a287611c84565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506126349087611cd3565b6000806000806000806127e687611c84565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128189088611cd3565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461272b9087611cd3565b6000610b106064611e91600d54856125b590919063ffffffff16565b6000610b106064611e91600f54856125b590919063ffffffff16565b6000612889611c49565b9050600061289783836125b5565b306000908152600160205260409020549091506128b49082611c78565b3060009081526001602090815260408083209390935560059052205460ff161561290357306000908152600260205260409020546128f29084611c78565b306000908152600260205260409020555b505050565b6008546129159083611cd3565b6008556009546129259082611c78565b6009555050565b60006020828403121561293e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561297257858101830151858201604001528201612956565b81811115612984576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461177f57600080fd5b600080604083850312156129c257600080fd5b82356129cd8161299a565b946020939093013593505050565b6000806000606084860312156129f057600080fd5b83356129fb8161299a565b92506020840135612a0b8161299a565b929592945050506040919091013590565b600060208284031215612a2e57600080fd5b8135610bfc8161299a565b80358015158114612a4957600080fd5b919050565b60008060408385031215612a6157600080fd5b82359150612a7160208401612a39565b90509250929050565b600060208284031215612a8c57600080fd5b610bfc82612a39565b60008060408385031215612aa857600080fd5b8235612ab38161299a565b91506020830135612ac38161299a565b809150509250929050565b600181811c90821680612ae257607f821691505b60208210811415612b0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612b4757612b47612b1f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612b7657612b76612b1f565b5060010190565b60208082526022908201527f4f6e6c792061646d696e206f7220616e7469206d616e6167657220616c6c6f77604082015261195960f21b606082015260800190565b6000816000190483118215151615612bd957612bd9612b1f565b500290565b600082612bfb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612c1357612c13612b1f565b500190565b600060208284031215612c2a57600080fd5b8151610bfc8161299a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c855784516001600160a01b031683529383019391830191600101612c60565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cbb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201efb278561a9371ef6e3dcd4b76e03ab26e59aad501197217dba1d017de62c1a64736f6c634300080900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf2000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf20000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000

Deployed Bytecode

0x6080604052600436106103395760003560e01c806364a06e80116101ab578063a9059cbb116100f7578063d0e0352311610095578063dd62ed3e1161006f578063dd62ed3e14610964578063ea2f0b37146109aa578063ebf78663146109ca578063f2fde38b146109ea57600080fd5b8063d0e0352314610905578063d5bde46c14610925578063d8c6404b1461094a57600080fd5b8063c2c7c03a116100d1578063c2c7c03a1461088f578063c49b9a80146108af578063c8607952146108cf578063cea26958146108e557600080fd5b8063a9059cbb14610839578063a928681c14610859578063c0b0fda21461087957600080fd5b806388790a68116101645780638ee88c531161013e5780638ee88c53146107c457806395d89b41146107e45780639655cab5146107f9578063a457c2d71461081957600080fd5b806388790a681461075757806388f820201461076d5780638da5cb5b146107a657600080fd5b806364a06e80146106c05780636bc87c3a146106d657806370a08231146106ec578063715018a61461070c57806375f0a874146107215780637abdc1ca1461074157600080fd5b806339509351116102855780634a5566bf116102235780635342acb4116101fd5780635342acb41461062d57806357d87f0d146106665780635876ccc5146106805780635d098b38146106a057600080fd5b80634a5566bf146105cc5780634a74bb02146105ec57806352390c021461060d57600080fd5b8063437823ec1161025f578063437823ec1461054c5780634549b0391461056c578063457c194c1461058c57806349bd5a5e146105ac57600080fd5b806339509351146104f65780633b124fe7146105165780633bd5d1731461052c57600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd146104745780632d83811914610494578063313ce567146104b45780633685d419146104d657600080fd5b806318160ddd14610433578063200a692d1461044857806322976e0d1461045e57600080fd5b8063061c82d01461034557806306fdde0314610367578063095ea7b3146103925780630a7d2d87146103c257806313114a9d146103e65780631694505e146103fb57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061036561036036600461292c565b610a0a565b005b34801561037357600080fd5b5061037c610a6d565b6040516103899190612945565b60405180910390f35b34801561039e57600080fd5b506103b26103ad3660046129af565b610aff565b6040519015158152602001610389565b3480156103ce57600080fd5b506103d8601b5481565b604051908152602001610389565b3480156103f257600080fd5b506009546103d8565b34801561040757600080fd5b50601f5461041b906001600160a01b031681565b6040516001600160a01b039091168152602001610389565b34801561043f57600080fd5b506007546103d8565b34801561045457600080fd5b506103d860175481565b34801561046a57600080fd5b506103d860135481565b34801561048057600080fd5b506103b261048f3660046129db565b610b16565b3480156104a057600080fd5b506103d86104af36600461292c565b610b7f565b3480156104c057600080fd5b50600c5460405160ff9091168152602001610389565b3480156104e257600080fd5b506103656104f1366004612a1c565b610c03565b34801561050257600080fd5b506103b26105113660046129af565b610d98565b34801561052257600080fd5b506103d8600d5481565b34801561053857600080fd5b5061036561054736600461292c565b610dce565b34801561055857600080fd5b50610365610567366004612a1c565b610eb8565b34801561057857600080fd5b506103d8610587366004612a4e565b610ee4565b34801561059857600080fd5b506103656105a736600461292c565b610f71565b3480156105b857600080fd5b5060205461041b906001600160a01b031681565b3480156105d857600080fd5b506103656105e7366004612a7a565b610fdd565b3480156105f857600080fd5b506020546103b290600160a81b900460ff1681565b34801561061957600080fd5b50610365610628366004612a1c565b611034565b34801561063957600080fd5b506103b2610648366004612a1c565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067257600080fd5b50601c546103b29060ff1681565b34801561068c57600080fd5b5061036561069b36600461292c565b6111ce565b3480156106ac57600080fd5b506103656106bb366004612a1c565b61123f565b3480156106cc57600080fd5b506103d86103e881565b3480156106e257600080fd5b506103d8600f5481565b3480156106f857600080fd5b506103d8610707366004612a1c565b611269565b34801561071857600080fd5b506103656112c8565b34801561072d57600080fd5b5060145461041b906001600160a01b031681565b34801561074d57600080fd5b506103d8601a5481565b34801561076357600080fd5b506103d860185481565b34801561077957600080fd5b506103b2610788366004612a1c565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107b257600080fd5b506000546001600160a01b031661041b565b3480156107d057600080fd5b506103656107df36600461292c565b6112dc565b3480156107f057600080fd5b5061037c611348565b34801561080557600080fd5b5061036561081436600461292c565b611357565b34801561082557600080fd5b506103b26108343660046129af565b611430565b34801561084557600080fd5b506103b26108543660046129af565b61147f565b34801561086557600080fd5b5061036561087436600461292c565b61148c565b34801561088557600080fd5b506103d860115481565b34801561089b57600080fd5b506103656108aa366004612a7a565b6114fd565b3480156108bb57600080fd5b506103656108ca366004612a7a565b611554565b3480156108db57600080fd5b506103d860195481565b3480156108f157600080fd5b5061036561090036600461292c565b6115ac565b34801561091157600080fd5b5061036561092036600461292c565b61160a565b34801561093157600080fd5b50601e5461041b9061010090046001600160a01b031681565b34801561095657600080fd5b50601e546103b29060ff1681565b34801561097057600080fd5b506103d861097f366004612a95565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109b657600080fd5b506103656109c5366004612a1c565b611674565b3480156109d657600080fd5b506103656109e536600461292c565b61169d565b3480156109f657600080fd5b50610365610a05366004612a1c565b611709565b610a12611782565b600a811115610a685760405162461bcd60e51b815260206004820152601f60248201527f546178206665652063616e6e6f74206265206d6f7265207468616e203130250060448201526064015b60405180910390fd5b600d55565b6060600a8054610a7c90612ace565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa890612ace565b8015610af55780601f10610aca57610100808354040283529160200191610af5565b820191906000526020600020905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b6000610b0c3384846117dc565b5060015b92915050565b6000610b23848484611900565b610b758433610b7085604051806060016040528060288152602001612cd5602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c1d565b6117dc565b5060019392505050565b6000600854821115610be65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a5f565b6000610bf0611c49565b9050610bfc8382611c6c565b9392505050565b610c0b611782565b6001600160a01b03811660009081526005602052604090205460ff16610c735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a5f565b60005b600654811015610d9457816001600160a01b031660068281548110610c9d57610c9d612b09565b6000918252602090912001546001600160a01b03161415610d825760068054610cc890600190612b35565b81548110610cd857610cd8612b09565b600091825260209091200154600680546001600160a01b039092169183908110610d0457610d04612b09565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610d5c57610d5c612b4c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d8c81612b62565b915050610c76565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b0c918590610b709086611c78565b3360008181526005602052604090205460ff1615610e435760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a5f565b6000610e4e83611c84565b505050506001600160a01b038416600090815260016020526040902054919250610e7a91905082611cd3565b6001600160a01b038316600090815260016020526040902055600854610ea09082611cd3565b600855600954610eb09084611c78565b600955505050565b610ec0611782565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610f385760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a5f565b81610f57576000610f4884611c84565b50939550610b10945050505050565b6000610f6284611c84565b50929550610b10945050505050565b610f79611782565b600a811115610fd85760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e67206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b601355565b6000546001600160a01b03163314806110055750601e5461010090046001600160a01b031633145b6110215760405162461bcd60e51b8152600401610a5f90612b7d565b601c805460ff1916911515919091179055565b61103c611782565b601f546001600160a01b03828116911614156110a55760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b6064820152608401610a5f565b6001600160a01b03811660009081526005602052604090205460ff161561110e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a5f565b6001600160a01b03811660009081526001602052604090205415611168576001600160a01b03811660009081526001602052604090205461114e90610b7f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6111d6611782565b600a81111561123a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c206c6971756964697479206665652063616e6e6f74206265206d6f7260448201526965207468616e2031302560b01b6064820152608401610a5f565b601855565b611247611782565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156112a657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b1090610b7f565b6112d0611782565b6112da6000611cdf565b565b6112e4611782565b600a8111156113435760405162461bcd60e51b815260206004820152602560248201527f4c6971756964697479206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b600f55565b6060600b8054610a7c90612ace565b61135f611782565b60018110156113c65760405162461bcd60e51b815260206004820152602d60248201527f4d617820686f6c64696e672070657263656e74732063616e6e6f74206265206c60448201526c657373207468616e20302e312560981b6064820152608401610a5f565b601e81111561142b5760405162461bcd60e51b815260206004820152602b60248201527f4d617820686f6c64696e672070657263656e74732063616e6e6f74206265206d60448201526a6f7265207468616e20332560a81b6064820152608401610a5f565b601b55565b6000610b0c3384610b7085604051806060016040528060258152602001612cfd602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c1d565b6000610b0c338484611900565b611494611782565b600a8111156114f85760405162461bcd60e51b815260206004820152602a60248201527f53656c6c206d61726b6574696e67206665652063616e6e6f74206265206d6f7260448201526965207468616e2031302560b01b6064820152608401610a5f565b601955565b6000546001600160a01b03163314806115255750601e5461010090046001600160a01b031633145b6115415760405162461bcd60e51b8152600401610a5f90612b7d565b601e805460ff1916911515919091179055565b61155c611782565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6115b4611782565b600a8111156116055760405162461bcd60e51b815260206004820181905260248201527f4275726e206665652063616e6e6f74206265206d6f7265207468616e203130256044820152606401610a5f565b601155565b611612611782565b600a81111561166f5760405162461bcd60e51b8152602060048201526024808201527f53656c6c20746178206665652063616e6e6f74206265206d6f7265207468616e6044820152632031302560e01b6064820152608401610a5f565b601755565b61167c611782565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6116a5611782565b600a8111156117045760405162461bcd60e51b815260206004820152602560248201527f53656c6c206275726e206665652063616e6e6f74206265206d6f7265207468616044820152646e2031302560d81b6064820152608401610a5f565b601a55565b611711611782565b6001600160a01b0381166117765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5f565b61177f81611cdf565b50565b6000546001600160a01b031633146112da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5f565b6001600160a01b03831661183e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a5f565b6001600160a01b03821661189f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a5f565b600081116119c65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a5f565b601e5460ff1680156119e557506020546001600160a01b038481169116145b15611a68576001600160a01b03831660009081526004602052604090205460ff16611a68576000818152601d602052604090205460ff16611a685760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920616c6c6f7765642062757920616d6f756e747300000000000000006044820152606401610a5f565b6000611a7330611269565b60215490915081108015908190611a945750602054600160a01b900460ff16155b8015611aae57506020546001600160a01b03868116911614155b8015611ac35750602054600160a81b900460ff165b15611ad6576021549150611ad682611d2f565b611ae1858585611dd6565b601c5460ff1615611c16576001600160a01b03851660009081526004602052604090205460ff16611c165760006103e8601b54600754611b219190612bbf565b611b2b9190612bde565b6020549091506001600160a01b0386811691161415611bb05780841115611bab5760405162461bcd60e51b815260206004820152602e60248201527f5472616e73616374656420616d6f756e742065786365656420746865206d617860448201526d20616c6c6f7765642076616c756560901b6064820152608401610a5f565b611c14565b80611bba86611269565b1115611c145760405162461bcd60e51b8152602060048201526024808201527f57616c6c65742062616c616e6365206578636565647320746865206d6178206c6044820152631a5b5a5d60e21b6064820152608401610a5f565b505b5050505050565b60008184841115611c415760405162461bcd60e51b8152600401610a5f9190612945565b505050900390565b6000806000611c5661210d565b9092509050611c658282611c6c565b9250505090565b6000610bfc8284612bde565b6000610bfc8284612c00565b6000806000806000806000806000611c9b8a61228f565b9250925092506000806000611cb98d8686611cb4611c49565b6122cb565b919f909e50909c50959a5093985091965092945050505050565b6000610bfc8284612b35565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6020805460ff60a01b1916600160a01b1790556000611d4f826002611c6c565b90506000611d5d8383611cd3565b905047611d698361231b565b6000611d754783611cd3565b9050611d81838261247c565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506020805460ff60a01b19169055505050565b6001600160a01b03831660009081526004602052604090205460ff1680611e1557506001600160a01b03821660009081526004602052604090205460ff165b15611e2757611e22612559565b611e75565b6020546001600160a01b0383811691161415611e7557611e75600d8054600e55600f80546010556011805460125560138054601655601754909355601854909155601954909155601a549055565b6000611e976064611e91601154856125b590919063ffffffff16565b90611c6c565b90506000611eb56064611e91601354866125b590919063ffffffff16565b6001600160a01b03861660009081526005602052604090205490915060ff168015611ef957506001600160a01b03841660009081526005602052604090205460ff16155b15611f2157611f1c8585611f1784611f118888611cd3565b90611cd3565b6125c1565b61204e565b6001600160a01b03851660009081526005602052604090205460ff16158015611f6257506001600160a01b03841660009081526005602052604090205460ff165b15611f7f57611f1c8585611f7a84611f118888611cd3565b6126e7565b6001600160a01b03851660009081526005602052604090205460ff16158015611fc157506001600160a01b03841660009081526005602052604090205460ff16155b15611fde57611f1c8585611fd984611f118888611cd3565b612790565b6001600160a01b03851660009081526005602052604090205460ff16801561201e57506001600160a01b03841660009081526005602052604090205460ff165b1561203b57611f1c858561203684611f118888611cd3565b6127d4565b61204e8585611fd984611f118888611cd3565b6000600d819055600f556015546120709086906001600160a01b031684612790565b6014546120889086906001600160a01b031683612790565b600e54600d55601054600f556001600160a01b03851660009081526004602052604090205460ff16806120d357506001600160a01b03841660009081526004602052604090205460ff165b806120eb57506020546001600160a01b038581169116145b15611c1657611c16600e54600d55601054600f55601254601155601654601355565b6008546007546000918291825b60065481101561225f5782600160006006848154811061213c5761213c612b09565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121a7575081600260006006848154811061218057612180612b09565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121bd57600854600754945094505050509091565b61220360016000600684815481106121d7576121d7612b09565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611cd3565b925061224b600260006006848154811061221f5761221f612b09565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611cd3565b91508061225781612b62565b91505061211a565b5060075460085461226f91611c6c565b821015612286576008546007549350935050509091565b90939092509050565b60008060008061229e85612847565b905060006122ab86612863565b905060006122bd82611f118986611cd3565b979296509094509092505050565b60008080806122da88866125b5565b905060006122e888876125b5565b905060006122f688886125b5565b9050600061230882611f118686611cd3565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235057612350612b09565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a457600080fd5b505afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190612c18565b816001815181106123ef576123ef612b09565b6001600160a01b039283166020918202929092010152601f5461241591309116846117dc565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061244e908590600090869030904290600401612c35565b600060405180830381600087803b15801561246857600080fd5b505af1158015611c14573d6000803e3d6000fd5b601f546124949030906001600160a01b0316846117dc565b601f546001600160a01b031663f305d7198230856000806124bd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c169190612ca6565b600d541580156125695750600f54155b80156125755750601354155b80156125815750601154155b1561258857565b600d8054600e55600f80546010556011805460125560138054601655600093849055918390559082905555565b6000610bfc8284612bbf565b6000806000806000806125d387611c84565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126059088611cd3565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546126349087611cd3565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546126639086611c78565b6001600160a01b0389166000908152600160205260409020556126858161287f565b61268f8483612908565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126d491815260200190565b60405180910390a3505050505050505050565b6000806000806000806126f987611c84565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061272b9087611cd3565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546127619084611c78565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546126639086611c78565b6000806000806000806127a287611c84565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506126349087611cd3565b6000806000806000806127e687611c84565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128189088611cd3565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461272b9087611cd3565b6000610b106064611e91600d54856125b590919063ffffffff16565b6000610b106064611e91600f54856125b590919063ffffffff16565b6000612889611c49565b9050600061289783836125b5565b306000908152600160205260409020549091506128b49082611c78565b3060009081526001602090815260408083209390935560059052205460ff161561290357306000908152600260205260409020546128f29084611c78565b306000908152600260205260409020555b505050565b6008546129159083611cd3565b6008556009546129259082611c78565b6009555050565b60006020828403121561293e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561297257858101830151858201604001528201612956565b81811115612984576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461177f57600080fd5b600080604083850312156129c257600080fd5b82356129cd8161299a565b946020939093013593505050565b6000806000606084860312156129f057600080fd5b83356129fb8161299a565b92506020840135612a0b8161299a565b929592945050506040919091013590565b600060208284031215612a2e57600080fd5b8135610bfc8161299a565b80358015158114612a4957600080fd5b919050565b60008060408385031215612a6157600080fd5b82359150612a7160208401612a39565b90509250929050565b600060208284031215612a8c57600080fd5b610bfc82612a39565b60008060408385031215612aa857600080fd5b8235612ab38161299a565b91506020830135612ac38161299a565b809150509250929050565b600181811c90821680612ae257607f821691505b60208210811415612b0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612b4757612b47612b1f565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612b7657612b76612b1f565b5060010190565b60208082526022908201527f4f6e6c792061646d696e206f7220616e7469206d616e6167657220616c6c6f77604082015261195960f21b606082015260800190565b6000816000190483118215151615612bd957612bd9612b1f565b500290565b600082612bfb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612c1357612c13612b1f565b500190565b600060208284031215612c2a57600080fd5b8151610bfc8161299a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c855784516001600160a01b031683529383019391830191600101612c60565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cbb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201efb278561a9371ef6e3dcd4b76e03ab26e59aad501197217dba1d017de62c1a64736f6c63430008090033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf2000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf20000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec800000000000

-----Decoded View---------------
Arg [0] : _uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _marketingWallet (address): 0x320031A0Cb0E6451F794209CC8A2ea08a8ACCbF2
Arg [2] : _antiManager (address): 0x320031A0Cb0E6451F794209CC8A2ea08a8ACCbF2
Arg [3] : _allowedBuyAmount (uint256[]): 65536000000000000000000,131072000000000000000000,262144000000000000000000,524288000000000000000000,1048576000000000000000000,2097152000000000000000000,4194304000000000000000000,8388608000000000000000000,16777216000000000000000000,33554432000000000000000000,67108864000000000000000000,134217728000000000000000000,268435456000000000000000000,536870912000000000000000000

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf2
Arg [2] : 000000000000000000000000320031a0cb0e6451f794209cc8a2ea08a8accbf2
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 000000000000000000000000000000000000000000000de0b6b3a76400000000
Arg [6] : 000000000000000000000000000000000000000000001bc16d674ec800000000
Arg [7] : 000000000000000000000000000000000000000000003782dace9d9000000000
Arg [8] : 000000000000000000000000000000000000000000006f05b59d3b2000000000
Arg [9] : 00000000000000000000000000000000000000000000de0b6b3a764000000000
Arg [10] : 00000000000000000000000000000000000000000001bc16d674ec8000000000
Arg [11] : 00000000000000000000000000000000000000000003782dace9d90000000000
Arg [12] : 00000000000000000000000000000000000000000006f05b59d3b20000000000
Arg [13] : 0000000000000000000000000000000000000000000de0b6b3a7640000000000
Arg [14] : 0000000000000000000000000000000000000000001bc16d674ec80000000000
Arg [15] : 0000000000000000000000000000000000000000003782dace9d900000000000
Arg [16] : 0000000000000000000000000000000000000000006f05b59d3b200000000000
Arg [17] : 000000000000000000000000000000000000000000de0b6b3a76400000000000
Arg [18] : 000000000000000000000000000000000000000001bc16d674ec800000000000


Deployed Bytecode Sourcemap

28810:22822:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49080:165;;;;;;;;;;-1:-1:-1;49080:165:0;;;;;:::i;:::-;;:::i;:::-;;32174:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33086:161;;;;;;;;;;-1:-1:-1;33086:161:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;33086:161:0;1257:187:1;30287:38:0;;;;;;;;;;;;;;;;;;;1595:25:1;;;1583:2;1568:18;30287:38:0;1449:177:1;34207:87:0;;;;;;;;;;-1:-1:-1;34276:10:0;;34207:87;;30522:41;;;;;;;;;;-1:-1:-1;30522:41:0;;;;-1:-1:-1;;;;;30522:41:0;;;;;;-1:-1:-1;;;;;1822:32:1;;;1804:51;;1792:2;1777:18;30522:41:0;1631:230:1;32451:95:0;;;;;;;;;;-1:-1:-1;32531:7:0;;32451:95;;30039:30;;;;;;;;;;;;;;;;29850:32;;;;;;;;;;;;;;;;33255:313;;;;;;;;;;-1:-1:-1;33255:313:0;;;;;:::i;:::-;;:::i;35132:253::-;;;;;;;;;;-1:-1:-1;35132:253:0;;;;;:::i;:::-;;:::i;32360:83::-;;;;;;;;;;-1:-1:-1;32426:9:0;;32360:83;;32426:9;;;;2469:36:1;;2457:2;2442:18;32360:83:0;2327:184:1;35828:479:0;;;;;;;;;;-1:-1:-1;35828:479:0;;;;;:::i;:::-;;:::i;33576:218::-;;;;;;;;;;-1:-1:-1;33576:218:0;;;;;:::i;:::-;;:::i;29580:26::-;;;;;;;;;;;;;;;;34302:377;;;;;;;;;;-1:-1:-1;34302:377:0;;;;;:::i;:::-;;:::i;48721:111::-;;;;;;;;;;-1:-1:-1;48721:111:0;;;;;:::i;:::-;;:::i;34687:437::-;;;;;;;;;;-1:-1:-1;34687:437:0;;;;;:::i;:::-;;:::i;49462:201::-;;;;;;;;;;-1:-1:-1;49462:201:0;;;;;:::i;:::-;;:::i;30570:28::-;;;;;;;;;;-1:-1:-1;30570:28:0;;;;-1:-1:-1;;;;;30570:28:0;;;51229:198;;;;;;;;;;-1:-1:-1;51229:198:0;;;;;:::i;:::-;;:::i;30635:41::-;;;;;;;;;;-1:-1:-1;30635:41:0;;;;-1:-1:-1;;;30635:41:0;;;;;;35393:427;;;;;;;;;;-1:-1:-1;35393:427:0;;;;;:::i;:::-;;:::i;40814:124::-;;;;;;;;;;-1:-1:-1;40814:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;40903:27:0;40879:4;40903:27;;;:18;:27;;;;;;;;;40814:124;30332:28;;;;;;;;;;-1:-1:-1;30332:28:0;;;;;;;;50288:226;;;;;;;;;;-1:-1:-1;50288:226:0;;;;;:::i;:::-;;:::i;48958:114::-;;;;;;;;;;-1:-1:-1;48958:114:0;;;;;:::i;:::-;;:::i;30221:59::-;;;;;;;;;;;;30276:4;30221:59;;29663:32;;;;;;;;;;;;;;;;32554:198;;;;;;;;;;-1:-1:-1;32554:198:0;;;;;:::i;:::-;;:::i;17385:103::-;;;;;;;;;;;;;:::i;29889:30::-;;;;;;;;;;-1:-1:-1;29889:30:0;;;;-1:-1:-1;;;;;29889:30:0;;;30162:31;;;;;;;;;;;;;;;;30076:36;;;;;;;;;;;;;;;;34079:120;;;;;;;;;;-1:-1:-1;34079:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;34171:20:0;34147:4;34171:20;;;:11;:20;;;;;;;;;34079:120;16737:87;;;;;;;;;;-1:-1:-1;16783:7:0;16810:6;-1:-1:-1;;;;;16810:6:0;16737:87;;49253:201;;;;;;;;;;-1:-1:-1;49253:201:0;;;;;:::i;:::-;;:::i;32265:87::-;;;;;;;;;;;;;:::i;50720:322::-;;;;;;;;;;-1:-1:-1;50720:322:0;;;;;:::i;:::-;;:::i;33802:269::-;;;;;;;;;;-1:-1:-1;33802:269:0;;;;;:::i;:::-;;:::i;32760:167::-;;;;;;;;;;-1:-1:-1;32760:167:0;;;;;:::i;:::-;;:::i;50054:226::-;;;;;;;;;;-1:-1:-1;50054:226:0;;;;;:::i;:::-;;:::i;29764:27::-;;;;;;;;;;;;;;;;51435:194;;;;;;;;;;-1:-1:-1;51435:194:0;;;;;:::i;:::-;;:::i;51050:171::-;;;;;;;;;;-1:-1:-1;51050:171:0;;;;;:::i;:::-;;:::i;30119:36::-;;;;;;;;;;;;;;;;49671:171;;;;;;;;;;-1:-1:-1;49671:171:0;;;;;:::i;:::-;;:::i;50522:190::-;;;;;;;;;;-1:-1:-1;50522:190:0;;;;;:::i;:::-;;:::i;30487:26::-;;;;;;;;;;-1:-1:-1;30487:26:0;;;;;;;-1:-1:-1;;;;;30487:26:0;;;30431;;;;;;;;;;-1:-1:-1;30431:26:0;;;;;;;;32935:143;;;;;;;;;;-1:-1:-1;32935:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;33043:18:0;;;33016:7;33043:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32935:143;48840:110;;;;;;;;;;-1:-1:-1;48840:110:0;;;;;:::i;:::-;;:::i;49850:196::-;;;;;;;;;;-1:-1:-1;49850:196:0;;;;;:::i;:::-;;:::i;17643:201::-;;;;;;;;;;-1:-1:-1;17643:201:0;;;;;:::i;:::-;;:::i;49080:165::-;16623:13;:11;:13::i;:::-;49172:2:::1;49162:6;:12;;49154:56;;;::::0;-1:-1:-1;;;49154:56:0;;4174:2:1;49154:56:0::1;::::0;::::1;4156:21:1::0;4213:2;4193:18;;;4186:30;4252:33;4232:18;;;4225:61;4303:18;;49154:56:0::1;;;;;;;;;49221:7;:16:::0;49080:165::o;32174:83::-;32211:13;32244:5;32237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32174:83;:::o;33086:161::-;33161:4;33178:39;681:10;33201:7;33210:6;33178:8;:39::i;:::-;-1:-1:-1;33235:4:0;33086:161;;;;;:::o;33255:313::-;33353:4;33370:36;33380:6;33388:9;33399:6;33370:9;:36::i;:::-;33417:121;33426:6;681:10;33448:89;33486:6;33448:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33448:19:0;;;;;;:11;:19;;;;;;;;681:10;33448:33;;;;;;;;;;:37;:89::i;:::-;33417:8;:121::i;:::-;-1:-1:-1;33556:4:0;33255:313;;;;;:::o;35132:253::-;35199:7;35238;;35227;:18;;35219:73;;;;-1:-1:-1;;;35219:73:0;;4919:2:1;35219:73:0;;;4901:21:1;4958:2;4938:18;;;4931:30;4997:34;4977:18;;;4970:62;-1:-1:-1;;;5048:18:1;;;5041:40;5098:19;;35219:73:0;4717:406:1;35219:73:0;35303:19;35325:10;:8;:10::i;:::-;35303:32;-1:-1:-1;35353:24:0;:7;35303:32;35353:11;:24::i;:::-;35346:31;35132:253;-1:-1:-1;;;35132:253:0:o;35828:479::-;16623:13;:11;:13::i;:::-;-1:-1:-1;;;;;35910:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35902:60;;;::::0;-1:-1:-1;;;35902:60:0;;5330:2:1;35902:60:0::1;::::0;::::1;5312:21:1::0;5369:2;5349:18;;;5342:30;5408:29;5388:18;;;5381:57;5455:18;;35902:60:0::1;5128:351:1::0;35902:60:0::1;35978:9;35973:327;35997:9;:16:::0;35993:20;::::1;35973:327;;;36055:7;-1:-1:-1::0;;;;;36039:23:0::1;:9;36049:1;36039:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36039:12:0::1;:23;36035:254;;;36098:9;36108:16:::0;;:20:::1;::::0;36127:1:::1;::::0;36108:20:::1;:::i;:::-;36098:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;36083:9:::1;:12:::0;;-1:-1:-1;;;;;36098:31:0;;::::1;::::0;36093:1;;36083:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;36083:46:0::1;-1:-1:-1::0;;;;;36083:46:0;;::::1;;::::0;;36148:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;36187:11:::1;:20:::0;;;;:28;;-1:-1:-1;;36187:28:0::1;::::0;;36234:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36234:15:0;;;;;-1:-1:-1;;;;;;36234:15:0::1;::::0;;;;;35973:327:::1;35828:479:::0;:::o;36035:254::-:1;36015:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35973:327;;;;35828:479:::0;:::o;33576:218::-;681:10;33664:4;33713:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33713:34:0;;;;;;;;;;33664:4;;33681:83;;33704:7;;33713:50;;33752:10;33713:38;:50::i;34302:377::-;681:10;34354:14;34403:19;;;:11;:19;;;;;;;;34402:20;34394:77;;;;-1:-1:-1;;;34394:77:0;;6352:2:1;34394:77:0;;;6334:21:1;6391:2;6371:18;;;6364:30;6430:34;6410:18;;;6403:62;-1:-1:-1;;;6481:18:1;;;6474:42;6533:19;;34394:77:0;6150:408:1;34394:77:0;34483:15;34507:19;34518:7;34507:10;:19::i;:::-;-1:-1:-1;;;;;;;;;34555:15:0;;;;;;:7;:15;;;;;;34482:44;;-1:-1:-1;34555:28:0;;:15;-1:-1:-1;34482:44:0;34555:19;:28::i;:::-;-1:-1:-1;;;;;34537:15:0;;;;;;:7;:15;;;;;:46;34604:7;;:20;;34616:7;34604:11;:20::i;:::-;34594:7;:30;34648:10;;:23;;34663:7;34648:14;:23::i;:::-;34635:10;:36;-1:-1:-1;;;34302:377:0:o;48721:111::-;16623:13;:11;:13::i;:::-;-1:-1:-1;;;;;48790:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;48790:34:0::1;48820:4;48790:34;::::0;;48721:111::o;34687:437::-;34778:7;34817;;34806;:18;;34798:62;;;;-1:-1:-1;;;34798:62:0;;6765:2:1;34798:62:0;;;6747:21:1;6804:2;6784:18;;;6777:30;6843:33;6823:18;;;6816:61;6894:18;;34798:62:0;6563:355:1;34798:62:0;34876:17;34871:246;;34911:15;34935:19;34946:7;34935:10;:19::i;:::-;-1:-1:-1;34910:44:0;;-1:-1:-1;34969:14:0;;-1:-1:-1;;;;;34969:14:0;34871:246;35018:23;35049:19;35060:7;35049:10;:19::i;:::-;-1:-1:-1;35016:52:0;;-1:-1:-1;35083:22:0;;-1:-1:-1;;;;;35083:22:0;49462:201;16623:13;:11;:13::i;:::-;49572:2:::1;49556:12;:18;;49548:68;;;::::0;-1:-1:-1;;;49548:68:0;;7125:2:1;49548:68:0::1;::::0;::::1;7107:21:1::0;7164:2;7144:18;;;7137:30;7203:34;7183:18;;;7176:62;-1:-1:-1;;;7254:18:1;;;7247:35;7299:19;;49548:68:0::1;6923:401:1::0;49548:68:0::1;49627:13;:28:::0;49462:201::o;51229:198::-;16783:7;16810:6;-1:-1:-1;;;;;16810:6:0;51293:10;:21;;:50;;-1:-1:-1;51332:11:0;;;;;-1:-1:-1;;;;;51332:11:0;51318:10;:25;51293:50;51285:97;;;;-1:-1:-1;;;51285:97:0;;;;;;;:::i;:::-;51393:16;:26;;-1:-1:-1;;51393:26:0;;;;;;;;;;51229:198::o;35393:427::-;16623:13;:11;:13::i;:::-;35494:15:::1;::::0;-1:-1:-1;;;;;35475:35:0;;::::1;35494:15:::0;::::1;35475:35;;35467:82;;;::::0;-1:-1:-1;;;35467:82:0;;7934:2:1;35467:82:0::1;::::0;::::1;7916:21:1::0;7973:2;7953:18;;;7946:30;8012:34;7992:18;;;7985:62;-1:-1:-1;;;8063:18:1;;;8056:32;8105:19;;35467:82:0::1;7732:398:1::0;35467:82:0::1;-1:-1:-1::0;;;;;35569:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35568:21;35560:61;;;::::0;-1:-1:-1;;;35560:61:0;;5330:2:1;35560:61:0::1;::::0;::::1;5312:21:1::0;5369:2;5349:18;;;5342:30;5408:29;5388:18;;;5381:57;5455:18;;35560:61:0::1;5128:351:1::0;35560:61:0::1;-1:-1:-1::0;;;;;35636:16:0;::::1;35655:1;35636:16:::0;;;:7:::1;:16;::::0;;;;;:20;35632:109:::1;;-1:-1:-1::0;;;;;35712:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;35692:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;35673:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;35632:109:::1;-1:-1:-1::0;;;;;35751:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;35751:27:0::1;35774:4;35751:27:::0;;::::1;::::0;;;35789:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;35789:23:0::1;::::0;;::::1;::::0;;35393:427::o;50288:226::-;16623:13;:11;:13::i;:::-;50410:2:::1;50390:16;:22;;50382:77;;;::::0;-1:-1:-1;;;50382:77:0;;8337:2:1;50382:77:0::1;::::0;::::1;8319:21:1::0;8376:2;8356:18;;;8349:30;8415:34;8395:18;;;8388:62;-1:-1:-1;;;8466:18:1;;;8459:40;8516:19;;50382:77:0::1;8135:406:1::0;50382:77:0::1;50470:17;:36:::0;50288:226::o;48958:114::-;16623:13;:11;:13::i;:::-;49037:15:::1;:27:::0;;-1:-1:-1;;;;;;49037:27:0::1;-1:-1:-1::0;;;;;49037:27:0;;;::::1;::::0;;;::::1;::::0;;48958:114::o;32554:198::-;-1:-1:-1;;;;;32644:20:0;;32620:7;32644:20;;;:11;:20;;;;;;;;32640:49;;;-1:-1:-1;;;;;;32673:16:0;;;;;:7;:16;;;;;;;32554:198::o;32640:49::-;-1:-1:-1;;;;;32727:16:0;;;;;;:7;:16;;;;;;32707:37;;:19;:37::i;17385:103::-;16623:13;:11;:13::i;:::-;17450:30:::1;17477:1;17450:18;:30::i;:::-;17385:103::o:0;49253:201::-;16623:13;:11;:13::i;:::-;49363:2:::1;49347:12;:18;;49339:68;;;::::0;-1:-1:-1;;;49339:68:0;;8748:2:1;49339:68:0::1;::::0;::::1;8730:21:1::0;8787:2;8767:18;;;8760:30;8826:34;8806:18;;;8799:62;-1:-1:-1;;;8877:18:1;;;8870:35;8922:19;;49339:68:0::1;8546:401:1::0;49339:68:0::1;49418:13;:28:::0;49253:201::o;32265:87::-;32304:13;32337:7;32330:14;;;;;:::i;50720:322::-;16623:13;:11;:13::i;:::-;50841:1:::1;50819:18;:23;;50811:81;;;::::0;-1:-1:-1;;;50811:81:0;;9154:2:1;50811:81:0::1;::::0;::::1;9136:21:1::0;9193:2;9173:18;;;9166:30;9232:34;9212:18;;;9205:62;-1:-1:-1;;;9283:18:1;;;9276:43;9336:19;;50811:81:0::1;8952:409:1::0;50811:81:0::1;50933:2;50911:18;:24;;50903:80;;;::::0;-1:-1:-1;;;50903:80:0;;9568:2:1;50903:80:0::1;::::0;::::1;9550:21:1::0;9607:2;9587:18;;;9580:30;9646:34;9626:18;;;9619:62;-1:-1:-1;;;9697:18:1;;;9690:41;9748:19;;50903:80:0::1;9366:407:1::0;50903:80:0::1;50994:19;:40:::0;50720:322::o;33802:269::-;33895:4;33912:129;681:10;33935:7;33944:96;33983:15;33944:96;;;;;;;;;;;;;;;;;681:10;33944:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33944:34:0;;;;;;;;;;;;:38;:96::i;32760:167::-;32838:4;32855:42;681:10;32879:9;32890:6;32855:9;:42::i;50054:226::-;16623:13;:11;:13::i;:::-;50176:2:::1;50156:16;:22;;50148:77;;;::::0;-1:-1:-1;;;50148:77:0;;9980:2:1;50148:77:0::1;::::0;::::1;9962:21:1::0;10019:2;9999:18;;;9992:30;10058:34;10038:18;;;10031:62;-1:-1:-1;;;10109:18:1;;;10102:40;10159:19;;50148:77:0::1;9778:406:1::0;50148:77:0::1;50236:17;:36:::0;50054:226::o;51435:194::-;16783:7;16810:6;-1:-1:-1;;;;;16810:6:0;51497:10;:21;;:50;;-1:-1:-1;51536:11:0;;;;;-1:-1:-1;;;;;51536:11:0;51522:10;:25;51497:50;51489:97;;;;-1:-1:-1;;;51489:97:0;;;;;;;:::i;:::-;51597:14;:24;;-1:-1:-1;;51597:24:0;;;;;;;;;;51435:194::o;51050:171::-;16623:13;:11;:13::i;:::-;51127:21:::1;:32:::0;;-1:-1:-1;;;;51127:32:0::1;-1:-1:-1::0;;;51127:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;51175:38:::1;::::0;1397:41:1;;;51175:38:0::1;::::0;1370:18:1;51175:38:0::1;;;;;;;51050:171:::0;:::o;49671:::-;16623:13;:11;:13::i;:::-;49766:2:::1;49755:7;:13;;49747:58;;;::::0;-1:-1:-1;;;49747:58:0;;10391:2:1;49747:58:0::1;::::0;::::1;10373:21:1::0;;;10410:18;;;10403:30;10469:34;10449:18;;;10442:62;10521:18;;49747:58:0::1;10189:356:1::0;49747:58:0::1;49816:8;:18:::0;49671:171::o;50522:190::-;16623:13;:11;:13::i;:::-;50626:2:::1;50612:10;:16;;50604:65;;;::::0;-1:-1:-1;;;50604:65:0;;10752:2:1;50604:65:0::1;::::0;::::1;10734:21:1::0;10791:2;10771:18;;;10764:30;10830:34;10810:18;;;10803:62;-1:-1:-1;;;10881:18:1;;;10874:34;10925:19;;50604:65:0::1;10550:400:1::0;50604:65:0::1;50680:11;:24:::0;50522:190::o;48840:110::-;16623:13;:11;:13::i;:::-;-1:-1:-1;;;;;48907:27:0::1;48937:5;48907:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;48907:35:0::1;::::0;;48840:110::o;49850:196::-;16623:13;:11;:13::i;:::-;49957:2:::1;49942:11;:17;;49934:67;;;::::0;-1:-1:-1;;;49934:67:0;;11157:2:1;49934:67:0::1;::::0;::::1;11139:21:1::0;11196:2;11176:18;;;11169:30;11235:34;11215:18;;;11208:62;-1:-1:-1;;;11286:18:1;;;11279:35;11331:19;;49934:67:0::1;10955:401:1::0;49934:67:0::1;50012:12;:26:::0;49850:196::o;17643:201::-;16623:13;:11;:13::i;:::-;-1:-1:-1;;;;;17732:22:0;::::1;17724:73;;;::::0;-1:-1:-1;;;17724:73:0;;11563:2:1;17724:73:0::1;::::0;::::1;11545:21:1::0;11602:2;11582:18;;;11575:30;11641:34;11621:18;;;11614:62;-1:-1:-1;;;11692:18:1;;;11685:36;11738:19;;17724:73:0::1;11361:402:1::0;17724:73:0::1;17808:28;17827:8;17808:18;:28::i;:::-;17643:201:::0;:::o;16902:132::-;16783:7;16810:6;-1:-1:-1;;;;;16810:6:0;681:10;16966:23;16958:68;;;;-1:-1:-1;;;16958:68:0;;11970:2:1;16958:68:0;;;11952:21:1;;;11989:18;;;11982:30;12048:34;12028:18;;;12021:62;12100:18;;16958:68:0;11768:356:1;40946:337:0;-1:-1:-1;;;;;41039:19:0;;41031:68;;;;-1:-1:-1;;;41031:68:0;;12331:2:1;41031:68:0;;;12313:21:1;12370:2;12350:18;;;12343:30;12409:34;12389:18;;;12382:62;-1:-1:-1;;;12460:18:1;;;12453:34;12504:19;;41031:68:0;12129:400:1;41031:68:0;-1:-1:-1;;;;;41118:21:0;;41110:68;;;;-1:-1:-1;;;41110:68:0;;12736:2:1;41110:68:0;;;12718:21:1;12775:2;12755:18;;;12748:30;12814:34;12794:18;;;12787:62;-1:-1:-1;;;12865:18:1;;;12858:32;12907:19;;41110:68:0;12534:398:1;41110:68:0;-1:-1:-1;;;;;41191:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41243:32;;1595:25:1;;;41243:32:0;;1568:18:1;41243:32:0;;;;;;;40946:337;;;:::o;41291:1780::-;-1:-1:-1;;;;;41413:18:0;;41405:68;;;;-1:-1:-1;;;41405:68:0;;13139:2:1;41405:68:0;;;13121:21:1;13178:2;13158:18;;;13151:30;13217:34;13197:18;;;13190:62;-1:-1:-1;;;13268:18:1;;;13261:35;13313:19;;41405:68:0;12937:401:1;41405:68:0;41501:1;41492:6;:10;41484:64;;;;-1:-1:-1;;;41484:64:0;;13545:2:1;41484:64:0;;;13527:21:1;13584:2;13564:18;;;13557:30;13623:34;13603:18;;;13596:62;-1:-1:-1;;;13674:18:1;;;13667:39;13723:19;;41484:64:0;13343:405:1;41484:64:0;41565:14;;;;:39;;;;-1:-1:-1;41591:13:0;;-1:-1:-1;;;;;41583:21:0;;;41591:13;;41583:21;41565:39;41561:197;;;-1:-1:-1;;;;;40903:27:0;;40879:4;40903:27;;;:18;:27;;;;;;;;41621:126;;41678:24;;;;:16;:24;;;;;;;;41670:61;;;;-1:-1:-1;;;41670:61:0;;13955:2:1;41670:61:0;;;13937:21:1;13994:2;13974:18;;;13967:30;14033:26;14013:18;;;14006:54;14077:18;;41670:61:0;13753:348:1;41670:61:0;42052:28;42083:24;42101:4;42083:9;:24::i;:::-;42169:29;;42052:55;;-1:-1:-1;42145:53:0;;;;;;;42213:40;;-1:-1:-1;42237:16:0;;-1:-1:-1;;;42237:16:0;;;;42236:17;42213:40;:65;;;;-1:-1:-1;42265:13:0;;-1:-1:-1;;;;;42257:21:0;;;42265:13;;42257:21;;42213:65;:90;;;;-1:-1:-1;42282:21:0;;-1:-1:-1;;;42282:21:0;;;;42213:90;42209:255;;;42343:29;;42320:52;;42416:36;42431:20;42416:14;:36::i;:::-;42542:32;42557:4;42563:2;42567:6;42542:14;:32::i;:::-;42591:16;;;;42587:477;;;-1:-1:-1;;;;;40903:27:0;;40879:4;40903:27;;;:18;:27;;;;;;;;42624:429;;42673:15;30276:4;42701:19;;42691:7;;:29;;;;:::i;:::-;:60;;;;:::i;:::-;42780:13;;42673:78;;-1:-1:-1;;;;;;42774:19:0;;;42780:13;;42774:19;42770:268;;;42834:10;42824:6;:20;;42816:79;;;;-1:-1:-1;;;42816:79:0;;14703:2:1;42816:79:0;;;14685:21:1;14742:2;14722:18;;;14715:30;14781:34;14761:18;;;14754:62;-1:-1:-1;;;14832:18:1;;;14825:44;14886:19;;42816:79:0;14501:410:1;42816:79:0;42770:268;;;42967:10;42950:13;42960:2;42950:9;:13::i;:::-;:27;;42942:76;;;;-1:-1:-1;;;42942:76:0;;15118:2:1;42942:76:0;;;15100:21:1;15157:2;15137:18;;;15130:30;15196:34;15176:18;;;15169:62;-1:-1:-1;;;15247:18:1;;;15240:34;15291:19;;42942:76:0;14916:400:1;42942:76:0;42654:399;42624:429;41394:1677;;41291:1780;;;:::o;13774:240::-;13894:7;13955:12;13947:6;;;;13939:29;;;;-1:-1:-1;;;13939:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;13990:5:0;;;13774:240::o;38408:164::-;38450:7;38471:15;38488;38507:19;:17;:19::i;:::-;38470:56;;-1:-1:-1;38470:56:0;-1:-1:-1;38544:20:0;38470:56;;38544:11;:20::i;:::-;38537:27;;;;38408:164;:::o;12632:98::-;12690:7;12717:5;12721:1;12717;:5;:::i;11495:98::-;11553:7;11580:5;11584:1;11580;:5;:::i;37206:419::-;37265:7;37274;37283;37292;37301;37310;37331:23;37356:12;37370:18;37392:20;37404:7;37392:11;:20::i;:::-;37330:82;;;;;;37424:15;37441:23;37466:12;37482:50;37494:7;37503:4;37509:10;37521;:8;:10::i;:::-;37482:11;:50::i;:::-;37423:109;;;;-1:-1:-1;37423:109:0;;-1:-1:-1;37583:15:0;;-1:-1:-1;37600:4:0;;-1:-1:-1;37606:10:0;;-1:-1:-1;37206:419:0;;-1:-1:-1;;;;;37206:419:0:o;11876:98::-;11934:7;11961:5;11965:1;11961;:5;:::i;18004:191::-;18078:16;18097:6;;-1:-1:-1;;;;;18114:17:0;;;-1:-1:-1;;;;;;18114:17:0;;;;;;18147:40;;18097:6;;;;;;;18147:40;;18078:16;18147:40;18067:128;18004:191;:::o;43079:986::-;30980:16;:23;;-1:-1:-1;;;;30980:23:0;-1:-1:-1;;;30980:23:0;;;;43230:27:::1;:20:::0;43255:1:::1;43230:24;:27::i;:::-;43215:42:::0;-1:-1:-1;43268:17:0::1;43288:30;:20:::0;43215:42;43288:24:::1;:30::i;:::-;43268:50:::0;-1:-1:-1;43621:21:0::1;43687:22;43704:4:::0;43687:16:::1;:22::i;:::-;43849:18;43870:41;:21;43896:14:::0;43870:25:::1;:41::i;:::-;43849:62;;43961:35;43974:9;43985:10;43961:12;:35::i;:::-;44014:43;::::0;;15656:25:1;;;15712:2;15697:18;;15690:34;;;15740:18;;;15733:34;;;44014:43:0::1;::::0;15644:2:1;15629:18;44014:43:0::1;;;;;;;-1:-1:-1::0;;31026:16:0;:24;;-1:-1:-1;;;;31026:24:0;;;-1:-1:-1;;;43079:986:0:o;45265:1784::-;-1:-1:-1;;;;;45363:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;45393:29:0;;;;;;:18;:29;;;;;;;;45363:59;45359:188;;;45439:14;:12;:14::i;:::-;45359:188;;;45488:13;;-1:-1:-1;;;;;45475:26:0;;;45488:13;;45475:26;45471:76;;;45518:17;39863:7;;;39845:15;:25;39905:13;;;39881:21;:37;39948:8;;;39929:16;:27;39991:13;;;39967:21;:37;40027:11;;40017:21;;;40065:17;;40049:33;;;40109:17;;40093:33;;;40148:12;;40137:23;;39799:369;45518:17;45613:15;45631:29;45656:3;45631:20;45642:8;;45631:6;:10;;:20;;;;:::i;:::-;:24;;:29::i;:::-;45613:47;;45671:20;45694:34;45724:3;45694:25;45705:13;;45694:6;:10;;:25;;;;:::i;:34::-;-1:-1:-1;;;;;45745:19:0;;;;;;:11;:19;;;;;;45671:57;;-1:-1:-1;45745:19:0;;:46;;;;-1:-1:-1;;;;;;45769:22:0;;;;;;:11;:22;;;;;;;;45768:23;45745:46;45741:762;;;45808:81;45830:6;45838:9;45850:37;45874:12;45850:19;:6;45861:7;45850:10;:19::i;:::-;:23;;:37::i;:::-;45808:21;:81::i;:::-;45741:762;;;-1:-1:-1;;;;;45912:19:0;;;;;;:11;:19;;;;;;;;45911:20;:46;;;;-1:-1:-1;;;;;;45935:22:0;;;;;;:11;:22;;;;;;;;45911:46;45907:596;;;45974:79;45994:6;46002:9;46014:37;46038:12;46014:19;:6;46025:7;46014:10;:19::i;:37::-;45974:19;:79::i;45907:596::-;-1:-1:-1;;;;;46076:19:0;;;;;;:11;:19;;;;;;;;46075:20;:47;;;;-1:-1:-1;;;;;;46100:22:0;;;;;;:11;:22;;;;;;;;46099:23;46075:47;46071:432;;;46139:77;46157:6;46165:9;46177:37;46201:12;46177:19;:6;46188:7;46177:10;:19::i;:37::-;46139:17;:77::i;46071:432::-;-1:-1:-1;;;;;46238:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46261:22:0;;;;;;:11;:22;;;;;;;;46238:45;46234:269;;;46300:81;46322:6;46330:9;46342:37;46366:12;46342:19;:6;46353:7;46342:10;:19::i;:37::-;46300:21;:81::i;46234:269::-;46414:77;46432:6;46440:9;46452:37;46476:12;46452:19;:6;46463:7;46452:10;:19::i;46414:77::-;46609:1;46599:7;:11;;;46621:13;:17;46677:10;;46651:46;;46669:6;;-1:-1:-1;;;;;46677:10:0;46689:7;46651:17;:46::i;:::-;46734:15;;46708:56;;46726:6;;-1:-1:-1;;;;;46734:15:0;46751:12;46708:17;:56::i;:::-;46829:15;;46819:7;:25;46871:21;;46855:13;:37;-1:-1:-1;;;;;46909:26:0;;-1:-1:-1;46909:26:0;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;46939:29:0;;;;;;:18;:29;;;;;;;;46909:59;:89;;;-1:-1:-1;46985:13:0;;-1:-1:-1;;;;;46972:26:0;;;46985:13;;46972:26;46909:89;46905:137;;;47015:15;40649;;40639:7;:25;40691:21;;40675:13;:37;40734:16;;40723:8;:27;40777:21;;40761:13;:37;40595:211;38580:556;38678:7;;38714;;38631;;;;;38732:289;38756:9;:16;38752:20;;38732:289;;;38822:7;38798;:21;38806:9;38816:1;38806:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38806:12:0;38798:21;;;;;;;;;;;;;:31;;:66;;;38857:7;38833;:21;38841:9;38851:1;38841:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38841:12:0;38833:21;;;;;;;;;;;;;:31;38798:66;38794:97;;;38874:7;;38883;;38866:25;;;;;;;38580:556;;:::o;38794:97::-;38916:34;38928:7;:21;38936:9;38946:1;38936:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38936:12:0;38928:21;;;;;;;;;;;;;38916:7;;:11;:34::i;:::-;38906:44;;38975:34;38987:7;:21;38995:9;39005:1;38995:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38995:12:0;38987:21;;;;;;;;;;;;;38975:7;;:11;:34::i;:::-;38965:44;-1:-1:-1;38774:3:0;;;;:::i;:::-;;;;38732:289;;;-1:-1:-1;39057:7:0;;39045;;:20;;:11;:20::i;:::-;39035:7;:30;39031:61;;;39075:7;;39084;;39067:25;;;;;;38580:556;;:::o;39031:61::-;39111:7;;39120;;-1:-1:-1;38580:556:0;-1:-1:-1;38580:556:0:o;37633:330::-;37693:7;37702;37711;37731:12;37746:24;37762:7;37746:15;:24::i;:::-;37731:39;;37781:18;37802:30;37824:7;37802:21;:30::i;:::-;37781:51;-1:-1:-1;37843:23:0;37869:33;37781:51;37869:17;:7;37881:4;37869:11;:17::i;:33::-;37843:59;37938:4;;-1:-1:-1;37944:10:0;;-1:-1:-1;37633:330:0;;-1:-1:-1;;;37633:330:0:o;37971:429::-;38086:7;;;;38142:24;:7;38154:11;38142;:24::i;:::-;38124:42;-1:-1:-1;38177:12:0;38192:21;:4;38201:11;38192:8;:21::i;:::-;38177:36;-1:-1:-1;38224:18:0;38245:27;:10;38260:11;38245:14;:27::i;:::-;38224:48;-1:-1:-1;38283:23:0;38309:33;38224:48;38309:17;:7;38321:4;38309:11;:17::i;:33::-;38361:7;;;;-1:-1:-1;38387:4:0;;-1:-1:-1;37971:429:0;;-1:-1:-1;;;;;;;37971:429:0:o;44073:589::-;44223:16;;;44237:1;44223:16;;;;;;;;44199:21;;44223:16;;;;;;;;;;-1:-1:-1;44223:16:0;44199:40;;44268:4;44250;44255:1;44250:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44250:23:0;;;:7;;;;;;;;;;:23;;;;44294:15;;:22;;;-1:-1:-1;;;44294:22:0;;;;:15;;;;;:20;;:22;;;;;44250:7;;44294:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44284:4;44289:1;44284:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44284:32:0;;;:7;;;;;;;;;:32;44361:15;;44329:62;;44346:4;;44361:15;44379:11;44329:8;:62::i;:::-;44430:15;;:224;;-1:-1:-1;;;44430:224:0;;-1:-1:-1;;;;;44430:15:0;;;;:66;;:224;;44511:11;;44430:15;;44581:4;;44608;;44628:15;;44430:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44670:514;44850:15;;44818:62;;44835:4;;-1:-1:-1;;;;;44850:15:0;44868:11;44818:8;:62::i;:::-;44923:15;;-1:-1:-1;;;;;44923:15:0;:31;44963:9;44996:4;45016:11;44923:15;;45128:7;16783;16810:6;-1:-1:-1;;;;;16810:6:0;;16737:87;45128:7;44923:253;;;;;;-1:-1:-1;;;;;;44923:253:0;;;-1:-1:-1;;;;;17510:15:1;;;44923:253:0;;;17492:34:1;17542:18;;;17535:34;;;;17585:18;;;17578:34;;;;17628:18;;;17621:34;17692:15;;;17671:19;;;17664:44;45150:15:0;17724:19:1;;;17717:35;17426:19;;44923:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40176:411::-;40223:7;;:12;:34;;;;-1:-1:-1;40239:13:0;;:18;40223:34;:56;;;;-1:-1:-1;40261:13:0;;:18;40223:56;:73;;;;-1:-1:-1;40283:8:0;;:13;40223:73;40219:86;;;40176:411::o;40219:86::-;40335:7;;;40317:15;:25;40377:13;;;40353:21;:37;40420:8;;;40401:16;:27;40463:13;;;40439:21;:37;-1:-1:-1;40489:11:0;;;;40511:17;;;;40539;;;;40567:12;40176:411::o;12233:98::-;12291:7;12318:5;12322:1;12318;:5;:::i;48150:563::-;48253:15;48270:23;48295:12;48309:23;48334:12;48348:18;48370:19;48381:7;48370:10;:19::i;:::-;-1:-1:-1;;;;;48418:15:0;;;;;;:7;:15;;;;;;48252:137;;-1:-1:-1;48252:137:0;;-1:-1:-1;48252:137:0;;-1:-1:-1;48252:137:0;-1:-1:-1;48252:137:0;-1:-1:-1;48252:137:0;-1:-1:-1;48418:28:0;;48438:7;48418:19;:28::i;:::-;-1:-1:-1;;;;;48400:15:0;;;;;;:7;:15;;;;;;;;:46;;;;48475:7;:15;;;;:28;;48495:7;48475:19;:28::i;:::-;-1:-1:-1;;;;;48457:15:0;;;;;;;:7;:15;;;;;;:46;;;;48535:18;;;;;;;:39;;48558:15;48535:22;:39::i;:::-;-1:-1:-1;;;;;48514:18:0;;;;;;:7;:18;;;;;:60;48585:26;48600:10;48585:14;:26::i;:::-;48622:23;48634:4;48640;48622:11;:23::i;:::-;48678:9;-1:-1:-1;;;;;48661:44:0;48670:6;-1:-1:-1;;;;;48661:44:0;;48689:15;48661:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;48661:44:0;;;;;;;;48241:472;;;;;;48150:563;;;:::o;47567:575::-;47668:15;47685:23;47710:12;47724:23;47749:12;47763:18;47785:19;47796:7;47785:10;:19::i;:::-;-1:-1:-1;;;;;47833:15:0;;;;;;:7;:15;;;;;;47667:137;;-1:-1:-1;47667:137:0;;-1:-1:-1;47667:137:0;;-1:-1:-1;47667:137:0;-1:-1:-1;47667:137:0;-1:-1:-1;47667:137:0;-1:-1:-1;47833:28:0;;47667:137;47833:19;:28::i;:::-;-1:-1:-1;;;;;47815:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;47893:18;;;;;:7;:18;;;;;:39;;47916:15;47893:22;:39::i;:::-;-1:-1:-1;;;;;47872:18:0;;;;;;:7;:18;;;;;;;;:60;;;;47964:7;:18;;;;:39;;47987:15;47964:22;:39::i;47057:502::-;47156:15;47173:23;47198:12;47212:23;47237:12;47251:18;47273:19;47284:7;47273:10;:19::i;:::-;-1:-1:-1;;;;;47321:15:0;;;;;;:7;:15;;;;;;47155:137;;-1:-1:-1;47155:137:0;;-1:-1:-1;47155:137:0;;-1:-1:-1;47155:137:0;-1:-1:-1;47155:137:0;-1:-1:-1;47155:137:0;-1:-1:-1;47321:28:0;;47155:137;47321:19;:28::i;36315:634::-;36418:15;36435:23;36460:12;36474:23;36499:12;36513:18;36535:19;36546:7;36535:10;:19::i;:::-;-1:-1:-1;;;;;36583:15:0;;;;;;:7;:15;;;;;;36417:137;;-1:-1:-1;36417:137:0;;-1:-1:-1;36417:137:0;;-1:-1:-1;36417:137:0;-1:-1:-1;36417:137:0;-1:-1:-1;36417:137:0;-1:-1:-1;36583:28:0;;36603:7;36583:19;:28::i;:::-;-1:-1:-1;;;;;36565:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36640:7;:15;;;;:28;;36660:7;36640:19;:28::i;39507:132::-;39571:7;39598:33;39623:7;39598:20;39610:7;;39598;:11;;:20;;;;:::i;39647:144::-;39717:7;39744:39;39775:7;39744:26;39756:13;;39744:7;:11;;:26;;;;:::i;39144:355::-;39207:19;39229:10;:8;:10::i;:::-;39207:32;-1:-1:-1;39250:18:0;39271:27;:10;39207:32;39271:14;:27::i;:::-;39350:4;39334:22;;;;:7;:22;;;;;;39250:48;;-1:-1:-1;39334:38:0;;39250:48;39334:26;:38::i;:::-;39325:4;39309:22;;;;:7;:22;;;;;;;;:63;;;;39387:11;:26;;;;;;39383:108;;;39469:4;39453:22;;;;:7;:22;;;;;;:38;;39480:10;39453:26;:38::i;:::-;39444:4;39428:22;;;;:7;:22;;;;;:63;39383:108;39196:303;;39144:355;:::o;37051:147::-;37129:7;;:17;;37141:4;37129:11;:17::i;:::-;37119:7;:27;37170:10;;:20;;37185:4;37170:14;:20::i;:::-;37157:10;:33;-1:-1:-1;;37051:147:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2516:247::-;2575:6;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;2683:9;2670:23;2702:31;2727:5;2702:31;:::i;2768:160::-;2833:20;;2889:13;;2882:21;2872:32;;2862:60;;2918:1;2915;2908:12;2862:60;2768:160;;;:::o;2933:248::-;2998:6;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3111:9;3098:23;3088:33;;3140:35;3171:2;3160:9;3156:18;3140:35;:::i;:::-;3130:45;;2933:248;;;;;:::o;3394:180::-;3450:6;3503:2;3491:9;3482:7;3478:23;3474:32;3471:52;;;3519:1;3516;3509:12;3471:52;3542:26;3558:9;3542:26;:::i;3579:388::-;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;3763:9;3750:23;3782:31;3807:5;3782:31;:::i;:::-;3832:5;-1:-1:-1;3889:2:1;3874:18;;3861:32;3902:33;3861:32;3902:33;:::i;:::-;3954:7;3944:17;;;3579:388;;;;;:::o;4332:380::-;4411:1;4407:12;;;;4454;;;4475:61;;4529:4;4521:6;4517:17;4507:27;;4475:61;4582:2;4574:6;4571:14;4551:18;4548:38;4545:161;;;4628:10;4623:3;4619:20;4616:1;4609:31;4663:4;4660:1;4653:15;4691:4;4688:1;4681:15;4545:161;;4332:380;;;:::o;5484:127::-;5545:10;5540:3;5536:20;5533:1;5526:31;5576:4;5573:1;5566:15;5600:4;5597:1;5590:15;5616:127;5677:10;5672:3;5668:20;5665:1;5658:31;5708:4;5705:1;5698:15;5732:4;5729:1;5722:15;5748:125;5788:4;5816:1;5813;5810:8;5807:34;;;5821:18;;:::i;:::-;-1:-1:-1;5858:9:1;;5748:125::o;5878:127::-;5939:10;5934:3;5930:20;5927:1;5920:31;5970:4;5967:1;5960:15;5994:4;5991:1;5984:15;6010:135;6049:3;-1:-1:-1;;6070:17:1;;6067:43;;;6090:18;;:::i;:::-;-1:-1:-1;6137:1:1;6126:13;;6010:135::o;7329:398::-;7531:2;7513:21;;;7570:2;7550:18;;;7543:30;7609:34;7604:2;7589:18;;7582:62;-1:-1:-1;;;7675:2:1;7660:18;;7653:32;7717:3;7702:19;;7329:398::o;14106:168::-;14146:7;14212:1;14208;14204:6;14200:14;14197:1;14194:21;14189:1;14182:9;14175:17;14171:45;14168:71;;;14219:18;;:::i;:::-;-1:-1:-1;14259:9:1;;14106:168::o;14279:217::-;14319:1;14345;14335:132;;14389:10;14384:3;14380:20;14377:1;14370:31;14424:4;14421:1;14414:15;14452:4;14449:1;14442:15;14335:132;-1:-1:-1;14481:9:1;;14279:217::o;15321:128::-;15361:3;15392:1;15388:6;15385:1;15382:13;15379:39;;;15398:18;;:::i;:::-;-1:-1:-1;15434:9:1;;15321:128::o;15910:251::-;15980:6;16033:2;16021:9;16012:7;16008:23;16004:32;16001:52;;;16049:1;16046;16039:12;16001:52;16081:9;16075:16;16100:31;16125:5;16100:31;:::i;16166:980::-;16428:4;16476:3;16465:9;16461:19;16507:6;16496:9;16489:25;16533:2;16571:6;16566:2;16555:9;16551:18;16544:34;16614:3;16609:2;16598:9;16594:18;16587:31;16638:6;16673;16667:13;16704:6;16696;16689:22;16742:3;16731:9;16727:19;16720:26;;16781:2;16773:6;16769:15;16755:29;;16802:1;16812:195;16826:6;16823:1;16820:13;16812:195;;;16891:13;;-1:-1:-1;;;;;16887:39:1;16875:52;;16982:15;;;;16947:12;;;;16923:1;16841:9;16812:195;;;-1:-1:-1;;;;;;;17063:32:1;;;;17058:2;17043:18;;17036:60;-1:-1:-1;;;17127:3:1;17112:19;17105:35;17024:3;16166:980;-1:-1:-1;;;16166:980:1:o;17763:306::-;17851:6;17859;17867;17920:2;17908:9;17899:7;17895:23;17891:32;17888:52;;;17936:1;17933;17926:12;17888:52;17965:9;17959:16;17949:26;;18015:2;18004:9;18000:18;17994:25;17984:35;;18059:2;18048:9;18044:18;18038:25;18028:35;;17763:306;;;;;:::o

Swarm Source

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