ETH Price: $3,491.92 (+2.51%)
Gas: 2 Gwei

Token

Boomcoin (BOOM)
 

Overview

Max Total Supply

1,000,000,000 BOOM

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.907752302086862508 BOOM

Value
$0.00
0x841df42983f8a2d95fe7f8d0628b700c560d1d72
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:
Boomcoin

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Boomcoin.sol
/*
    twitter: twitter.com/hankhillforreal
    website: boomcoin.kingofthecryptohill.com
*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: MIT

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

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

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

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

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}


contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IWETH {
    function deposit() external payable; 
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(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 swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract Boomcoin is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingActive;

    mapping (address => bool) public isAMMPair;

    uint256 public maxTransaction;
    uint256 public maxWallet;

    address public operationsAddress;
    address public devAddress;
    address public reservesAddress;
    address public influencerAddress;

    uint256 public buyTotalTax;
    uint256 public buyOperationsTax;
    uint256 public buyLiquidityTax;
    uint256 public buyInfluencerTax;
    uint256 public buyDevTax;

    uint256 public sellTotalTax;
    uint256 public sellOperationsTax;
    uint256 public sellLiquidityTax;
    uint256 public sellDevTax;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForInfluencer;

    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    bool public limitsInEffect = true;

    bool private swapping;
    uint256 public swapTokensAtAmt;

    address public lpPair;
    IDexRouter public dexRouter;
    IERC20Metadata public eth;
    IWETH public WETH;

    uint256 public constant FEE_DIVISOR = 10000;

    // events

    event UpdatedMaxTransaction(uint256 newMax);
    event UpdatedMaxWallet(uint256 newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint256 newAmt);
    event UpdatedSellTax(uint256 newAmt);

    // constructor

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {   
        _mint(msg.sender, 1_000_000_000 * 1e18);
        uint256 _totalSupply = totalSupply();

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        maxTransaction = _totalSupply * 1 / 1000;
        maxWallet = _totalSupply * 2/ 100;
        swapTokensAtAmt = _totalSupply * 25 / 100000;

        operationsAddress = 0xa56d8E550db019E34Fc16b5B8317150F97033dC0;
        devAddress = 0xC8704FE12f98035ce7F55a93D51153F5318E0854;
        reservesAddress = 0x9673C4b6Ad428a651B583FC57c4f5Ae58cf73a33;
        influencerAddress = 0xC8704FE12f98035ce7F55a93D51153F5318E0854;

        buyOperationsTax = 150;
        buyLiquidityTax = 100;
        buyDevTax = 100;
        buyInfluencerTax = 100;
        buyTotalTax = buyOperationsTax + buyLiquidityTax + buyDevTax + buyInfluencerTax;

        sellOperationsTax = 200;
        sellLiquidityTax = 0;
        sellDevTax = 250;
        sellTotalTax = sellOperationsTax + sellLiquidityTax + sellDevTax;

        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());

        WETH = IWETH(dexRouter.WETH());
        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;
        exemptFromLimits[devAddress] = true;
        exemptFromLimits[address(dexRouter)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[devAddress] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(msg.sender), address(dexRouter), _totalSupply);
        _approve(address(this), address(dexRouter), type(uint256).max);

        super._transfer(msg.sender, reservesAddress, _totalSupply * 10 / 100);
    }

    receive() external payable {}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        checkLimits(from, to, amount);

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            amount -= handleTax(from, to, amount);
        }

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

    function checkLimits(address from, address to, uint256 amount) internal {

        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingActive, "Trading not active");
        }

        if(limitsInEffect){
            if (transferDelayEnabled){
                if (to != address(dexRouter) && !isAMMPair[to]){
                    require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "Transfer Delay enabled.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }

            // buy
            if (isAMMPair[from] && !exemptFromLimits[to]) {
                require(amount <= maxTransaction, "Buy transfer amount exceeded.");
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= maxTransaction, "Sell transfer amount exceeded.");
            }
            else if(!exemptFromLimits[to]) {
                require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){
        if(balanceOf(address(this)) >= swapTokensAtAmt && !swapping && isAMMPair[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }
        
        uint256 tax = 0;

        // on sell
        if (isAMMPair[to] && sellTotalTax > 0){
            tax = amount * sellTotalTax / FEE_DIVISOR;
            tokensForLiquidity += tax * sellLiquidityTax / sellTotalTax;
            tokensForOperations += tax * sellOperationsTax / sellTotalTax;
            tokensForDev += tax * sellDevTax / sellTotalTax;
        }

        // on buy
        else if(isAMMPair[from] && buyTotalTax > 0) {
            tax = amount * buyTotalTax / FEE_DIVISOR;
            tokensForOperations += tax * buyOperationsTax / buyTotalTax;
            tokensForLiquidity += tax * buyLiquidityTax / buyTotalTax;
            tokensForDev += tax * buyDevTax / buyTotalTax;
            tokensForInfluencer += tax * buyInfluencerTax / buyTotalTax;
        }
        
        if(tax > 0){    
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev + tokensForInfluencer;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 40){
            contractBalance = swapTokensAtAmt * 40;
        }
        
        if(tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }
        
        if(totalTokensToSwap > 0 && contractBalance > 0){
            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap;

            uint256 ethForInfluencer = ethBalance * tokensForInfluencer / totalTokensToSwap;

            bool success;
            if(ethForDev > 0){
                (success, ) = devAddress.call{value: ethForDev}("");
                tokensForDev = 0;
            }

            if(ethForInfluencer > 0){
                (success, ) = influencerAddress.call{value: ethForInfluencer}("");
                tokensForInfluencer = 0;
            }

            if(address(this).balance > 0){
                (success, ) = operationsAddress.call{value: address(this).balance}("");
                tokensForOperations = 0;
            }
        }
    }

    // owner functions

    function increaseMaxTxnSetAmount() external onlyOwner {
        maxTransaction = totalSupply() * 5 / 1000;
    }

    function increaseMaxTxnToMaxWallet() external onlyOwner {
        maxTransaction = maxWallet;
    }

    function setExemptFromFees(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
        maxTransaction = newNumInTokens * (10**decimals());
        emit UpdatedMaxTransaction(maxTransaction);
    }

    function updateMaxWallet(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low");
        maxWallet = newNumInTokens * (10**decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    function updateBuyTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _devTax, uint _influencerTax) external onlyOwner {
        buyOperationsTax = _operationsTax;
        buyLiquidityTax = _liquidityTax;
        buyDevTax = _devTax;
        buyInfluencerTax = _influencerTax;
        buyTotalTax = buyOperationsTax + buyLiquidityTax + buyDevTax + buyInfluencerTax;
        require(buyTotalTax <= 499, "Keep tax below 5%");
        emit UpdatedBuyTax(buyTotalTax);
    }

    function updateSellTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _devTax) external onlyOwner {
        sellOperationsTax = _operationsTax;
        sellLiquidityTax = _liquidityTax;
        sellDevTax = _devTax;
        sellTotalTax = sellOperationsTax + sellLiquidityTax + sellDevTax;
        require(sellTotalTax <= 499, "Keep tax below 5%");
        emit UpdatedSellTax(sellTotalTax);
    }

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

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxTransaction = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function rescueEth(address toAddress) external onlyOwner {
        require(address(this).balance > 0, "Contract has zero ETH");
        (bool sent, bytes memory data) = toAddress.call{value: address(this).balance}("");
        require(sent, "Failed to send Ether.");
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateOperationsAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        operationsAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function updateInfluencerAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        influencerAddress = _address;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyInfluencerTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnSetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnToMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"influencerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"}],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservesAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForInfluencer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_influencerTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateInfluencerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601e60006101000a81548160ff0219169083151502179055506001601e60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040516200790d3803806200790d83398181016040528101906200006d919062001445565b8181816003908162000080919062001715565b50806004908162000092919062001715565b5050506000620000a762000cc760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000164336b033b2e3c9fd0803ce800000062000ccf60201b60201c565b60006200017662000e3c60201b60201c565b9050600060014603620001a057737a250d5630b4cf539739df2c5dacb4c659f2488d905062000253565b60054603620001c657737a250d5630b4cf539739df2c5dacb4c659f2488d905062000252565b60614603620001ec5773d99d1c33f9fc3444f8101754abc46c52416550d1905062000251565b61a4b146036200021357731b02da8cb0d097eb8d57a175b88c7d8b47997506905062000250565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000247906200185d565b60405180910390fd5b5b5b5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600183620002a69190620018ae565b620002b2919062001928565b600a819055506064600283620002c99190620018ae565b620002d5919062001928565b600b81905550620186a0601983620002ee9190620018ae565b620002fa919062001928565b601f8190555073a56d8e550db019e34fc16b5b8317150f97033dc0600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c8704fe12f98035ce7f55a93d51153f5318e0854600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739673c4b6ad428a651b583fc57c4f5ae58cf73a33600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c8704fe12f98035ce7f55a93d51153f5318e0854600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060966011819055506064601281905550606460148190555060646013819055506013546014546012546011546200048c919062001960565b62000498919062001960565b620004a4919062001960565b60108190555060c8601681905550600060178190555060fa601881905550601854601754601654620004d7919062001960565b620004e3919062001960565b601581905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057d919062001a00565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d919062001a00565b6040518363ffffffff1660e01b81526004016200064c92919062001a43565b6020604051808303816000875af11580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062001a00565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000740573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000766919062001a00565b602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000c1733602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168462000e4660201b60201c565b62000c6c30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000e4660201b60201c565b62000cbd33600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a8662000ca59190620018ae565b62000cb1919062001928565b6200101760201b60201c565b5050505062001e08565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d389062001ac0565b60405180910390fd5b62000d5560008383620012a860201b60201c565b806002600082825462000d69919062001960565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e1c919062001af3565b60405180910390a362000e3860008383620012ad60201b60201c565b5050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000eb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eaf9062001b86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f219062001c1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200100a919062001af3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010809062001cb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620010fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010f29062001d4e565b60405180910390fd5b6200110e838383620012a860201b60201c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562001197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200118e9062001de6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162001287919062001af3565b60405180910390a3620012a2848484620012ad60201b60201c565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200131b82620012d0565b810181811067ffffffffffffffff821117156200133d576200133c620012e1565b5b80604052505050565b600062001352620012b2565b905062001360828262001310565b919050565b600067ffffffffffffffff821115620013835762001382620012e1565b5b6200138e82620012d0565b9050602081019050919050565b60005b83811015620013bb5780820151818401526020810190506200139e565b60008484015250505050565b6000620013de620013d88462001365565b62001346565b905082815260208101848484011115620013fd57620013fc620012cb565b5b6200140a8482856200139b565b509392505050565b600082601f8301126200142a5762001429620012c6565b5b81516200143c848260208601620013c7565b91505092915050565b600080604083850312156200145f576200145e620012bc565b5b600083015167ffffffffffffffff81111562001480576200147f620012c1565b5b6200148e8582860162001412565b925050602083015167ffffffffffffffff811115620014b257620014b1620012c1565b5b620014c08582860162001412565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200151d57607f821691505b602082108103620015335762001532620014d5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200159d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200155e565b620015a986836200155e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620015f6620015f0620015ea84620015c1565b620015cb565b620015c1565b9050919050565b6000819050919050565b6200161283620015d5565b6200162a6200162182620015fd565b8484546200156b565b825550505050565b600090565b6200164162001632565b6200164e81848462001607565b505050565b5b8181101562001676576200166a60008262001637565b60018101905062001654565b5050565b601f821115620016c5576200168f8162001539565b6200169a846200154e565b81016020851015620016aa578190505b620016c2620016b9856200154e565b83018262001653565b50505b505050565b600082821c905092915050565b6000620016ea60001984600802620016ca565b1980831691505092915050565b6000620017058383620016d7565b9150826002028217905092915050565b6200172082620014ca565b67ffffffffffffffff8111156200173c576200173b620012e1565b5b62001748825462001504565b620017558282856200167a565b600060209050601f8311600181146200178d576000841562001778578287015190505b620017848582620016f7565b865550620017f4565b601f1984166200179d8662001539565b60005b82811015620017c757848901518255600182019150602085019450602081019050620017a0565b86831015620017e75784890151620017e3601f891682620016d7565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f436861696e206e6f7420636f6e66696775726564000000000000000000000000600082015250565b600062001845601483620017fc565b915062001852826200180d565b602082019050919050565b60006020820190508181036000830152620018788162001836565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620018bb82620015c1565b9150620018c883620015c1565b9250828202620018d881620015c1565b91508282048414831517620018f257620018f16200187f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200193582620015c1565b91506200194283620015c1565b925082620019555762001954620018f9565b5b828204905092915050565b60006200196d82620015c1565b91506200197a83620015c1565b92508282019050808211156200199557620019946200187f565b5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019c8826200199b565b9050919050565b620019da81620019bb565b8114620019e657600080fd5b50565b600081519050620019fa81620019cf565b92915050565b60006020828403121562001a195762001a18620012bc565b5b600062001a2984828501620019e9565b91505092915050565b62001a3d81620019bb565b82525050565b600060408201905062001a5a600083018562001a32565b62001a69602083018462001a32565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001aa8601f83620017fc565b915062001ab58262001a70565b602082019050919050565b6000602082019050818103600083015262001adb8162001a99565b9050919050565b62001aed81620015c1565b82525050565b600060208201905062001b0a600083018462001ae2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001b6e602483620017fc565b915062001b7b8262001b10565b604082019050919050565b6000602082019050818103600083015262001ba18162001b5f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001c06602283620017fc565b915062001c138262001ba8565b604082019050919050565b6000602082019050818103600083015262001c398162001bf7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062001c9e602583620017fc565b915062001cab8262001c40565b604082019050919050565b6000602082019050818103600083015262001cd18162001c8f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062001d36602383620017fc565b915062001d438262001cd8565b604082019050919050565b6000602082019050818103600083015262001d698162001d27565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062001dce602683620017fc565b915062001ddb8262001d70565b604082019050919050565b6000602082019050818103600083015262001e018162001dbf565b9050919050565b615af58062001e186000396000f3fe6080604052600436106103a65760003560e01c806385033762116101e7578063bbc0c7421161010d578063e27a55fe116100a0578063f2fde38b1161006f578063f2fde38b14610d7f578063f8b45b0514610da8578063fb002c9714610dd3578063fb591a1414610dfe576103ad565b8063e27a55fe14610ce9578063e884f26014610d14578063ea4cfe1214610d2b578063ea6debd014610d56576103ad565b8063c43c0f58116100dc578063c43c0f5814610c2b578063c78d0fa014610c56578063c876d0b914610c81578063dd62ed3e14610cac576103ad565b8063bbc0c74214610b7f578063be69188314610baa578063bfbf265c14610bd5578063c3f70b5214610c00576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610aaf578063ad5c464814610aec578063af8f26e714610b17578063b0249cc614610b42576103ad565b80639fccce32146109f3578063a13d1a2b14610a1e578063a2cbba2814610a47578063a457c2d714610a72576103ad565b80638d3e6e40116101c15780638d3e6e40146109355780638da5cb5b1461097257806395d89b411461099d5780639e93ad8e146109c8576103ad565b806385033762146108ca5780638a8c523c146108f35780638c7c9e0c1461090a576103ad565b80633b94d2b5116102cc5780635ec13e451161026a57806370a082311161023957806370a0823114610836578063715018a614610873578063751039fc1461088a57806377b27d1f146108a1576103ad565b80635ec13e451461079e5780636161b881146107c95780636611c230146107e05780636ab912061461080b576103ad565b80635431c94e116102a65780635431c94e146106e457806355f5614e1461070d5780635a90a49e146107365780635df6e68e14610773576103ad565b80633b94d2b514610663578063452ed4f11461068e5780634a62bb65146106b9576103ad565b80631c499ab011610344578063313ce56711610313578063313ce567146105a757806339509351146105d25780633ad10ef61461060f5780633b1ab44c1461063a576103ad565b80631c499ab0146104ed5780631d202bbf1461051657806320932e691461053f57806323b872dd1461056a576103ad565b80630758d924116103805780630758d9241461042f578063095ea7b31461045a57806318160ddd146104975780631a8145bb146104c2576103ad565b80630517d13d146103b257806305f93650146103db57806306fdde0314610404576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061434e565b610e15565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061437b565b610f8e565b005b34801561041057600080fd5b506104196110e2565b604051610426919061445e565b60405180910390f35b34801561043b57600080fd5b50610444611174565b60405161045191906144ff565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614558565b61119a565b60405161048e91906145b3565b60405180910390f35b3480156104a357600080fd5b506104ac6111bd565b6040516104b991906145dd565b60405180910390f35b3480156104ce57600080fd5b506104d76111c7565b6040516104e491906145dd565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061434e565b6111cd565b005b34801561052257600080fd5b5061053d600480360381019061053891906145f8565b611345565b005b34801561054b57600080fd5b506105546114ae565b604051610561919061466e565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614689565b6114d4565b60405161059e91906145b3565b60405180910390f35b3480156105b357600080fd5b506105bc611503565b6040516105c991906146f8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614558565b61150c565b60405161060691906145b3565b60405180910390f35b34801561061b57600080fd5b50610624611543565b604051610631919061466e565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190614713565b611569565b005b34801561066f57600080fd5b506106786116f6565b60405161068591906145dd565b60405180910390f35b34801561069a57600080fd5b506106a36116fc565b6040516106b0919061466e565b60405180910390f35b3480156106c557600080fd5b506106ce611722565b6040516106db91906145b3565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190614740565b611735565b005b34801561071957600080fd5b50610734600480360381019061072f9190614713565b6118c9565b005b34801561074257600080fd5b5061075d60048036038101906107589190614713565b611a13565b60405161076a91906145b3565b60405180910390f35b34801561077f57600080fd5b50610788611a33565b60405161079591906145dd565b60405180910390f35b3480156107aa57600080fd5b506107b3611a39565b6040516107c091906145dd565b60405180910390f35b3480156107d557600080fd5b506107de611a3f565b005b3480156107ec57600080fd5b506107f5611ae1565b604051610802919061466e565b60405180910390f35b34801561081757600080fd5b50610820611b07565b60405161082d91906145dd565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614713565b611b0d565b60405161086a91906145dd565b60405180910390f35b34801561087f57600080fd5b50610888611b55565b005b34801561089657600080fd5b5061089f611cad565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906147ac565b611dc4565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190614713565b611f5e565b005b3480156108ff57600080fd5b506109086120a8565b005b34801561091657600080fd5b5061091f61215c565b60405161092c919061480d565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614713565b612182565b60405161096991906145b3565b60405180910390f35b34801561097e57600080fd5b506109876121a2565b604051610994919061466e565b60405180910390f35b3480156109a957600080fd5b506109b26121cc565b6040516109bf919061445e565b60405180910390f35b3480156109d457600080fd5b506109dd61225e565b6040516109ea91906145dd565b60405180910390f35b3480156109ff57600080fd5b50610a08612264565b604051610a1591906145dd565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906147ac565b61226a565b005b348015610a5357600080fd5b50610a5c61249a565b604051610a6991906145dd565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614558565b6124a0565b604051610aa691906145b3565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614558565b612517565b604051610ae391906145b3565b60405180910390f35b348015610af857600080fd5b50610b0161253a565b604051610b0e9190614849565b60405180910390f35b348015610b2357600080fd5b50610b2c612560565b604051610b3991906145dd565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190614713565b612566565b604051610b7691906145b3565b60405180910390f35b348015610b8b57600080fd5b50610b94612586565b604051610ba191906145b3565b60405180910390f35b348015610bb657600080fd5b50610bbf612599565b604051610bcc91906145dd565b60405180910390f35b348015610be157600080fd5b50610bea61259f565b604051610bf791906145dd565b60405180910390f35b348015610c0c57600080fd5b50610c156125a5565b604051610c2291906145dd565b60405180910390f35b348015610c3757600080fd5b50610c406125ab565b604051610c4d91906145dd565b60405180910390f35b348015610c6257600080fd5b50610c6b6125b1565b604051610c7891906145dd565b60405180910390f35b348015610c8d57600080fd5b50610c966125b7565b604051610ca391906145b3565b60405180910390f35b348015610cb857600080fd5b50610cd36004803603810190610cce9190614740565b6125ca565b604051610ce091906145dd565b60405180910390f35b348015610cf557600080fd5b50610cfe612651565b604051610d0b91906145dd565b60405180910390f35b348015610d2057600080fd5b50610d29612657565b005b348015610d3757600080fd5b50610d4061270b565b604051610d4d919061466e565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614713565b612731565b005b348015610d8b57600080fd5b50610da66004803603810190610da19190614713565b61287b565b005b348015610db457600080fd5b50610dbd612a41565b604051610dca91906145dd565b60405180910390f35b348015610ddf57600080fd5b50610de8612a47565b604051610df591906145dd565b60405180910390f35b348015610e0a57600080fd5b50610e13612a4d565b005b610e1d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906148b0565b60405180910390fd5b610eb4611503565b600a610ec09190614a32565b6103e86005610ecd6111bd565b610ed79190614a7d565b610ee19190614aee565b610eeb9190614aee565b811015610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490614b6b565b60405180910390fd5b610f35611503565b600a610f419190614a32565b81610f4c9190614a7d565b600a819055507f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574600a54604051610f8391906145dd565b60405180910390a150565b610f96612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906148b0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461104d9190614b8b565b6110579190614b8b565b6015819055506101f360155411156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614c0b565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c976015546040516110d591906145dd565b60405180910390a1505050565b6060600380546110f190614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90614c5a565b801561116a5780601f1061113f5761010080835404028352916020019161116a565b820191906000526020600020905b81548152906001019060200180831161114d57829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111a5612b0d565b90506111b2818585612b15565b600191505092915050565b6000600254905090565b601a5481565b6111d5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906148b0565b60405180910390fd5b61126c611503565b600a6112789190614a32565b606460016112846111bd565b61128e9190614a7d565b6112989190614aee565b6112a29190614aee565b8110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614b6b565b60405180910390fd5b6112ec611503565b600a6112f89190614a32565b816113039190614a7d565b600b819055507f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c42762600b5460405161133a91906145dd565b60405180910390a150565b61134d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906148b0565b60405180910390fd5b8360118190555082601281905550816014819055508060138190555060135460145460125460115461140e9190614b8b565b6114189190614b8b565b6114229190614b8b565b6010819055506101f3601054111561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614c0b565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05086010546040516114a091906145dd565b60405180910390a150505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806114df612b0d565b90506114ec858285612cde565b6114f7858585612d6a565b60019150509392505050565b60006012905090565b600080611517612b0d565b905061153881858561152985896125ca565b6115339190614b8b565b612b15565b600191505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611571612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906148b0565b60405180910390fd5b60004711611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614cd7565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff164760405161166a90614d28565b60006040518083038185875af1925050503d80600081146116a7576040519150601f19603f3d011682016040523d82523d6000602084013e6116ac565b606091505b5091509150816116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614d89565b60405180910390fd5b505050565b601c5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b61173d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290614df5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611876919061466e565b602060405180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614e2a565b90506118c4838383612e47565b505050565b6118d1612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ea3565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60105481565b60115481565b611a47612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906148b0565b60405180910390fd5b600b54600a81905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611cb5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906148b0565b60405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000601e60006101000a81548160ff021916908315150217905550611d826111bd565b600a81905550611d906111bd565b600b819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611dcc612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614f0f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611f52929190614f2f565b60405180910390a15050565b611f66612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614ea3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120b0612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612136906148b0565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121db90614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461220790614c5a565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b61271081565b601b5481565b612272612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f8906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614f0f565b60405180910390fd5b8061240657602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614fa4565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161248e929190614f2f565b60405180910390a15050565b60125481565b6000806124ab612b0d565b905060006124b982866125ca565b9050838110156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590615036565b60405180910390fd5b61250b8286868403612b15565b60019250505092915050565b600080612522612b0d565b905061252f818585612d6a565b600191505092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60096020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b60185481565b60135481565b600a5481565b60165481565b601f5481565b601e60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b61265f612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906148b0565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612739612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614ea3565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612883612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612909906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906150c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60195481565b612a55612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148b0565b60405180910390fd5b6103e86005612af16111bd565b612afb9190614a7d565b612b059190614aee565b600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd191906145dd565b60405180910390a3505050565b6000612cea84846125ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d645781811015612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90615258565b60405180910390fd5b612d638484848403612b15565b5b50505050565b612d75838383612ecd565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757612e298383836134e0565b81612e349190615278565b90505b612e4283838361382a565b505050565b612ec88363a9059cbb60e01b8484604051602401612e669291906152ac565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613aa0565b505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc657600860009054906101000a900460ff16612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc90615321565b60405180910390fd5b5b601e60019054906101000a900460ff16156134db57601e60009054906101000a900460ff16156131f257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130985750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f15743601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613129575043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f9061538d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333c57600a548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906153f9565b60405180910390fd5b600b546132eb83611b0d565b826132f69190614b8b565b1115613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90615465565b60405180910390fd5b6134da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133df5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342e57600a54811115613429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613420906154d1565b60405180910390fd5b6134d9565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134d857600b5461348b83611b0d565b826134969190614b8b565b11156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615465565b60405180910390fd5b5b5b5b5b505050565b6000601f546134ee30611b0d565b101580156135095750601e60029054906101000a900460ff16155b801561355e5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a2576001601e60026101000a81548160ff021916908315150217905550613586613b67565b6000601e60026101000a81548160ff0219169083151502179055505b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ff57506000601554115b156136bf57612710601554846136159190614a7d565b61361f9190614aee565b9050601554601754826136329190614a7d565b61363c9190614aee565b601a600082825461364d9190614b8b565b92505081905550601554601654826136659190614a7d565b61366f9190614aee565b601960008282546136809190614b8b565b92505081905550601554601854826136989190614a7d565b6136a29190614aee565b601b60008282546136b39190614b8b565b9250508190555061380a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371a57506000601054115b1561380957612710601054846137309190614a7d565b61373a9190614aee565b90506010546011548261374d9190614a7d565b6137579190614aee565b601960008282546137689190614b8b565b92505081905550601054601254826137809190614a7d565b61378a9190614aee565b601a600082825461379b9190614b8b565b92505081905550601054601454826137b39190614a7d565b6137bd9190614aee565b601b60008282546137ce9190614b8b565b92505081905550601054601354826137e69190614a7d565b6137f09190614aee565b601c60008282546138019190614b8b565b925050819055505b5b600081111561381f5761381e85308361382a565b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389090615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ff906155f5565b60405180910390fd5b613913838383613f26565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399090615687565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a8791906145dd565b60405180910390a3613a9a848484613f2b565b50505050565b6000613b02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f309092919063ffffffff16565b9050600081511115613b625780806020019051810190613b2291906156bc565b613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b589061575b565b60405180910390fd5b5b505050565b6000613b7230611b0d565b90506000601c54601b54601954601a54613b8c9190614b8b565b613b969190614b8b565b613ba09190614b8b565b90506000821480613bb15750600081145b15613bbd575050613f24565b6028601f54613bcc9190614a7d565b821115613be5576028601f54613be29190614a7d565b91505b6000601a541115613cde57600081601a5484613c019190614a7d565b613c0b9190614aee565b9050613c3a30602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361382a565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca457600080fd5b505af1925050508015613cb5575060015b508083613cc29190615278565b9250601a5482613cd29190615278565b91506000601a81905550505b600081118015613cee5750600082115b15613f2157613cfc82613f48565b6000479050600082601b5483613d129190614a7d565b613d1c9190614aee565b9050600083601c5484613d2f9190614a7d565b613d399190614aee565b9050600080831115613ddc57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d8b90614d28565b60006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050809150506000601b819055505b6000821115613e7c57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2b90614d28565b60006040518083038185875af1925050503d8060008114613e68576040519150601f19603f3d011682016040523d82523d6000602084013e613e6d565b606091505b5050809150506000601c819055505b6000471115613f1c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ecb90614d28565b60006040518083038185875af1925050503d8060008114613f08576040519150601f19603f3d011682016040523d82523d6000602084013e613f0d565b606091505b50508091505060006019819055505b505050505b50505b565b505050565b505050565b6060613f3f848460008561415e565b90509392505050565b6000600267ffffffffffffffff811115613f6557613f6461577b565b5b604051908082528060200260200182016040528015613f935781602001602082028036833780820191505090505b5090503081600081518110613fab57613faa6157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614052573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407691906157ee565b8160018151811061408a576140896157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614128959493929190615914565b600060405180830381600087803b15801561414257600080fd5b505af1158015614156573d6000803e3d6000fd5b505050505050565b6060824710156141a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161419a906159e0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516141cc9190615a3c565b60006040518083038185875af1925050503d8060008114614209576040519150601f19603f3d011682016040523d82523d6000602084013e61420e565b606091505b509150915061421f8783838761422b565b92505050949350505050565b6060831561428d57600083510361428557614245856142a0565b614284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161427b90615a9f565b60405180910390fd5b5b829050614298565b61429783836142c3565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156142d65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430a919061445e565b60405180910390fd5b600080fd5b6000819050919050565b61432b81614318565b811461433657600080fd5b50565b60008135905061434881614322565b92915050565b60006020828403121561436457614363614313565b5b600061437284828501614339565b91505092915050565b60008060006060848603121561439457614393614313565b5b60006143a286828701614339565b93505060206143b386828701614339565b92505060406143c486828701614339565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156144085780820151818401526020810190506143ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000614430826143ce565b61443a81856143d9565b935061444a8185602086016143ea565b61445381614414565b840191505092915050565b600060208201905081810360008301526144788184614425565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006144c56144c06144bb84614480565b6144a0565b614480565b9050919050565b60006144d7826144aa565b9050919050565b60006144e9826144cc565b9050919050565b6144f9816144de565b82525050565b600060208201905061451460008301846144f0565b92915050565b600061452582614480565b9050919050565b6145358161451a565b811461454057600080fd5b50565b6000813590506145528161452c565b92915050565b6000806040838503121561456f5761456e614313565b5b600061457d85828601614543565b925050602061458e85828601614339565b9150509250929050565b60008115159050919050565b6145ad81614598565b82525050565b60006020820190506145c860008301846145a4565b92915050565b6145d781614318565b82525050565b60006020820190506145f260008301846145ce565b92915050565b6000806000806080858703121561461257614611614313565b5b600061462087828801614339565b945050602061463187828801614339565b935050604061464287828801614339565b925050606061465387828801614339565b91505092959194509250565b6146688161451a565b82525050565b6000602082019050614683600083018461465f565b92915050565b6000806000606084860312156146a2576146a1614313565b5b60006146b086828701614543565b93505060206146c186828701614543565b92505060406146d286828701614339565b9150509250925092565b600060ff82169050919050565b6146f2816146dc565b82525050565b600060208201905061470d60008301846146e9565b92915050565b60006020828403121561472957614728614313565b5b600061473784828501614543565b91505092915050565b6000806040838503121561475757614756614313565b5b600061476585828601614543565b925050602061477685828601614543565b9150509250929050565b61478981614598565b811461479457600080fd5b50565b6000813590506147a681614780565b92915050565b600080604083850312156147c3576147c2614313565b5b60006147d185828601614543565b92505060206147e285828601614797565b9150509250929050565b60006147f7826144cc565b9050919050565b614807816147ec565b82525050565b600060208201905061482260008301846147fe565b92915050565b6000614833826144cc565b9050919050565b61484381614828565b82525050565b600060208201905061485e600083018461483a565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061489a6020836143d9565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561495657808604811115614932576149316148d0565b5b60018516156149415780820291505b808102905061494f856148ff565b9450614916565b94509492505050565b60008261496f5760019050614a2b565b8161497d5760009050614a2b565b8160018114614993576002811461499d576149cc565b6001915050614a2b565b60ff8411156149af576149ae6148d0565b5b8360020a9150848211156149c6576149c56148d0565b5b50614a2b565b5060208310610133831016604e8410600b8410161715614a015782820a9050838111156149fc576149fb6148d0565b5b614a2b565b614a0e848484600161490c565b92509050818404811115614a2557614a246148d0565b5b81810290505b9392505050565b6000614a3d82614318565b9150614a48836146dc565b9250614a757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461495f565b905092915050565b6000614a8882614318565b9150614a9383614318565b9250828202614aa181614318565b91508282048414831517614ab857614ab76148d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af982614318565b9150614b0483614318565b925082614b1457614b13614abf565b5b828204905092915050565b7f546f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000614b556007836143d9565b9150614b6082614b1f565b602082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b6000614b9682614318565b9150614ba183614318565b9250828201905080821115614bb957614bb86148d0565b5b92915050565b7f4b656570207461782062656c6f77203525000000000000000000000000000000600082015250565b6000614bf56011836143d9565b9150614c0082614bbf565b602082019050919050565b60006020820190508181036000830152614c2481614be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7257607f821691505b602082108103614c8557614c84614c2b565b5b50919050565b7f436f6e747261637420686173207a65726f204554480000000000000000000000600082015250565b6000614cc16015836143d9565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b600081905092915050565b50565b6000614d12600083614cf7565b9150614d1d82614d02565b600082019050919050565b6000614d3382614d05565b9150819050919050565b7f4661696c656420746f2073656e642045746865722e0000000000000000000000600082015250565b6000614d736015836143d9565b9150614d7e82614d3d565b602082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614ddf601a836143d9565b9150614dea82614da9565b602082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b600081519050614e2481614322565b92915050565b600060208284031215614e4057614e3f614313565b5b6000614e4e84828501614e15565b91505092915050565b7f7a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614e8d600c836143d9565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000614ef9600c836143d9565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000604082019050614f44600083018561465f565b614f5160208301846145a4565b9392505050565b7f43616e6e6f742072656d6f766520706169720000000000000000000000000000600082015250565b6000614f8e6012836143d9565b9150614f9982614f58565b602082019050919050565b60006020820190508181036000830152614fbd81614f81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150206025836143d9565b915061502b82614fc4565b604082019050919050565b6000602082019050818103600083015261504f81615013565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b26026836143d9565b91506150bd82615056565b604082019050919050565b600060208201905081810360008301526150e1816150a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151446024836143d9565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d66022836143d9565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615242601d836143d9565b915061524d8261520c565b602082019050919050565b6000602082019050818103600083015261527181615235565b9050919050565b600061528382614318565b915061528e83614318565b92508282039050818111156152a6576152a56148d0565b5b92915050565b60006040820190506152c1600083018561465f565b6152ce60208301846145ce565b9392505050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b600061530b6012836143d9565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e000000000000000000600082015250565b60006153776017836143d9565b915061538282615341565b602082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656465642e000000600082015250565b60006153e3601d836143d9565b91506153ee826153ad565b602082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b600061544f601b836143d9565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656465642e0000600082015250565b60006154bb601e836143d9565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061554d6025836143d9565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155df6023836143d9565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156716026836143d9565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b6000815190506156b681614780565b92915050565b6000602082840312156156d2576156d1614313565b5b60006156e0848285016156a7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615745602a836143d9565b9150615750826156e9565b604082019050919050565b6000602082019050818103600083015261577481615738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157e88161452c565b92915050565b60006020828403121561580457615803614313565b5b6000615812848285016157d9565b91505092915050565b6000819050919050565b600061584061583b6158368461581b565b6144a0565b614318565b9050919050565b61585081615825565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588b8161451a565b82525050565b600061589d8383615882565b60208301905092915050565b6000602082019050919050565b60006158c182615856565b6158cb8185615861565b93506158d683615872565b8060005b838110156159075781516158ee8882615891565b97506158f9836158a9565b9250506001810190506158da565b5085935050505092915050565b600060a08201905061592960008301886145ce565b6159366020830187615847565b818103604083015261594881866158b6565b9050615957606083018561465f565b61596460808301846145ce565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006159ca6026836143d9565b91506159d58261596e565b604082019050919050565b600060208201905081810360008301526159f9816159bd565b9050919050565b600081519050919050565b6000615a1682615a00565b615a208185614cf7565b9350615a308185602086016143ea565b80840191505092915050565b6000615a488284615a0b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615a89601d836143d9565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b905091905056fea2646970667358221220fafe0a4bc5b240d602728f24a07e97c7696a9d8b42f73efc9c160eebac9f367d64736f6c63430008130033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008426f6f6d636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424f4f4d00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806385033762116101e7578063bbc0c7421161010d578063e27a55fe116100a0578063f2fde38b1161006f578063f2fde38b14610d7f578063f8b45b0514610da8578063fb002c9714610dd3578063fb591a1414610dfe576103ad565b8063e27a55fe14610ce9578063e884f26014610d14578063ea4cfe1214610d2b578063ea6debd014610d56576103ad565b8063c43c0f58116100dc578063c43c0f5814610c2b578063c78d0fa014610c56578063c876d0b914610c81578063dd62ed3e14610cac576103ad565b8063bbc0c74214610b7f578063be69188314610baa578063bfbf265c14610bd5578063c3f70b5214610c00576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610aaf578063ad5c464814610aec578063af8f26e714610b17578063b0249cc614610b42576103ad565b80639fccce32146109f3578063a13d1a2b14610a1e578063a2cbba2814610a47578063a457c2d714610a72576103ad565b80638d3e6e40116101c15780638d3e6e40146109355780638da5cb5b1461097257806395d89b411461099d5780639e93ad8e146109c8576103ad565b806385033762146108ca5780638a8c523c146108f35780638c7c9e0c1461090a576103ad565b80633b94d2b5116102cc5780635ec13e451161026a57806370a082311161023957806370a0823114610836578063715018a614610873578063751039fc1461088a57806377b27d1f146108a1576103ad565b80635ec13e451461079e5780636161b881146107c95780636611c230146107e05780636ab912061461080b576103ad565b80635431c94e116102a65780635431c94e146106e457806355f5614e1461070d5780635a90a49e146107365780635df6e68e14610773576103ad565b80633b94d2b514610663578063452ed4f11461068e5780634a62bb65146106b9576103ad565b80631c499ab011610344578063313ce56711610313578063313ce567146105a757806339509351146105d25780633ad10ef61461060f5780633b1ab44c1461063a576103ad565b80631c499ab0146104ed5780631d202bbf1461051657806320932e691461053f57806323b872dd1461056a576103ad565b80630758d924116103805780630758d9241461042f578063095ea7b31461045a57806318160ddd146104975780631a8145bb146104c2576103ad565b80630517d13d146103b257806305f93650146103db57806306fdde0314610404576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061434e565b610e15565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061437b565b610f8e565b005b34801561041057600080fd5b506104196110e2565b604051610426919061445e565b60405180910390f35b34801561043b57600080fd5b50610444611174565b60405161045191906144ff565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614558565b61119a565b60405161048e91906145b3565b60405180910390f35b3480156104a357600080fd5b506104ac6111bd565b6040516104b991906145dd565b60405180910390f35b3480156104ce57600080fd5b506104d76111c7565b6040516104e491906145dd565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061434e565b6111cd565b005b34801561052257600080fd5b5061053d600480360381019061053891906145f8565b611345565b005b34801561054b57600080fd5b506105546114ae565b604051610561919061466e565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614689565b6114d4565b60405161059e91906145b3565b60405180910390f35b3480156105b357600080fd5b506105bc611503565b6040516105c991906146f8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614558565b61150c565b60405161060691906145b3565b60405180910390f35b34801561061b57600080fd5b50610624611543565b604051610631919061466e565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190614713565b611569565b005b34801561066f57600080fd5b506106786116f6565b60405161068591906145dd565b60405180910390f35b34801561069a57600080fd5b506106a36116fc565b6040516106b0919061466e565b60405180910390f35b3480156106c557600080fd5b506106ce611722565b6040516106db91906145b3565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190614740565b611735565b005b34801561071957600080fd5b50610734600480360381019061072f9190614713565b6118c9565b005b34801561074257600080fd5b5061075d60048036038101906107589190614713565b611a13565b60405161076a91906145b3565b60405180910390f35b34801561077f57600080fd5b50610788611a33565b60405161079591906145dd565b60405180910390f35b3480156107aa57600080fd5b506107b3611a39565b6040516107c091906145dd565b60405180910390f35b3480156107d557600080fd5b506107de611a3f565b005b3480156107ec57600080fd5b506107f5611ae1565b604051610802919061466e565b60405180910390f35b34801561081757600080fd5b50610820611b07565b60405161082d91906145dd565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614713565b611b0d565b60405161086a91906145dd565b60405180910390f35b34801561087f57600080fd5b50610888611b55565b005b34801561089657600080fd5b5061089f611cad565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906147ac565b611dc4565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190614713565b611f5e565b005b3480156108ff57600080fd5b506109086120a8565b005b34801561091657600080fd5b5061091f61215c565b60405161092c919061480d565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614713565b612182565b60405161096991906145b3565b60405180910390f35b34801561097e57600080fd5b506109876121a2565b604051610994919061466e565b60405180910390f35b3480156109a957600080fd5b506109b26121cc565b6040516109bf919061445e565b60405180910390f35b3480156109d457600080fd5b506109dd61225e565b6040516109ea91906145dd565b60405180910390f35b3480156109ff57600080fd5b50610a08612264565b604051610a1591906145dd565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906147ac565b61226a565b005b348015610a5357600080fd5b50610a5c61249a565b604051610a6991906145dd565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614558565b6124a0565b604051610aa691906145b3565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614558565b612517565b604051610ae391906145b3565b60405180910390f35b348015610af857600080fd5b50610b0161253a565b604051610b0e9190614849565b60405180910390f35b348015610b2357600080fd5b50610b2c612560565b604051610b3991906145dd565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190614713565b612566565b604051610b7691906145b3565b60405180910390f35b348015610b8b57600080fd5b50610b94612586565b604051610ba191906145b3565b60405180910390f35b348015610bb657600080fd5b50610bbf612599565b604051610bcc91906145dd565b60405180910390f35b348015610be157600080fd5b50610bea61259f565b604051610bf791906145dd565b60405180910390f35b348015610c0c57600080fd5b50610c156125a5565b604051610c2291906145dd565b60405180910390f35b348015610c3757600080fd5b50610c406125ab565b604051610c4d91906145dd565b60405180910390f35b348015610c6257600080fd5b50610c6b6125b1565b604051610c7891906145dd565b60405180910390f35b348015610c8d57600080fd5b50610c966125b7565b604051610ca391906145b3565b60405180910390f35b348015610cb857600080fd5b50610cd36004803603810190610cce9190614740565b6125ca565b604051610ce091906145dd565b60405180910390f35b348015610cf557600080fd5b50610cfe612651565b604051610d0b91906145dd565b60405180910390f35b348015610d2057600080fd5b50610d29612657565b005b348015610d3757600080fd5b50610d4061270b565b604051610d4d919061466e565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614713565b612731565b005b348015610d8b57600080fd5b50610da66004803603810190610da19190614713565b61287b565b005b348015610db457600080fd5b50610dbd612a41565b604051610dca91906145dd565b60405180910390f35b348015610ddf57600080fd5b50610de8612a47565b604051610df591906145dd565b60405180910390f35b348015610e0a57600080fd5b50610e13612a4d565b005b610e1d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906148b0565b60405180910390fd5b610eb4611503565b600a610ec09190614a32565b6103e86005610ecd6111bd565b610ed79190614a7d565b610ee19190614aee565b610eeb9190614aee565b811015610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490614b6b565b60405180910390fd5b610f35611503565b600a610f419190614a32565b81610f4c9190614a7d565b600a819055507f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574600a54604051610f8391906145dd565b60405180910390a150565b610f96612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906148b0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461104d9190614b8b565b6110579190614b8b565b6015819055506101f360155411156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614c0b565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c976015546040516110d591906145dd565b60405180910390a1505050565b6060600380546110f190614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90614c5a565b801561116a5780601f1061113f5761010080835404028352916020019161116a565b820191906000526020600020905b81548152906001019060200180831161114d57829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111a5612b0d565b90506111b2818585612b15565b600191505092915050565b6000600254905090565b601a5481565b6111d5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906148b0565b60405180910390fd5b61126c611503565b600a6112789190614a32565b606460016112846111bd565b61128e9190614a7d565b6112989190614aee565b6112a29190614aee565b8110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614b6b565b60405180910390fd5b6112ec611503565b600a6112f89190614a32565b816113039190614a7d565b600b819055507f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c42762600b5460405161133a91906145dd565b60405180910390a150565b61134d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906148b0565b60405180910390fd5b8360118190555082601281905550816014819055508060138190555060135460145460125460115461140e9190614b8b565b6114189190614b8b565b6114229190614b8b565b6010819055506101f3601054111561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614c0b565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05086010546040516114a091906145dd565b60405180910390a150505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806114df612b0d565b90506114ec858285612cde565b6114f7858585612d6a565b60019150509392505050565b60006012905090565b600080611517612b0d565b905061153881858561152985896125ca565b6115339190614b8b565b612b15565b600191505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611571612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906148b0565b60405180910390fd5b60004711611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614cd7565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff164760405161166a90614d28565b60006040518083038185875af1925050503d80600081146116a7576040519150601f19603f3d011682016040523d82523d6000602084013e6116ac565b606091505b5091509150816116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614d89565b60405180910390fd5b505050565b601c5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b61173d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290614df5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611876919061466e565b602060405180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614e2a565b90506118c4838383612e47565b505050565b6118d1612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ea3565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60105481565b60115481565b611a47612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906148b0565b60405180910390fd5b600b54600a81905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611cb5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906148b0565b60405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000601e60006101000a81548160ff021916908315150217905550611d826111bd565b600a81905550611d906111bd565b600b819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611dcc612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614f0f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611f52929190614f2f565b60405180910390a15050565b611f66612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614ea3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120b0612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612136906148b0565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121db90614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461220790614c5a565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b61271081565b601b5481565b612272612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f8906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614f0f565b60405180910390fd5b8061240657602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614fa4565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161248e929190614f2f565b60405180910390a15050565b60125481565b6000806124ab612b0d565b905060006124b982866125ca565b9050838110156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590615036565b60405180910390fd5b61250b8286868403612b15565b60019250505092915050565b600080612522612b0d565b905061252f818585612d6a565b600191505092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60096020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b60185481565b60135481565b600a5481565b60165481565b601f5481565b601e60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b61265f612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906148b0565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612739612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614ea3565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612883612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612909906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906150c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60195481565b612a55612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148b0565b60405180910390fd5b6103e86005612af16111bd565b612afb9190614a7d565b612b059190614aee565b600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd191906145dd565b60405180910390a3505050565b6000612cea84846125ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d645781811015612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90615258565b60405180910390fd5b612d638484848403612b15565b5b50505050565b612d75838383612ecd565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757612e298383836134e0565b81612e349190615278565b90505b612e4283838361382a565b505050565b612ec88363a9059cbb60e01b8484604051602401612e669291906152ac565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613aa0565b505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc657600860009054906101000a900460ff16612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc90615321565b60405180910390fd5b5b601e60019054906101000a900460ff16156134db57601e60009054906101000a900460ff16156131f257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130985750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f15743601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613129575043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f9061538d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333c57600a548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906153f9565b60405180910390fd5b600b546132eb83611b0d565b826132f69190614b8b565b1115613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90615465565b60405180910390fd5b6134da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133df5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342e57600a54811115613429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613420906154d1565b60405180910390fd5b6134d9565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134d857600b5461348b83611b0d565b826134969190614b8b565b11156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615465565b60405180910390fd5b5b5b5b5b505050565b6000601f546134ee30611b0d565b101580156135095750601e60029054906101000a900460ff16155b801561355e5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a2576001601e60026101000a81548160ff021916908315150217905550613586613b67565b6000601e60026101000a81548160ff0219169083151502179055505b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ff57506000601554115b156136bf57612710601554846136159190614a7d565b61361f9190614aee565b9050601554601754826136329190614a7d565b61363c9190614aee565b601a600082825461364d9190614b8b565b92505081905550601554601654826136659190614a7d565b61366f9190614aee565b601960008282546136809190614b8b565b92505081905550601554601854826136989190614a7d565b6136a29190614aee565b601b60008282546136b39190614b8b565b9250508190555061380a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371a57506000601054115b1561380957612710601054846137309190614a7d565b61373a9190614aee565b90506010546011548261374d9190614a7d565b6137579190614aee565b601960008282546137689190614b8b565b92505081905550601054601254826137809190614a7d565b61378a9190614aee565b601a600082825461379b9190614b8b565b92505081905550601054601454826137b39190614a7d565b6137bd9190614aee565b601b60008282546137ce9190614b8b565b92505081905550601054601354826137e69190614a7d565b6137f09190614aee565b601c60008282546138019190614b8b565b925050819055505b5b600081111561381f5761381e85308361382a565b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389090615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ff906155f5565b60405180910390fd5b613913838383613f26565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399090615687565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a8791906145dd565b60405180910390a3613a9a848484613f2b565b50505050565b6000613b02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f309092919063ffffffff16565b9050600081511115613b625780806020019051810190613b2291906156bc565b613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b589061575b565b60405180910390fd5b5b505050565b6000613b7230611b0d565b90506000601c54601b54601954601a54613b8c9190614b8b565b613b969190614b8b565b613ba09190614b8b565b90506000821480613bb15750600081145b15613bbd575050613f24565b6028601f54613bcc9190614a7d565b821115613be5576028601f54613be29190614a7d565b91505b6000601a541115613cde57600081601a5484613c019190614a7d565b613c0b9190614aee565b9050613c3a30602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361382a565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca457600080fd5b505af1925050508015613cb5575060015b508083613cc29190615278565b9250601a5482613cd29190615278565b91506000601a81905550505b600081118015613cee5750600082115b15613f2157613cfc82613f48565b6000479050600082601b5483613d129190614a7d565b613d1c9190614aee565b9050600083601c5484613d2f9190614a7d565b613d399190614aee565b9050600080831115613ddc57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d8b90614d28565b60006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050809150506000601b819055505b6000821115613e7c57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2b90614d28565b60006040518083038185875af1925050503d8060008114613e68576040519150601f19603f3d011682016040523d82523d6000602084013e613e6d565b606091505b5050809150506000601c819055505b6000471115613f1c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ecb90614d28565b60006040518083038185875af1925050503d8060008114613f08576040519150601f19603f3d011682016040523d82523d6000602084013e613f0d565b606091505b50508091505060006019819055505b505050505b50505b565b505050565b505050565b6060613f3f848460008561415e565b90509392505050565b6000600267ffffffffffffffff811115613f6557613f6461577b565b5b604051908082528060200260200182016040528015613f935781602001602082028036833780820191505090505b5090503081600081518110613fab57613faa6157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614052573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407691906157ee565b8160018151811061408a576140896157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614128959493929190615914565b600060405180830381600087803b15801561414257600080fd5b505af1158015614156573d6000803e3d6000fd5b505050505050565b6060824710156141a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161419a906159e0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516141cc9190615a3c565b60006040518083038185875af1925050503d8060008114614209576040519150601f19603f3d011682016040523d82523d6000602084013e61420e565b606091505b509150915061421f8783838761422b565b92505050949350505050565b6060831561428d57600083510361428557614245856142a0565b614284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161427b90615a9f565b60405180910390fd5b5b829050614298565b61429783836142c3565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156142d65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430a919061445e565b60405180910390fd5b600080fd5b6000819050919050565b61432b81614318565b811461433657600080fd5b50565b60008135905061434881614322565b92915050565b60006020828403121561436457614363614313565b5b600061437284828501614339565b91505092915050565b60008060006060848603121561439457614393614313565b5b60006143a286828701614339565b93505060206143b386828701614339565b92505060406143c486828701614339565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156144085780820151818401526020810190506143ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000614430826143ce565b61443a81856143d9565b935061444a8185602086016143ea565b61445381614414565b840191505092915050565b600060208201905081810360008301526144788184614425565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006144c56144c06144bb84614480565b6144a0565b614480565b9050919050565b60006144d7826144aa565b9050919050565b60006144e9826144cc565b9050919050565b6144f9816144de565b82525050565b600060208201905061451460008301846144f0565b92915050565b600061452582614480565b9050919050565b6145358161451a565b811461454057600080fd5b50565b6000813590506145528161452c565b92915050565b6000806040838503121561456f5761456e614313565b5b600061457d85828601614543565b925050602061458e85828601614339565b9150509250929050565b60008115159050919050565b6145ad81614598565b82525050565b60006020820190506145c860008301846145a4565b92915050565b6145d781614318565b82525050565b60006020820190506145f260008301846145ce565b92915050565b6000806000806080858703121561461257614611614313565b5b600061462087828801614339565b945050602061463187828801614339565b935050604061464287828801614339565b925050606061465387828801614339565b91505092959194509250565b6146688161451a565b82525050565b6000602082019050614683600083018461465f565b92915050565b6000806000606084860312156146a2576146a1614313565b5b60006146b086828701614543565b93505060206146c186828701614543565b92505060406146d286828701614339565b9150509250925092565b600060ff82169050919050565b6146f2816146dc565b82525050565b600060208201905061470d60008301846146e9565b92915050565b60006020828403121561472957614728614313565b5b600061473784828501614543565b91505092915050565b6000806040838503121561475757614756614313565b5b600061476585828601614543565b925050602061477685828601614543565b9150509250929050565b61478981614598565b811461479457600080fd5b50565b6000813590506147a681614780565b92915050565b600080604083850312156147c3576147c2614313565b5b60006147d185828601614543565b92505060206147e285828601614797565b9150509250929050565b60006147f7826144cc565b9050919050565b614807816147ec565b82525050565b600060208201905061482260008301846147fe565b92915050565b6000614833826144cc565b9050919050565b61484381614828565b82525050565b600060208201905061485e600083018461483a565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061489a6020836143d9565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561495657808604811115614932576149316148d0565b5b60018516156149415780820291505b808102905061494f856148ff565b9450614916565b94509492505050565b60008261496f5760019050614a2b565b8161497d5760009050614a2b565b8160018114614993576002811461499d576149cc565b6001915050614a2b565b60ff8411156149af576149ae6148d0565b5b8360020a9150848211156149c6576149c56148d0565b5b50614a2b565b5060208310610133831016604e8410600b8410161715614a015782820a9050838111156149fc576149fb6148d0565b5b614a2b565b614a0e848484600161490c565b92509050818404811115614a2557614a246148d0565b5b81810290505b9392505050565b6000614a3d82614318565b9150614a48836146dc565b9250614a757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461495f565b905092915050565b6000614a8882614318565b9150614a9383614318565b9250828202614aa181614318565b91508282048414831517614ab857614ab76148d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af982614318565b9150614b0483614318565b925082614b1457614b13614abf565b5b828204905092915050565b7f546f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000614b556007836143d9565b9150614b6082614b1f565b602082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b6000614b9682614318565b9150614ba183614318565b9250828201905080821115614bb957614bb86148d0565b5b92915050565b7f4b656570207461782062656c6f77203525000000000000000000000000000000600082015250565b6000614bf56011836143d9565b9150614c0082614bbf565b602082019050919050565b60006020820190508181036000830152614c2481614be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7257607f821691505b602082108103614c8557614c84614c2b565b5b50919050565b7f436f6e747261637420686173207a65726f204554480000000000000000000000600082015250565b6000614cc16015836143d9565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b600081905092915050565b50565b6000614d12600083614cf7565b9150614d1d82614d02565b600082019050919050565b6000614d3382614d05565b9150819050919050565b7f4661696c656420746f2073656e642045746865722e0000000000000000000000600082015250565b6000614d736015836143d9565b9150614d7e82614d3d565b602082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614ddf601a836143d9565b9150614dea82614da9565b602082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b600081519050614e2481614322565b92915050565b600060208284031215614e4057614e3f614313565b5b6000614e4e84828501614e15565b91505092915050565b7f7a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614e8d600c836143d9565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000614ef9600c836143d9565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000604082019050614f44600083018561465f565b614f5160208301846145a4565b9392505050565b7f43616e6e6f742072656d6f766520706169720000000000000000000000000000600082015250565b6000614f8e6012836143d9565b9150614f9982614f58565b602082019050919050565b60006020820190508181036000830152614fbd81614f81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150206025836143d9565b915061502b82614fc4565b604082019050919050565b6000602082019050818103600083015261504f81615013565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b26026836143d9565b91506150bd82615056565b604082019050919050565b600060208201905081810360008301526150e1816150a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151446024836143d9565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d66022836143d9565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615242601d836143d9565b915061524d8261520c565b602082019050919050565b6000602082019050818103600083015261527181615235565b9050919050565b600061528382614318565b915061528e83614318565b92508282039050818111156152a6576152a56148d0565b5b92915050565b60006040820190506152c1600083018561465f565b6152ce60208301846145ce565b9392505050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b600061530b6012836143d9565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e000000000000000000600082015250565b60006153776017836143d9565b915061538282615341565b602082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656465642e000000600082015250565b60006153e3601d836143d9565b91506153ee826153ad565b602082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b600061544f601b836143d9565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656465642e0000600082015250565b60006154bb601e836143d9565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061554d6025836143d9565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155df6023836143d9565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156716026836143d9565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b6000815190506156b681614780565b92915050565b6000602082840312156156d2576156d1614313565b5b60006156e0848285016156a7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615745602a836143d9565b9150615750826156e9565b604082019050919050565b6000602082019050818103600083015261577481615738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157e88161452c565b92915050565b60006020828403121561580457615803614313565b5b6000615812848285016157d9565b91505092915050565b6000819050919050565b600061584061583b6158368461581b565b6144a0565b614318565b9050919050565b61585081615825565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588b8161451a565b82525050565b600061589d8383615882565b60208301905092915050565b6000602082019050919050565b60006158c182615856565b6158cb8185615861565b93506158d683615872565b8060005b838110156159075781516158ee8882615891565b97506158f9836158a9565b9250506001810190506158da565b5085935050505092915050565b600060a08201905061592960008301886145ce565b6159366020830187615847565b818103604083015261594881866158b6565b9050615957606083018561465f565b61596460808301846145ce565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006159ca6026836143d9565b91506159d58261596e565b604082019050919050565b600060208201905081810360008301526159f9816159bd565b9050919050565b600081519050919050565b6000615a1682615a00565b615a208185614cf7565b9350615a308185602086016143ea565b80840191505092915050565b6000615a488284615a0b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615a89601d836143d9565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b905091905056fea2646970667358221220fafe0a4bc5b240d602728f24a07e97c7696a9d8b42f73efc9c160eebac9f367d64736f6c63430008130033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008426f6f6d636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424f4f4d00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Boomcoin
Arg [1] : _symbol (string): BOOM

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 426f6f6d636f696e000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 424f4f4d00000000000000000000000000000000000000000000000000000000


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.