ETH Price: $3,328.43 (-1.64%)
Gas: 21 Gwei

Token

CASHCAB (CAB)
 

Overview

Max Total Supply

1,000,000 CAB

Holders

275

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000021353 CAB

Value
$0.00
0xd9937BA31A2447C1a0d76b0Af9e4DEAf17c8C257
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:
CASHCAB

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-05
*/

// Website: https://cashcab.io
// Twitter: https://twitter.com/CashCabETH
// TG: https://t.me/cashcab

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol

// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.19;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed,
        uint256 tokenId
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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

// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.19;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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

// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.19;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

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

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.19;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.19;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}

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

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.19;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    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 returns (string memory) {
        return _name;
    }

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value,
        bool emitEvent
    ) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

pragma solidity ^0.8.19;

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

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

    function WETH() external pure returns (address);

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

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

contract CASHCAB is ERC20, Ownable, ReentrancyGuard {
    IRouter public router;
    address public pair;
    bool public tradingEnabled = false;

    address private marketing;
    address private development;
    address private cex;


    uint256 public buyTaxRates = 0;
    uint256 public sellTaxRates = 0;
    uint256 feeDenominator = 10000;
    bool public limitsInEffect = true;

    uint256 public swapTokenAtAmount;
    uint256 public maxWalletSize;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;


    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    mapping(address => bool) public exemptFee;

    bool private _isSwapping;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(bool enabled);
    event LimitsRemoved();

    constructor() ERC20("CASHCAB", "CAB") Ownable(msg.sender) {
        uint256 initialSupply = 1_000_000 * 10**decimals();
        _mint(msg.sender, initialSupply);
        swapTokenAtAmount = (totalSupply() * 5) / feeDenominator; // 0.05% of total supply
        maxWalletSize = (totalSupply() * 1) / 100; // 1% of the supply
        router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        pair = IFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        automatedMarketMakerPairs[pair] = true;

        _approve(address(this), address(router), type(uint256).max);
        marketing = address(0xDea7c4eeA88509AA8E82c91cCeB7AD95d12Efc5E);
        development = address(0x68e79e18121E3C867915304c32CC082fe4E89F9d);
        cex = address(0x30C74428A3D656F0DE901173DBf168C05Bfa3cDA);
 
        exemptFee[address(this)] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketing] = true;
        exemptFee[deadWallet] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[marketing] = true;
        _isExcludedMaxTransactionAmount[development] = true;
        _isExcludedMaxTransactionAmount[cex] = true;
        _isExcludedMaxTransactionAmount[pair] = true;
        _isExcludedMaxTransactionAmount[deadWallet] = true;
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trade is already enabled");
        tradingEnabled = true;
        emit TradingEnabled(true);
    }

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

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

        if (exemptFee[sender] || exemptFee[recipient]) {
            super._transfer(sender, recipient, amount);
        } else {
            require(tradingEnabled, "Trading is not enabled");
         
           
            if (limitsInEffect) {
               
                // wen buy
                if (
                    automatedMarketMakerPairs[sender] &&
                    !_isExcludedMaxTransactionAmount[recipient]
                ) {
                    require(
                        amount < maxWalletSize,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(recipient) < maxWalletSize,
                        "Max wallet exceeded"
                    );
                }
                //wen sell
                else if (
                    automatedMarketMakerPairs[recipient] &&
                    !_isExcludedMaxTransactionAmount[sender]
                ) {
                    require(
                        amount < maxWalletSize,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[recipient]) {
                    require(
                        amount + balanceOf(recipient) < maxWalletSize,
                        "Max wallet exceeded"
                    );
                }
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= swapTokenAtAmount;
            if (canSwap && !_isSwapping && !automatedMarketMakerPairs[sender]) {
                _isSwapping = true;
                distributeTaxes(contractTokenBalance);
                _isSwapping = false;
            }
            if (automatedMarketMakerPairs[sender] && buyTaxRates > 0) {
                uint256 taxAmount = (amount * buyTaxRates) / feeDenominator;
                uint256 transferAmount = amount - taxAmount;

                super._transfer(sender, address(this), taxAmount);
                super._transfer(sender, recipient, transferAmount);

            } else if (automatedMarketMakerPairs[recipient]  && sellTaxRates > 0) {
                uint256 taxAmount = (amount * sellTaxRates) / feeDenominator;
                uint256 transferAmount = amount - taxAmount;

                super._transfer(sender, address(this), taxAmount);
                super._transfer(sender, recipient, transferAmount);

            } else {
                super._transfer(sender, recipient, amount);
            }
        }
    }

    function distributeTaxes(uint256 contractTokenBalance) internal {
        _swapTokensForETH(contractTokenBalance);

        uint256 marketingFee = (address(this).balance * 20) / 100;
        uint256 developmentFee = (address(this).balance * 40) / 100;
        uint256 cexFee = (address(this).balance * 40) / 100;


        if (marketingFee > 0) {
            sendETH(marketing, marketingFee);
        }
        if (developmentFee > 0) {
            sendETH(development, developmentFee);
        }
        if (cexFee > 0) {
            sendETH(cex, cexFee);
        }
       
    }

    function changeTaxWallets(
        address _marketing,
        address _development,
        address  _cex

    ) external onlyOwner {
        require(_marketing != address(0), "Address Cant Be Zero");
        require(_development != address(0), "Address Cant Be Zero");
        require(_cex != address(0), "Address Cant Be Zero");

        marketing = _marketing;
        development = _development;
        cex = _cex;
     
    }

    function sendETH(address _to, uint256 amount)
        internal
        nonReentrant
        returns (bool)
    {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function setAutomatedMarketMakerPair(address lpPair, bool value)
        external
        onlyOwner
    {
        automatedMarketMakerPairs[lpPair] = value;
        emit SetAutomatedMarketMakerPair(lpPair, value);
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        _approve(address(this), address(router), tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        try
            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {}
    }

    function addExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = true;
    }

    function removeExemptFee(address _address) external onlyOwner {
        exemptFee[_address] = false;
    }

    function increaseMaxWalletByPercentage(uint256 percentage)
        external
        onlyOwner
    {
        require(
            percentage >= 100,
            "Percentage must be greater than or equal to 1%"
        );
        maxWalletSize = (totalSupply() * percentage) / 10000; // percentage of the supply
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        require(updAds != address(this));
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    function rescueETH() external {
        address payable marketingAddress = payable(marketing);
        marketingAddress.transfer(address(this).balance);
    }

   

    function changeBuyTax(uint256 _newRates) external onlyOwner {
        require(_newRates <= 3000, "Tax need to be less than 30%");
        buyTaxRates = _newRates;
    }

    function changeSellTax(uint256 _newRates) external onlyOwner {
        require(_newRates <= 3000, "Tax need to be less than 30%");
        sellTaxRates = _newRates;
    }

    function changeSwapTokenAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount > totalSupply() / 100_000 &&
                newAmount < (totalSupply() / 100),
            "Amount should be greater than 1 and less than 1% of total supply"
        );
        swapTokenAtAmount = newAmount;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        maxWalletSize = totalSupply();
        emit LimitsRemoved();
        return true;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRates","type":"uint256"}],"name":"changeBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRates","type":"uint256"}],"name":"changeSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeSwapTokenAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_cex","type":"address"}],"name":"changeTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"increaseMaxWalletByPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokenAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"stateMutability":"payable","type":"receive"}]

60806040525f600860146101000a81548160ff0219169083151502179055505f600c555f600d55612710600e556001600f5f6101000a81548160ff02191690831515021790555034801562000052575f80fd5b50336040518060400160405280600781526020017f43415348434142000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43414200000000000000000000000000000000000000000000000000000000008152508160039081620000d19190620011ee565b508060049081620000e39190620011ee565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000159575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000150919062001315565b60405180910390fd5b6200016a8162000a1660201b60201c565b5060016006819055505f6200018462000ad960201b60201c565b600a620001929190620014b9565b620f4240620001a2919062001509565b9050620001b6338262000ae160201b60201c565b600e546005620001cb62000b6b60201b60201c565b620001d7919062001509565b620001e3919062001580565b60108190555060646001620001fd62000b6b60201b60201c565b62000209919062001509565b62000215919062001580565b601181905550737a250d5630b4cf539739df2c5dacb4c659f2488d60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002da573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003009190620015ea565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000387573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ad9190620015ea565b6040518363ffffffff1660e01b8152600401620003cc9291906200161a565b6020604051808303815f875af1158015620003e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200040f9190620015ea565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160125f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005183060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b7460201b60201c565b73dea7c4eea88509aa8e82c91cceb7ad95d12efc5e60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507368e79e18121e3c867915304c32cc082fe4e89f9d600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507330c74428a3d656f0de901173dbf168c05bfa3cda600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050620016e6565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b54575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000b4b919062001315565b60405180910390fd5b62000b675f838362000b8e60201b60201c565b5050565b5f600254905090565b62000b89838383600162000db260201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000be2578060025f82825462000bd5919062001645565b9250508190555062000cb3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000c6e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000c659392919062001690565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cfc578060025f828254039250508190555062000d46565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000da59190620016cb565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000e25575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000e1c919062001315565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000e98575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000e8f919062001315565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000f84578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000f7b9190620016cb565b60405180910390a35b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200100657607f821691505b6020821081036200101c576200101b62000fc1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620010807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001043565b6200108c868362001043565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620010d6620010d0620010ca84620010a4565b620010ad565b620010a4565b9050919050565b5f819050919050565b620010f183620010b6565b620011096200110082620010dd565b8484546200104f565b825550505050565b5f90565b6200111f62001111565b6200112c818484620010e6565b505050565b5b818110156200115357620011475f8262001115565b60018101905062001132565b5050565b601f821115620011a2576200116c8162001022565b620011778462001034565b8101602085101562001187578190505b6200119f620011968562001034565b83018262001131565b50505b505050565b5f82821c905092915050565b5f620011c45f1984600802620011a7565b1980831691505092915050565b5f620011de8383620011b3565b9150826002028217905092915050565b620011f98262000f8a565b67ffffffffffffffff81111562001215576200121462000f94565b5b62001221825462000fee565b6200122e82828562001157565b5f60209050601f83116001811462001264575f84156200124f578287015190505b6200125b8582620011d1565b865550620012ca565b601f198416620012748662001022565b5f5b828110156200129d5784890151825560018201915060208501945060208101905062001276565b86831015620012bd5784890151620012b9601f891682620011b3565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620012fd82620012d2565b9050919050565b6200130f81620012f1565b82525050565b5f6020820190506200132a5f83018462001304565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620013ba5780860481111562001392576200139162001330565b5b6001851615620013a25780820291505b8081029050620013b2856200135d565b945062001372565b94509492505050565b5f82620013d45760019050620014a6565b81620013e3575f9050620014a6565b8160018114620013fc576002811462001407576200143d565b6001915050620014a6565b60ff8411156200141c576200141b62001330565b5b8360020a91508482111562001436576200143562001330565b5b50620014a6565b5060208310610133831016604e8410600b8410161715620014775782820a90508381111562001471576200147062001330565b5b620014a6565b62001486848484600162001369565b92509050818404811115620014a0576200149f62001330565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620014c582620010a4565b9150620014d283620014ad565b9250620015017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013c3565b905092915050565b5f6200151582620010a4565b91506200152283620010a4565b92508282026200153281620010a4565b915082820484148315176200154c576200154b62001330565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200158c82620010a4565b91506200159983620010a4565b925082620015ac57620015ab62001553565b5b828204905092915050565b5f80fd5b620015c681620012f1565b8114620015d1575f80fd5b50565b5f81519050620015e481620015bb565b92915050565b5f60208284031215620016025762001601620015b7565b5b5f6200161184828501620015d4565b91505092915050565b5f6040820190506200162f5f83018562001304565b6200163e602083018462001304565b9392505050565b5f6200165182620010a4565b91506200165e83620010a4565b925082820190508082111562001679576200167862001330565b5b92915050565b6200168a81620010a4565b82525050565b5f606082019050620016a55f83018662001304565b620016b460208301856200167f565b620016c360408301846200167f565b949350505050565b5f602082019050620016e05f8301846200167f565b92915050565b61344580620016f45f395ff3fe608060405260043610610212575f3560e01c806385141a7711610117578063b62496f51161009f578063dd62ed3e1161006e578063dd62ed3e14610767578063debae15e146107a3578063ebf3aefc146107cb578063f2fde38b146107f3578063f887ea401461081b57610219565b8063b62496f51461069f578063c5d32bb2146106db578063c7d532f514610717578063d3547d4a1461073f57610219565b806395d89b41116100e657806395d89b41146105bf5780639a7a23d6146105e9578063a8aa1b3114610611578063a9059cbb1461063b578063b2b49a4e1461067757610219565b806385141a771461052b5780638a8c523c146105555780638da5cb5b1461056b5780638f3fa8601461059557610219565b8063313ce5671161019a5780636da58d09116101695780636da58d091461045d57806370a0823114610487578063715018a6146104c3578063751039fc146104d95780637571336a1461050357610219565b8063313ce567146103b55780634a62bb65146103df5780634ada218b146104095780635e9d8d021461043357610219565b806318160ddd116101e157806318160ddd146102e95780632024eee31461031357806320800a001461033b57806323b872dd1461035157806324c16b7f1461038d57610219565b806303e403b01461021d57806306fdde0314610247578063095ea7b31461027157806310d5de53146102ad57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610845565b60405161023e91906125b0565b60405180910390f35b348015610252575f80fd5b5061025b61084b565b6040516102689190612653565b60405180910390f35b34801561027c575f80fd5b50610297600480360381019061029291906126fb565b6108db565b6040516102a49190612753565b60405180910390f35b3480156102b8575f80fd5b506102d360048036038101906102ce919061276c565b6108fd565b6040516102e09190612753565b60405180910390f35b3480156102f4575f80fd5b506102fd61091a565b60405161030a91906125b0565b60405180910390f35b34801561031e575f80fd5b5061033960048036038101906103349190612797565b610923565b005b348015610346575f80fd5b5061034f6109aa565b005b34801561035c575f80fd5b50610377600480360381019061037291906127c2565b610a16565b6040516103849190612753565b60405180910390f35b348015610398575f80fd5b506103b360048036038101906103ae9190612797565b610a44565b005b3480156103c0575f80fd5b506103c9610a9b565b6040516103d6919061282d565b60405180910390f35b3480156103ea575f80fd5b506103f3610aa3565b6040516104009190612753565b60405180910390f35b348015610414575f80fd5b5061041d610ab5565b60405161042a9190612753565b60405180910390f35b34801561043e575f80fd5b50610447610ac8565b60405161045491906125b0565b60405180910390f35b348015610468575f80fd5b50610471610ace565b60405161047e91906125b0565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a8919061276c565b610ad4565b6040516104ba91906125b0565b60405180910390f35b3480156104ce575f80fd5b506104d7610b19565b005b3480156104e4575f80fd5b506104ed610b2c565b6040516104fa9190612753565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190612870565b610b8f565b005b348015610536575f80fd5b5061053f610c26565b60405161054c91906128bd565b60405180910390f35b348015610560575f80fd5b50610569610c2c565b005b348015610576575f80fd5b5061057f610cd9565b60405161058c91906128bd565b60405180910390f35b3480156105a0575f80fd5b506105a9610d01565b6040516105b691906125b0565b60405180910390f35b3480156105ca575f80fd5b506105d3610d07565b6040516105e09190612653565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a9190612870565b610d97565b005b34801561061c575f80fd5b50610625610e3d565b60405161063291906128bd565b60405180910390f35b348015610646575f80fd5b50610661600480360381019061065c91906126fb565b610e62565b60405161066e9190612753565b60405180910390f35b348015610682575f80fd5b5061069d6004803603810190610698919061276c565b610e78565b005b3480156106aa575f80fd5b506106c560048036038101906106c0919061276c565b610ed7565b6040516106d29190612753565b60405180910390f35b3480156106e6575f80fd5b5061070160048036038101906106fc919061276c565b610ef4565b60405161070e9190612753565b60405180910390f35b348015610722575f80fd5b5061073d6004803603810190610738919061276c565b610f11565b005b34801561074a575f80fd5b50610765600480360381019061076091906128d6565b610f71565b005b348015610772575f80fd5b5061078d60048036038101906107889190612926565b611188565b60405161079a91906125b0565b60405180910390f35b3480156107ae575f80fd5b506107c960048036038101906107c49190612797565b61120a565b005b3480156107d6575f80fd5b506107f160048036038101906107ec9190612797565b611261565b005b3480156107fe575f80fd5b506108196004803603810190610814919061276c565b6112d6565b005b348015610826575f80fd5b5061082f61135a565b60405161083c91906129bf565b60405180910390f35b60105481565b60606003805461085a90612a05565b80601f016020809104026020016040519081016040528092919081815260200182805461088690612a05565b80156108d15780601f106108a8576101008083540402835291602001916108d1565b820191905f5260205f20905b8154815290600101906020018083116108b457829003601f168201915b5050505050905090565b5f806108e561137f565b90506108f2818585611386565b600191505092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b61092b611398565b620186a061093761091a565b6109419190612a8f565b811180156109615750606461095461091a565b61095e9190612a8f565b81105b6109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790612b2f565b60405180910390fd5b8060108190555050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610a12573d5f803e3d5ffd5b5050565b5f80610a2061137f565b9050610a2d85828561141f565b610a388585856114b1565b60019150509392505050565b610a4c611398565b610bb8811115610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612b97565b60405180910390fd5b80600c8190555050565b5f6012905090565b600f5f9054906101000a900460ff1681565b600860149054906101000a900460ff1681565b600c5481565b600d5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b21611398565b610b2a5f611bdc565b565b5f610b35611398565b5f600f5f6101000a81548160ff021916908315150217905550610b5661091a565b6011819055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b610b97611398565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bce575f80fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61dead81565b610c34611398565b600860149054906101000a900460ff1615610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90612bff565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051610ccf9190612753565b60405180910390a1565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b606060048054610d1690612a05565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4290612a05565b8015610d8d5780601f10610d6457610100808354040283529160200191610d8d565b820191905f5260205f20905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b610d9f611398565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610e6e3384846114b1565b6001905092915050565b610e80611398565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6012602052805f5260405f205f915054906101000a900460ff1681565b6014602052805f5260405f205f915054906101000a900460ff1681565b610f19611398565b600160145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f79611398565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90612c67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90612c67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90612c67565b60405180910390fd5b8260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611212611398565b610bb8811115611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612b97565b60405180910390fd5b80600d8190555050565b611269611398565b60648110156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490612cf5565b60405180910390fd5b612710816112b961091a565b6112c39190612d13565b6112cd9190612a8f565b60118190555050565b6112de611398565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161134591906128bd565b60405180910390fd5b61135781611bdc565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b6113938383836001611c9f565b505050565b6113a061137f565b73ffffffffffffffffffffffffffffffffffffffff166113be610cd9565b73ffffffffffffffffffffffffffffffffffffffff161461141d576113e161137f565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161141491906128bd565b60405180910390fd5b565b5f61142a8484611188565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114ab578181101561149c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161149393929190612d54565b60405180910390fd5b6114aa84848484035f611c9f565b5b50505050565b5f81116114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612df9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890612e87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690612f15565b60405180910390fd5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061166a575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561167f5761167a838383611e6e565b611bd7565b600860149054906101000a900460ff166116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590612f7d565b60405180910390fd5b600f5f9054906101000a900460ff16156119b85760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561177f575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156118245760115481106117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9061300b565b60405180910390fd5b6011546117d483610ad4565b826117df9190613029565b1061181f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611816906130a6565b60405180910390fd5b6119b7565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156118c1575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561190f57601154811061190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613134565b60405180910390fd5b6119b6565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166119b55760115461196983610ad4565b826119749190613029565b106119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906130a6565b60405180910390fd5b5b5b5b5b5f6119c230610ad4565b90505f60105482101590508080156119e6575060155f9054906101000a900460ff16155b8015611a39575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a7b57600160155f6101000a81548160ff021916908315150217905550611a6182611f5e565b5f60155f6101000a81548160ff0219169083151502179055505b60125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ad257505f600c54115b15611b21575f600e54600c5485611ae99190612d13565b611af39190612a8f565b90505f8185611b029190613152565b9050611b0f873084611e6e565b611b1a878783611e6e565b5050611bd4565b60125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611b7857505f600d54115b15611bc7575f600e54600d5485611b8f9190612d13565b611b999190612a8f565b90505f8185611ba89190613152565b9050611bb5873084611e6e565b611bc0878783611e6e565b5050611bd3565b611bd2858585611e6e565b5b5b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d0f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d0691906128bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7f575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d7691906128bd565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e68578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e5f91906125b0565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ed591906128bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611f4591906128bd565b60405180910390fd5b611f59838383612060565b505050565b611f6781612279565b5f6064601447611f779190612d13565b611f819190612a8f565b90505f6064602847611f939190612d13565b611f9d9190612a8f565b90505f6064602847611faf9190612d13565b611fb99190612a8f565b90505f831115611ff057611fee60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124ab565b505b5f82111561202557612023600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124ab565b505b5f81111561205a57612058600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124ab565b505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b0578060025f8282546120a49190613029565b9250508190555061217e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612139578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161213093929190612d54565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c5578060025f828254039250508190555061220f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161226c91906125b0565b60405180910390a3505050565b6122a53060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611386565b5f600267ffffffffffffffff8111156122c1576122c0613185565b5b6040519080825280602002602001820160405280156122ef5781602001602082028036833780820191505090505b50905030815f81518110612306576123056131b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ce91906131f3565b816001815181106123e2576123e16131b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161247e95949392919061330e565b5f604051808303815f87803b158015612495575f80fd5b505af19250505080156124a6575060015b505050565b5f6124b461253f565b814710156124c4575f9050612531565b5f8373ffffffffffffffffffffffffffffffffffffffff16836040516124e990613393565b5f6040518083038185875af1925050503d805f8114612523576040519150601f19603f3d011682016040523d82523d5f602084013e612528565b606091505b50509050809150505b61253961258e565b92915050565b600260065403612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906133f1565b60405180910390fd5b6002600681905550565b6001600681905550565b5f819050919050565b6125aa81612598565b82525050565b5f6020820190506125c35f8301846125a1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126005780820151818401526020810190506125e5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612625826125c9565b61262f81856125d3565b935061263f8185602086016125e3565b6126488161260b565b840191505092915050565b5f6020820190508181035f83015261266b818461261b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6126a082612677565b9050919050565b6126b081612696565b81146126ba575f80fd5b50565b5f813590506126cb816126a7565b92915050565b6126da81612598565b81146126e4575f80fd5b50565b5f813590506126f5816126d1565b92915050565b5f806040838503121561271157612710612673565b5b5f61271e858286016126bd565b925050602061272f858286016126e7565b9150509250929050565b5f8115159050919050565b61274d81612739565b82525050565b5f6020820190506127665f830184612744565b92915050565b5f6020828403121561278157612780612673565b5b5f61278e848285016126bd565b91505092915050565b5f602082840312156127ac576127ab612673565b5b5f6127b9848285016126e7565b91505092915050565b5f805f606084860312156127d9576127d8612673565b5b5f6127e6868287016126bd565b93505060206127f7868287016126bd565b9250506040612808868287016126e7565b9150509250925092565b5f60ff82169050919050565b61282781612812565b82525050565b5f6020820190506128405f83018461281e565b92915050565b61284f81612739565b8114612859575f80fd5b50565b5f8135905061286a81612846565b92915050565b5f806040838503121561288657612885612673565b5b5f612893858286016126bd565b92505060206128a48582860161285c565b9150509250929050565b6128b781612696565b82525050565b5f6020820190506128d05f8301846128ae565b92915050565b5f805f606084860312156128ed576128ec612673565b5b5f6128fa868287016126bd565b935050602061290b868287016126bd565b925050604061291c868287016126bd565b9150509250925092565b5f806040838503121561293c5761293b612673565b5b5f612949858286016126bd565b925050602061295a858286016126bd565b9150509250929050565b5f819050919050565b5f61298761298261297d84612677565b612964565b612677565b9050919050565b5f6129988261296d565b9050919050565b5f6129a98261298e565b9050919050565b6129b98161299f565b82525050565b5f6020820190506129d25f8301846129b0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1c57607f821691505b602082108103612a2f57612a2e6129d8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a9982612598565b9150612aa483612598565b925082612ab457612ab3612a35565b5b828204905092915050565b7f416d6f756e742073686f756c642062652067726561746572207468616e2031205f8201527f616e64206c657373207468616e203125206f6620746f74616c20737570706c79602082015250565b5f612b196040836125d3565b9150612b2482612abf565b604082019050919050565b5f6020820190508181035f830152612b4681612b0d565b9050919050565b7f546178206e65656420746f206265206c657373207468616e20333025000000005f82015250565b5f612b81601c836125d3565b9150612b8c82612b4d565b602082019050919050565b5f6020820190508181035f830152612bae81612b75565b9050919050565b7f547261646520697320616c726561647920656e61626c656400000000000000005f82015250565b5f612be96018836125d3565b9150612bf482612bb5565b602082019050919050565b5f6020820190508181035f830152612c1681612bdd565b9050919050565b7f416464726573732043616e74204265205a65726f0000000000000000000000005f82015250565b5f612c516014836125d3565b9150612c5c82612c1d565b602082019050919050565b5f6020820190508181035f830152612c7e81612c45565b9050919050565b7f50657263656e74616765206d7573742062652067726561746572207468616e205f8201527f6f7220657175616c20746f203125000000000000000000000000000000000000602082015250565b5f612cdf602e836125d3565b9150612cea82612c85565b604082019050919050565b5f6020820190508181035f830152612d0c81612cd3565b9050919050565b5f612d1d82612598565b9150612d2883612598565b9250828202612d3681612598565b91508282048414831517612d4d57612d4c612a62565b5b5092915050565b5f606082019050612d675f8301866128ae565b612d7460208301856125a1565b612d8160408301846125a1565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612de36029836125d3565b9150612dee82612d89565b604082019050919050565b5f6020820190508181035f830152612e1081612dd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612e716025836125d3565b9150612e7c82612e17565b604082019050919050565b5f6020820190508181035f830152612e9e81612e65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612eff6023836125d3565b9150612f0a82612ea5565b604082019050919050565b5f6020820190508181035f830152612f2c81612ef3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612f676016836125d3565b9150612f7282612f33565b602082019050919050565b5f6020820190508181035f830152612f9481612f5b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f612ff56035836125d3565b915061300082612f9b565b604082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b5f61303382612598565b915061303e83612598565b925082820190508082111561305657613055612a62565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6130906013836125d3565b915061309b8261305c565b602082019050919050565b5f6020820190508181035f8301526130bd81613084565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61311e6036836125d3565b9150613129826130c4565b604082019050919050565b5f6020820190508181035f83015261314b81613112565b9050919050565b5f61315c82612598565b915061316783612598565b925082820390508181111561317f5761317e612a62565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506131ed816126a7565b92915050565b5f6020828403121561320857613207612673565b5b5f613215848285016131df565b91505092915050565b5f819050919050565b5f61324161323c6132378461321e565b612964565b612598565b9050919050565b61325181613227565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61328981612696565b82525050565b5f61329a8383613280565b60208301905092915050565b5f602082019050919050565b5f6132bc82613257565b6132c68185613261565b93506132d183613271565b805f5b838110156133015781516132e8888261328f565b97506132f3836132a6565b9250506001810190506132d4565b5085935050505092915050565b5f60a0820190506133215f8301886125a1565b61332e6020830187613248565b818103604083015261334081866132b2565b905061334f60608301856128ae565b61335c60808301846125a1565b9695505050505050565b5f81905092915050565b50565b5f61337e5f83613366565b915061338982613370565b5f82019050919050565b5f61339d82613373565b9150819050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6133db601f836125d3565b91506133e6826133a7565b602082019050919050565b5f6020820190508181035f830152613408816133cf565b905091905056fea2646970667358221220ac3fea4ee0d03ed778c1160fb7210ac2a4fdc06d945f58c518fb937a421c9c5e64736f6c63430008180033

Deployed Bytecode

0x608060405260043610610212575f3560e01c806385141a7711610117578063b62496f51161009f578063dd62ed3e1161006e578063dd62ed3e14610767578063debae15e146107a3578063ebf3aefc146107cb578063f2fde38b146107f3578063f887ea401461081b57610219565b8063b62496f51461069f578063c5d32bb2146106db578063c7d532f514610717578063d3547d4a1461073f57610219565b806395d89b41116100e657806395d89b41146105bf5780639a7a23d6146105e9578063a8aa1b3114610611578063a9059cbb1461063b578063b2b49a4e1461067757610219565b806385141a771461052b5780638a8c523c146105555780638da5cb5b1461056b5780638f3fa8601461059557610219565b8063313ce5671161019a5780636da58d09116101695780636da58d091461045d57806370a0823114610487578063715018a6146104c3578063751039fc146104d95780637571336a1461050357610219565b8063313ce567146103b55780634a62bb65146103df5780634ada218b146104095780635e9d8d021461043357610219565b806318160ddd116101e157806318160ddd146102e95780632024eee31461031357806320800a001461033b57806323b872dd1461035157806324c16b7f1461038d57610219565b806303e403b01461021d57806306fdde0314610247578063095ea7b31461027157806310d5de53146102ad57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610845565b60405161023e91906125b0565b60405180910390f35b348015610252575f80fd5b5061025b61084b565b6040516102689190612653565b60405180910390f35b34801561027c575f80fd5b50610297600480360381019061029291906126fb565b6108db565b6040516102a49190612753565b60405180910390f35b3480156102b8575f80fd5b506102d360048036038101906102ce919061276c565b6108fd565b6040516102e09190612753565b60405180910390f35b3480156102f4575f80fd5b506102fd61091a565b60405161030a91906125b0565b60405180910390f35b34801561031e575f80fd5b5061033960048036038101906103349190612797565b610923565b005b348015610346575f80fd5b5061034f6109aa565b005b34801561035c575f80fd5b50610377600480360381019061037291906127c2565b610a16565b6040516103849190612753565b60405180910390f35b348015610398575f80fd5b506103b360048036038101906103ae9190612797565b610a44565b005b3480156103c0575f80fd5b506103c9610a9b565b6040516103d6919061282d565b60405180910390f35b3480156103ea575f80fd5b506103f3610aa3565b6040516104009190612753565b60405180910390f35b348015610414575f80fd5b5061041d610ab5565b60405161042a9190612753565b60405180910390f35b34801561043e575f80fd5b50610447610ac8565b60405161045491906125b0565b60405180910390f35b348015610468575f80fd5b50610471610ace565b60405161047e91906125b0565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a8919061276c565b610ad4565b6040516104ba91906125b0565b60405180910390f35b3480156104ce575f80fd5b506104d7610b19565b005b3480156104e4575f80fd5b506104ed610b2c565b6040516104fa9190612753565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190612870565b610b8f565b005b348015610536575f80fd5b5061053f610c26565b60405161054c91906128bd565b60405180910390f35b348015610560575f80fd5b50610569610c2c565b005b348015610576575f80fd5b5061057f610cd9565b60405161058c91906128bd565b60405180910390f35b3480156105a0575f80fd5b506105a9610d01565b6040516105b691906125b0565b60405180910390f35b3480156105ca575f80fd5b506105d3610d07565b6040516105e09190612653565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a9190612870565b610d97565b005b34801561061c575f80fd5b50610625610e3d565b60405161063291906128bd565b60405180910390f35b348015610646575f80fd5b50610661600480360381019061065c91906126fb565b610e62565b60405161066e9190612753565b60405180910390f35b348015610682575f80fd5b5061069d6004803603810190610698919061276c565b610e78565b005b3480156106aa575f80fd5b506106c560048036038101906106c0919061276c565b610ed7565b6040516106d29190612753565b60405180910390f35b3480156106e6575f80fd5b5061070160048036038101906106fc919061276c565b610ef4565b60405161070e9190612753565b60405180910390f35b348015610722575f80fd5b5061073d6004803603810190610738919061276c565b610f11565b005b34801561074a575f80fd5b50610765600480360381019061076091906128d6565b610f71565b005b348015610772575f80fd5b5061078d60048036038101906107889190612926565b611188565b60405161079a91906125b0565b60405180910390f35b3480156107ae575f80fd5b506107c960048036038101906107c49190612797565b61120a565b005b3480156107d6575f80fd5b506107f160048036038101906107ec9190612797565b611261565b005b3480156107fe575f80fd5b506108196004803603810190610814919061276c565b6112d6565b005b348015610826575f80fd5b5061082f61135a565b60405161083c91906129bf565b60405180910390f35b60105481565b60606003805461085a90612a05565b80601f016020809104026020016040519081016040528092919081815260200182805461088690612a05565b80156108d15780601f106108a8576101008083540402835291602001916108d1565b820191905f5260205f20905b8154815290600101906020018083116108b457829003601f168201915b5050505050905090565b5f806108e561137f565b90506108f2818585611386565b600191505092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b61092b611398565b620186a061093761091a565b6109419190612a8f565b811180156109615750606461095461091a565b61095e9190612a8f565b81105b6109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790612b2f565b60405180910390fd5b8060108190555050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610a12573d5f803e3d5ffd5b5050565b5f80610a2061137f565b9050610a2d85828561141f565b610a388585856114b1565b60019150509392505050565b610a4c611398565b610bb8811115610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612b97565b60405180910390fd5b80600c8190555050565b5f6012905090565b600f5f9054906101000a900460ff1681565b600860149054906101000a900460ff1681565b600c5481565b600d5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b21611398565b610b2a5f611bdc565b565b5f610b35611398565b5f600f5f6101000a81548160ff021916908315150217905550610b5661091a565b6011819055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b610b97611398565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bce575f80fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61dead81565b610c34611398565b600860149054906101000a900460ff1615610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90612bff565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051610ccf9190612753565b60405180910390a1565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b606060048054610d1690612a05565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4290612a05565b8015610d8d5780601f10610d6457610100808354040283529160200191610d8d565b820191905f5260205f20905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b610d9f611398565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610e6e3384846114b1565b6001905092915050565b610e80611398565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6012602052805f5260405f205f915054906101000a900460ff1681565b6014602052805f5260405f205f915054906101000a900460ff1681565b610f19611398565b600160145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f79611398565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90612c67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90612c67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90612c67565b60405180910390fd5b8260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611212611398565b610bb8811115611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612b97565b60405180910390fd5b80600d8190555050565b611269611398565b60648110156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490612cf5565b60405180910390fd5b612710816112b961091a565b6112c39190612d13565b6112cd9190612a8f565b60118190555050565b6112de611398565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161134591906128bd565b60405180910390fd5b61135781611bdc565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b6113938383836001611c9f565b505050565b6113a061137f565b73ffffffffffffffffffffffffffffffffffffffff166113be610cd9565b73ffffffffffffffffffffffffffffffffffffffff161461141d576113e161137f565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161141491906128bd565b60405180910390fd5b565b5f61142a8484611188565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114ab578181101561149c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161149393929190612d54565b60405180910390fd5b6114aa84848484035f611c9f565b5b50505050565b5f81116114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612df9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890612e87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690612f15565b60405180910390fd5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061166a575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561167f5761167a838383611e6e565b611bd7565b600860149054906101000a900460ff166116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590612f7d565b60405180910390fd5b600f5f9054906101000a900460ff16156119b85760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561177f575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156118245760115481106117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9061300b565b60405180910390fd5b6011546117d483610ad4565b826117df9190613029565b1061181f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611816906130a6565b60405180910390fd5b6119b7565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156118c1575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561190f57601154811061190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613134565b60405180910390fd5b6119b6565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166119b55760115461196983610ad4565b826119749190613029565b106119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906130a6565b60405180910390fd5b5b5b5b5b5f6119c230610ad4565b90505f60105482101590508080156119e6575060155f9054906101000a900460ff16155b8015611a39575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611a7b57600160155f6101000a81548160ff021916908315150217905550611a6182611f5e565b5f60155f6101000a81548160ff0219169083151502179055505b60125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ad257505f600c54115b15611b21575f600e54600c5485611ae99190612d13565b611af39190612a8f565b90505f8185611b029190613152565b9050611b0f873084611e6e565b611b1a878783611e6e565b5050611bd4565b60125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611b7857505f600d54115b15611bc7575f600e54600d5485611b8f9190612d13565b611b999190612a8f565b90505f8185611ba89190613152565b9050611bb5873084611e6e565b611bc0878783611e6e565b5050611bd3565b611bd2858585611e6e565b5b5b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d0f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d0691906128bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7f575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d7691906128bd565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e68578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e5f91906125b0565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ed591906128bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611f4591906128bd565b60405180910390fd5b611f59838383612060565b505050565b611f6781612279565b5f6064601447611f779190612d13565b611f819190612a8f565b90505f6064602847611f939190612d13565b611f9d9190612a8f565b90505f6064602847611faf9190612d13565b611fb99190612a8f565b90505f831115611ff057611fee60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124ab565b505b5f82111561202557612023600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124ab565b505b5f81111561205a57612058600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124ab565b505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b0578060025f8282546120a49190613029565b9250508190555061217e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612139578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161213093929190612d54565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121c5578060025f828254039250508190555061220f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161226c91906125b0565b60405180910390a3505050565b6122a53060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611386565b5f600267ffffffffffffffff8111156122c1576122c0613185565b5b6040519080825280602002602001820160405280156122ef5781602001602082028036833780820191505090505b50905030815f81518110612306576123056131b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ce91906131f3565b816001815181106123e2576123e16131b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161247e95949392919061330e565b5f604051808303815f87803b158015612495575f80fd5b505af19250505080156124a6575060015b505050565b5f6124b461253f565b814710156124c4575f9050612531565b5f8373ffffffffffffffffffffffffffffffffffffffff16836040516124e990613393565b5f6040518083038185875af1925050503d805f8114612523576040519150601f19603f3d011682016040523d82523d5f602084013e612528565b606091505b50509050809150505b61253961258e565b92915050565b600260065403612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906133f1565b60405180910390fd5b6002600681905550565b6001600681905550565b5f819050919050565b6125aa81612598565b82525050565b5f6020820190506125c35f8301846125a1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126005780820151818401526020810190506125e5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612625826125c9565b61262f81856125d3565b935061263f8185602086016125e3565b6126488161260b565b840191505092915050565b5f6020820190508181035f83015261266b818461261b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6126a082612677565b9050919050565b6126b081612696565b81146126ba575f80fd5b50565b5f813590506126cb816126a7565b92915050565b6126da81612598565b81146126e4575f80fd5b50565b5f813590506126f5816126d1565b92915050565b5f806040838503121561271157612710612673565b5b5f61271e858286016126bd565b925050602061272f858286016126e7565b9150509250929050565b5f8115159050919050565b61274d81612739565b82525050565b5f6020820190506127665f830184612744565b92915050565b5f6020828403121561278157612780612673565b5b5f61278e848285016126bd565b91505092915050565b5f602082840312156127ac576127ab612673565b5b5f6127b9848285016126e7565b91505092915050565b5f805f606084860312156127d9576127d8612673565b5b5f6127e6868287016126bd565b93505060206127f7868287016126bd565b9250506040612808868287016126e7565b9150509250925092565b5f60ff82169050919050565b61282781612812565b82525050565b5f6020820190506128405f83018461281e565b92915050565b61284f81612739565b8114612859575f80fd5b50565b5f8135905061286a81612846565b92915050565b5f806040838503121561288657612885612673565b5b5f612893858286016126bd565b92505060206128a48582860161285c565b9150509250929050565b6128b781612696565b82525050565b5f6020820190506128d05f8301846128ae565b92915050565b5f805f606084860312156128ed576128ec612673565b5b5f6128fa868287016126bd565b935050602061290b868287016126bd565b925050604061291c868287016126bd565b9150509250925092565b5f806040838503121561293c5761293b612673565b5b5f612949858286016126bd565b925050602061295a858286016126bd565b9150509250929050565b5f819050919050565b5f61298761298261297d84612677565b612964565b612677565b9050919050565b5f6129988261296d565b9050919050565b5f6129a98261298e565b9050919050565b6129b98161299f565b82525050565b5f6020820190506129d25f8301846129b0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1c57607f821691505b602082108103612a2f57612a2e6129d8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a9982612598565b9150612aa483612598565b925082612ab457612ab3612a35565b5b828204905092915050565b7f416d6f756e742073686f756c642062652067726561746572207468616e2031205f8201527f616e64206c657373207468616e203125206f6620746f74616c20737570706c79602082015250565b5f612b196040836125d3565b9150612b2482612abf565b604082019050919050565b5f6020820190508181035f830152612b4681612b0d565b9050919050565b7f546178206e65656420746f206265206c657373207468616e20333025000000005f82015250565b5f612b81601c836125d3565b9150612b8c82612b4d565b602082019050919050565b5f6020820190508181035f830152612bae81612b75565b9050919050565b7f547261646520697320616c726561647920656e61626c656400000000000000005f82015250565b5f612be96018836125d3565b9150612bf482612bb5565b602082019050919050565b5f6020820190508181035f830152612c1681612bdd565b9050919050565b7f416464726573732043616e74204265205a65726f0000000000000000000000005f82015250565b5f612c516014836125d3565b9150612c5c82612c1d565b602082019050919050565b5f6020820190508181035f830152612c7e81612c45565b9050919050565b7f50657263656e74616765206d7573742062652067726561746572207468616e205f8201527f6f7220657175616c20746f203125000000000000000000000000000000000000602082015250565b5f612cdf602e836125d3565b9150612cea82612c85565b604082019050919050565b5f6020820190508181035f830152612d0c81612cd3565b9050919050565b5f612d1d82612598565b9150612d2883612598565b9250828202612d3681612598565b91508282048414831517612d4d57612d4c612a62565b5b5092915050565b5f606082019050612d675f8301866128ae565b612d7460208301856125a1565b612d8160408301846125a1565b949350505050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612de36029836125d3565b9150612dee82612d89565b604082019050919050565b5f6020820190508181035f830152612e1081612dd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612e716025836125d3565b9150612e7c82612e17565b604082019050919050565b5f6020820190508181035f830152612e9e81612e65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612eff6023836125d3565b9150612f0a82612ea5565b604082019050919050565b5f6020820190508181035f830152612f2c81612ef3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f612f676016836125d3565b9150612f7282612f33565b602082019050919050565b5f6020820190508181035f830152612f9481612f5b565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f612ff56035836125d3565b915061300082612f9b565b604082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b5f61303382612598565b915061303e83612598565b925082820190508082111561305657613055612a62565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6130906013836125d3565b915061309b8261305c565b602082019050919050565b5f6020820190508181035f8301526130bd81613084565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61311e6036836125d3565b9150613129826130c4565b604082019050919050565b5f6020820190508181035f83015261314b81613112565b9050919050565b5f61315c82612598565b915061316783612598565b925082820390508181111561317f5761317e612a62565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506131ed816126a7565b92915050565b5f6020828403121561320857613207612673565b5b5f613215848285016131df565b91505092915050565b5f819050919050565b5f61324161323c6132378461321e565b612964565b612598565b9050919050565b61325181613227565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61328981612696565b82525050565b5f61329a8383613280565b60208301905092915050565b5f602082019050919050565b5f6132bc82613257565b6132c68185613261565b93506132d183613271565b805f5b838110156133015781516132e8888261328f565b97506132f3836132a6565b9250506001810190506132d4565b5085935050505092915050565b5f60a0820190506133215f8301886125a1565b61332e6020830187613248565b818103604083015261334081866132b2565b905061334f60608301856128ae565b61335c60808301846125a1565b9695505050505050565b5f81905092915050565b50565b5f61337e5f83613366565b915061338982613370565b5f82019050919050565b5f61339d82613373565b9150819050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6133db601f836125d3565b91506133e6826133a7565b602082019050919050565b5f6020820190508181035f830152613408816133cf565b905091905056fea2646970667358221220ac3fea4ee0d03ed778c1160fb7210ac2a4fdc06d945f58c518fb937a421c9c5e64736f6c63430008180033

Deployed Bytecode Sourcemap

28083:9803:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28489:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16768:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19102:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28627:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17870:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37313:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36777:161;;;;;;;;;;;;;:::i;:::-;;19902:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36953:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17721:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28447:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28196:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28335:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18032:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10326:103;;;;;;;;;;;;;:::i;:::-;;37654:192;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36561:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28701:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30425:183;;;;;;;;;;;;;:::i;:::-;;9651:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28528:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16978:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35254:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28170:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30616:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36113:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28563:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28796:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36001:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34515:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18600:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37132:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36229:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10584:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28142:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28489:32;;;;:::o;16768:91::-;16813:13;16846:5;16839:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16768:91;:::o;19102:222::-;19202:4;19224:13;19240:12;:10;:12::i;:::-;19224:28;;19263:31;19272:5;19279:7;19288:5;19263:8;:31::i;:::-;19312:4;19305:11;;;19102:222;;;;:::o;28627:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;17870:99::-;17922:7;17949:12;;17942:19;;17870:99;:::o;37313:333::-;9537:13;:11;:13::i;:::-;37445:7:::1;37429:13;:11;:13::i;:::-;:23;;;;:::i;:::-;37417:9;:35;:89;;;;;37502:3;37486:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37473:9;:33;37417:89;37395:203;;;;;;;;;;;;:::i;:::-;;;;;;;;;37629:9;37609:17;:29;;;;37313:333:::0;:::o;36777:161::-;36818:32;36861:9;;;;;;;;;;;36818:53;;36882:16;:25;;:48;36908:21;36882:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36807:131;36777:161::o;19902:283::-;20023:4;20040:15;20058:12;:10;:12::i;:::-;20040:30;;20081:37;20097:4;20103:7;20112:5;20081:15;:37::i;:::-;20129:26;20139:4;20145:2;20149:5;20129:9;:26::i;:::-;20173:4;20166:11;;;19902:283;;;;;:::o;36953:171::-;9537:13;:11;:13::i;:::-;37045:4:::1;37032:9;:17;;37024:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37107:9;37093:11;:23;;;;36953:171:::0;:::o;17721:84::-;17770:5;17795:2;17788:9;;17721:84;:::o;28447:33::-;;;;;;;;;;;;;:::o;28196:34::-;;;;;;;;;;;;;:::o;28335:30::-;;;;:::o;28372:31::-;;;;:::o;18032:118::-;18097:7;18124:9;:18;18134:7;18124:18;;;;;;;;;;;;;;;;18117:25;;18032:118;;;:::o;10326:103::-;9537:13;:11;:13::i;:::-;10391:30:::1;10418:1;10391:18;:30::i;:::-;10326:103::o:0;37654:192::-;37706:4;9537:13;:11;:13::i;:::-;37740:5:::1;37723:14;;:22;;;;;;;;;;;;;;;;;;37772:13;:11;:13::i;:::-;37756;:29;;;;37801:15;;;;;;;;;;37834:4;37827:11;;37654:192:::0;:::o;36561:210::-;9537:13;:11;:13::i;:::-;36700:4:::1;36682:23;;:6;:23;;::::0;36674:32:::1;;;::::0;::::1;;36759:4;36717:31;:39;36749:6;36717:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36561:210:::0;;:::o;28701:88::-;28747:42;28701:88;:::o;30425:183::-;9537:13;:11;:13::i;:::-;30489:14:::1;;;;;;;;;;;30488:15;30480:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;30560:4;30543:14;;:21;;;;;;;;;;;;;;;;;;30580:20;30595:4;30580:20;;;;;;:::i;:::-;;;;;;;;30425:183::o:0;9651:87::-;9697:7;9724:6;;;;;;;;;;;9717:13;;9651:87;:::o;28528:28::-;;;;:::o;16978:95::-;17025:13;17058:7;17051:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16978:95;:::o;35254:225::-;9537:13;:11;:13::i;:::-;35408:5:::1;35372:25;:33;35398:6;35372:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35465:5;35429:42;;35457:6;35429:42;;;;;;;;;;;;35254:225:::0;;:::o;28170:19::-;;;;;;;;;;;;;:::o;30616:197::-;30721:4;30743:40;30753:10;30765:9;30776:6;30743:9;:40::i;:::-;30801:4;30794:11;;30616:197;;;;:::o;36113:108::-;9537:13;:11;:13::i;:::-;36208:5:::1;36186:9;:19;36196:8;36186:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36113:108:::0;:::o;28563:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;28796:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;36001:104::-;9537:13;:11;:13::i;:::-;36093:4:::1;36071:9;:19;36081:8;36071:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;36001:104:::0;:::o;34515:446::-;9537:13;:11;:13::i;:::-;34694:1:::1;34672:24;;:10;:24;;::::0;34664:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34764:1;34740:26;;:12;:26;;::::0;34732:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:1;34810:18;;:4;:18;;::::0;34802:51:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34878:10;34866:9;;:22;;;;;;;;;;;;;;;;;;34913:12;34899:11;;:26;;;;;;;;;;;;;;;;;;34942:4;34936:3;;:10;;;;;;;;;;;;;;;;;;34515:446:::0;;;:::o;18600:183::-;18716:7;18748:11;:18;18760:5;18748:18;;;;;;;;;;;;;;;:27;18767:7;18748:27;;;;;;;;;;;;;;;;18741:34;;18600:183;;;;:::o;37132:173::-;9537:13;:11;:13::i;:::-;37225:4:::1;37212:9;:17;;37204:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37288:9;37273:12;:24;;;;37132:173:::0;:::o;36229:324::-;9537:13;:11;:13::i;:::-;36377:3:::1;36363:10;:17;;36341:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;36512:5;36498:10;36482:13;:11;:13::i;:::-;:26;;;;:::i;:::-;36481:36;;;;:::i;:::-;36465:13;:52;;;;36229:324:::0;:::o;10584:220::-;9537:13;:11;:13::i;:::-;10689:1:::1;10669:22;;:8;:22;;::::0;10665:93:::1;;10743:1;10715:31;;;;;;;;;;;:::i;:::-;;;;;;;;10665:93;10768:28;10787:8;10768:18;:28::i;:::-;10584:220:::0;:::o;28142:21::-;;;;;;;;;;;;;:::o;7639:98::-;7692:7;7719:10;7712:17;;7639:98;:::o;24071:164::-;24190:37;24199:5;24206:7;24215:5;24222:4;24190:8;:37::i;:::-;24071:164;;;:::o;9816:166::-;9887:12;:10;:12::i;:::-;9876:23;;:7;:5;:7::i;:::-;:23;;;9872:103;;9950:12;:10;:12::i;:::-;9923:40;;;;;;;;;;;:::i;:::-;;;;;;;;9872:103;9816:166::o;25864:603::-;25998:24;26025:25;26035:5;26042:7;26025:9;:25::i;:::-;25998:52;;26085:17;26065:16;:37;26061:399;;26142:5;26123:16;:24;26119:214;;;26224:7;26254:16;26293:5;26175:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;26119:214;26376:57;26385:5;26392:7;26420:5;26401:16;:24;26427:5;26376:8;:57::i;:::-;26061:399;25987:480;25864:603;;;:::o;30821:3080::-;30971:1;30962:6;:10;30954:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31055:1;31037:20;;:6;:20;;;31029:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:1;31118:23;;:9;:23;;;31110:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31198:9;:17;31208:6;31198:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;31219:9;:20;31229:9;31219:20;;;;;;;;;;;;;;;;;;;;;;;;;31198:41;31194:2700;;;31256:42;31272:6;31280:9;31291:6;31256:15;:42::i;:::-;31194:2700;;;31339:14;;;;;;;;;;;31331:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;31423:14;;;;;;;;;;;31419:1274;;;31529:25;:33;31555:6;31529:33;;;;;;;;;;;;;;;;;;;;;;;;;:101;;;;;31588:31;:42;31620:9;31588:42;;;;;;;;;;;;;;;;;;;;;;;;;31587:43;31529:101;31503:1175;;;31716:13;;31707:6;:22;31673:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;31923:13;;31900:20;31910:9;31900;:20::i;:::-;31891:6;:29;;;;:::i;:::-;:45;31857:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;31503:1175;;;32104:25;:36;32130:9;32104:36;;;;;;;;;;;;;;;;;;;;;;;;;:101;;;;;32166:31;:39;32198:6;32166:39;;;;;;;;;;;;;;;;;;;;;;;;;32165:40;32104:101;32078:600;;;32291:13;;32282:6;:22;32248:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;32078:600;;;32441:31;:42;32473:9;32441:42;;;;;;;;;;;;;;;;;;;;;;;;;32436:242;;32574:13;;32551:20;32561:9;32551;:20::i;:::-;32542:6;:29;;;;:::i;:::-;:45;32508:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:242;32078:600;31503:1175;31419:1274;32709:28;32740:24;32758:4;32740:9;:24::i;:::-;32709:55;;32779:12;32818:17;;32794:20;:41;;32779:56;;32854:7;:23;;;;;32866:11;;;;;;;;;;;32865:12;32854:23;:61;;;;;32882:25;:33;32908:6;32882:33;;;;;;;;;;;;;;;;;;;;;;;;;32881:34;32854:61;32850:214;;;32950:4;32936:11;;:18;;;;;;;;;;;;;;;;;;32973:37;32989:20;32973:15;:37::i;:::-;33043:5;33029:11;;:19;;;;;;;;;;;;;;;;;;32850:214;33082:25;:33;33108:6;33082:33;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;33133:1;33119:11;;:15;33082:52;33078:805;;;33155:17;33200:14;;33185:11;;33176:6;:20;;;;:::i;:::-;33175:39;;;;:::i;:::-;33155:59;;33233:22;33267:9;33258:6;:18;;;;:::i;:::-;33233:43;;33297:49;33313:6;33329:4;33336:9;33297:15;:49::i;:::-;33365:50;33381:6;33389:9;33400:14;33365:15;:50::i;:::-;33136:297;;33078:805;;;33443:25;:36;33469:9;33443:36;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;33499:1;33484:12;;:16;33443:57;33439:444;;;33521:17;33567:14;;33551:12;;33542:6;:21;;;;:::i;:::-;33541:40;;;;:::i;:::-;33521:60;;33600:22;33634:9;33625:6;:18;;;;:::i;:::-;33600:43;;33664:49;33680:6;33696:4;33703:9;33664:15;:49::i;:::-;33732:50;33748:6;33756:9;33767:14;33732:15;:50::i;:::-;33502:298;;33439:444;;;33825:42;33841:6;33849:9;33860:6;33825:15;:42::i;:::-;33439:444;33078:805;31316:2578;;31194:2700;30821:3080;;;:::o;10964:191::-;11038:16;11057:6;;;;;;;;;;;11038:25;;11083:8;11074:6;;:17;;;;;;;;;;;;;;;;;;11138:8;11107:40;;11128:8;11107:40;;;;;;;;;;;;11027:128;10964:191;:::o;25086:486::-;25259:1;25242:19;;:5;:19;;;25238:91;;25314:1;25285:32;;;;;;;;;;;:::i;:::-;;;;;;;;25238:91;25362:1;25343:21;;:7;:21;;;25339:92;;25416:1;25388:31;;;;;;;;;;;:::i;:::-;;;;;;;;25339:92;25471:5;25441:11;:18;25453:5;25441:18;;;;;;;;;;;;;;;:27;25460:7;25441:27;;;;;;;;;;;;;;;:35;;;;25491:9;25487:78;;;25538:7;25522:31;;25531:5;25522:31;;;25547:5;25522:31;;;;;;:::i;:::-;;;;;;;;25487:78;25086:486;;;;:::o;20570:350::-;20712:1;20696:18;;:4;:18;;;20692:88;;20765:1;20738:30;;;;;;;;;;;:::i;:::-;;;;;;;;20692:88;20808:1;20794:16;;:2;:16;;;20790:88;;20863:1;20834:32;;;;;;;;;;;:::i;:::-;;;;;;;;20790:88;20888:24;20896:4;20902:2;20906:5;20888:7;:24::i;:::-;20570:350;;;:::o;33909:598::-;33984:39;34002:20;33984:17;:39::i;:::-;34036:20;34090:3;34084:2;34060:21;:26;;;;:::i;:::-;34059:34;;;;:::i;:::-;34036:57;;34104:22;34160:3;34154:2;34130:21;:26;;;;:::i;:::-;34129:34;;;;:::i;:::-;34104:59;;34174:14;34222:3;34216:2;34192:21;:26;;;;:::i;:::-;34191:34;;;;:::i;:::-;34174:51;;34259:1;34244:12;:16;34240:81;;;34277:32;34285:9;;;;;;;;;;;34296:12;34277:7;:32::i;:::-;;34240:81;34352:1;34335:14;:18;34331:87;;;34370:36;34378:11;;;;;;;;;;;34391:14;34370:7;:36::i;:::-;;34331:87;34441:1;34432:6;:10;34428:63;;;34459:20;34467:3;;;;;;;;;;;34472:6;34459:7;:20::i;:::-;;34428:63;33973:534;;;33909:598;:::o;21244:1169::-;21384:1;21368:18;;:4;:18;;;21364:552;;21522:5;21506:12;;:21;;;;;;;:::i;:::-;;;;;;;;21364:552;;;21560:19;21582:9;:15;21592:4;21582:15;;;;;;;;;;;;;;;;21560:37;;21630:5;21616:11;:19;21612:117;;;21688:4;21694:11;21707:5;21663:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21612:117;21884:5;21870:11;:19;21852:9;:15;21862:4;21852:15;;;;;;;;;;;;;;;:37;;;;21545:371;21364:552;21946:1;21932:16;;:2;:16;;;21928:435;;22114:5;22098:12;;:21;;;;;;;;;;;21928:435;;;22331:5;22314:9;:13;22324:2;22314:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21928:435;22395:2;22380:25;;22389:4;22380:25;;;22399:5;22380:25;;;;;;:::i;:::-;;;;;;;;21244:1169;;;:::o;35487:506::-;35554:53;35571:4;35586:6;;;;;;;;;;;35595:11;35554:8;:53::i;:::-;35618:21;35656:1;35642:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35618:40;;35687:4;35669;35674:1;35669:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35713:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35703:4;35708:1;35703:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35754:6;;;;;;;;;;;:57;;;35830:11;35860:1;35880:4;35911;35935:15;35754:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35737:249;35543:450;35487:506;:::o;34969:277::-;35073:4;27640:21;:19;:21::i;:::-;35123:6:::1;35099:21;:30;35095:48;;;35138:5;35131:12;;;;35095:48;35157:12;35183:3;35175:17;;35200:6;35175:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35156:55;;;35231:7;35224:14;;;27672:1;27684:20:::0;:18;:20::i;:::-;34969:277;;;;:::o;27720:152::-;27500:1;27778:7;;:19;27770:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27500:1;27846:7;:18;;;;27720:152::o;27880:79::-;27456:1;27929:7;:22;;;;27880:79::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:468::-;5849:6;5857;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:50;6227:7;6218:6;6207:9;6203:22;6185:50;:::i;:::-;6175:60;;6130:115;5784:468;;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:619::-;6687:6;6695;6703;6752:2;6740:9;6731:7;6727:23;6723:32;6720:119;;;6758:79;;:::i;:::-;6720:119;6878:1;6903:53;6948:7;6939:6;6928:9;6924:22;6903:53;:::i;:::-;6893:63;;6849:117;7005:2;7031:53;7076:7;7067:6;7056:9;7052:22;7031:53;:::i;:::-;7021:63;;6976:118;7133:2;7159:53;7204:7;7195:6;7184:9;7180:22;7159:53;:::i;:::-;7149:63;;7104:118;6610:619;;;;;:::o;7235:474::-;7303:6;7311;7360:2;7348:9;7339:7;7335:23;7331:32;7328:119;;;7366:79;;:::i;:::-;7328:119;7486:1;7511:53;7556:7;7547:6;7536:9;7532:22;7511:53;:::i;:::-;7501:63;;7457:117;7613:2;7639:53;7684:7;7675:6;7664:9;7660:22;7639:53;:::i;:::-;7629:63;;7584:118;7235:474;;;;;:::o;7715:60::-;7743:3;7764:5;7757:12;;7715:60;;;:::o;7781:142::-;7831:9;7864:53;7882:34;7891:24;7909:5;7891:24;:::i;:::-;7882:34;:::i;:::-;7864:53;:::i;:::-;7851:66;;7781:142;;;:::o;7929:126::-;7979:9;8012:37;8043:5;8012:37;:::i;:::-;7999:50;;7929:126;;;:::o;8061:141::-;8126:9;8159:37;8190:5;8159:37;:::i;:::-;8146:50;;8061:141;;;:::o;8208:161::-;8310:52;8356:5;8310:52;:::i;:::-;8305:3;8298:65;8208:161;;:::o;8375:252::-;8483:4;8521:2;8510:9;8506:18;8498:26;;8534:86;8617:1;8606:9;8602:17;8593:6;8534:86;:::i;:::-;8375:252;;;;:::o;8633:180::-;8681:77;8678:1;8671:88;8778:4;8775:1;8768:15;8802:4;8799:1;8792:15;8819:320;8863:6;8900:1;8894:4;8890:12;8880:22;;8947:1;8941:4;8937:12;8968:18;8958:81;;9024:4;9016:6;9012:17;9002:27;;8958:81;9086:2;9078:6;9075:14;9055:18;9052:38;9049:84;;9105:18;;:::i;:::-;9049:84;8870:269;8819:320;;;:::o;9145:180::-;9193:77;9190:1;9183:88;9290:4;9287:1;9280:15;9314:4;9311:1;9304:15;9331:180;9379:77;9376:1;9369:88;9476:4;9473:1;9466:15;9500:4;9497:1;9490:15;9517:185;9557:1;9574:20;9592:1;9574:20;:::i;:::-;9569:25;;9608:20;9626:1;9608:20;:::i;:::-;9603:25;;9647:1;9637:35;;9652:18;;:::i;:::-;9637:35;9694:1;9691;9687:9;9682:14;;9517:185;;;;:::o;9708:251::-;9848:34;9844:1;9836:6;9832:14;9825:58;9917:34;9912:2;9904:6;9900:15;9893:59;9708:251;:::o;9965:366::-;10107:3;10128:67;10192:2;10187:3;10128:67;:::i;:::-;10121:74;;10204:93;10293:3;10204:93;:::i;:::-;10322:2;10317:3;10313:12;10306:19;;9965:366;;;:::o;10337:419::-;10503:4;10541:2;10530:9;10526:18;10518:26;;10590:9;10584:4;10580:20;10576:1;10565:9;10561:17;10554:47;10618:131;10744:4;10618:131;:::i;:::-;10610:139;;10337:419;;;:::o;10762:178::-;10902:30;10898:1;10890:6;10886:14;10879:54;10762:178;:::o;10946:366::-;11088:3;11109:67;11173:2;11168:3;11109:67;:::i;:::-;11102:74;;11185:93;11274:3;11185:93;:::i;:::-;11303:2;11298:3;11294:12;11287:19;;10946:366;;;:::o;11318:419::-;11484:4;11522:2;11511:9;11507:18;11499:26;;11571:9;11565:4;11561:20;11557:1;11546:9;11542:17;11535:47;11599:131;11725:4;11599:131;:::i;:::-;11591:139;;11318:419;;;:::o;11743:174::-;11883:26;11879:1;11871:6;11867:14;11860:50;11743:174;:::o;11923:366::-;12065:3;12086:67;12150:2;12145:3;12086:67;:::i;:::-;12079:74;;12162:93;12251:3;12162:93;:::i;:::-;12280:2;12275:3;12271:12;12264:19;;11923:366;;;:::o;12295:419::-;12461:4;12499:2;12488:9;12484:18;12476:26;;12548:9;12542:4;12538:20;12534:1;12523:9;12519:17;12512:47;12576:131;12702:4;12576:131;:::i;:::-;12568:139;;12295:419;;;:::o;12720:170::-;12860:22;12856:1;12848:6;12844:14;12837:46;12720:170;:::o;12896:366::-;13038:3;13059:67;13123:2;13118:3;13059:67;:::i;:::-;13052:74;;13135:93;13224:3;13135:93;:::i;:::-;13253:2;13248:3;13244:12;13237:19;;12896:366;;;:::o;13268:419::-;13434:4;13472:2;13461:9;13457:18;13449:26;;13521:9;13515:4;13511:20;13507:1;13496:9;13492:17;13485:47;13549:131;13675:4;13549:131;:::i;:::-;13541:139;;13268:419;;;:::o;13693:233::-;13833:34;13829:1;13821:6;13817:14;13810:58;13902:16;13897:2;13889:6;13885:15;13878:41;13693:233;:::o;13932:366::-;14074:3;14095:67;14159:2;14154:3;14095:67;:::i;:::-;14088:74;;14171:93;14260:3;14171:93;:::i;:::-;14289:2;14284:3;14280:12;14273:19;;13932:366;;;:::o;14304:419::-;14470:4;14508:2;14497:9;14493:18;14485:26;;14557:9;14551:4;14547:20;14543:1;14532:9;14528:17;14521:47;14585:131;14711:4;14585:131;:::i;:::-;14577:139;;14304:419;;;:::o;14729:410::-;14769:7;14792:20;14810:1;14792:20;:::i;:::-;14787:25;;14826:20;14844:1;14826:20;:::i;:::-;14821:25;;14881:1;14878;14874:9;14903:30;14921:11;14903:30;:::i;:::-;14892:41;;15082:1;15073:7;15069:15;15066:1;15063:22;15043:1;15036:9;15016:83;14993:139;;15112:18;;:::i;:::-;14993:139;14777:362;14729:410;;;;:::o;15145:442::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15345:71;15413:1;15402:9;15398:17;15389:6;15345:71;:::i;:::-;15426:72;15494:2;15483:9;15479:18;15470:6;15426:72;:::i;:::-;15508;15576:2;15565:9;15561:18;15552:6;15508:72;:::i;:::-;15145:442;;;;;;:::o;15593:228::-;15733:34;15729:1;15721:6;15717:14;15710:58;15802:11;15797:2;15789:6;15785:15;15778:36;15593:228;:::o;15827:366::-;15969:3;15990:67;16054:2;16049:3;15990:67;:::i;:::-;15983:74;;16066:93;16155:3;16066:93;:::i;:::-;16184:2;16179:3;16175:12;16168:19;;15827:366;;;:::o;16199:419::-;16365:4;16403:2;16392:9;16388:18;16380:26;;16452:9;16446:4;16442:20;16438:1;16427:9;16423:17;16416:47;16480:131;16606:4;16480:131;:::i;:::-;16472:139;;16199:419;;;:::o;16624:224::-;16764:34;16760:1;16752:6;16748:14;16741:58;16833:7;16828:2;16820:6;16816:15;16809:32;16624:224;:::o;16854:366::-;16996:3;17017:67;17081:2;17076:3;17017:67;:::i;:::-;17010:74;;17093:93;17182:3;17093:93;:::i;:::-;17211:2;17206:3;17202:12;17195:19;;16854:366;;;:::o;17226:419::-;17392:4;17430:2;17419:9;17415:18;17407:26;;17479:9;17473:4;17469:20;17465:1;17454:9;17450:17;17443:47;17507:131;17633:4;17507:131;:::i;:::-;17499:139;;17226:419;;;:::o;17651:222::-;17791:34;17787:1;17779:6;17775:14;17768:58;17860:5;17855:2;17847:6;17843:15;17836:30;17651:222;:::o;17879:366::-;18021:3;18042:67;18106:2;18101:3;18042:67;:::i;:::-;18035:74;;18118:93;18207:3;18118:93;:::i;:::-;18236:2;18231:3;18227:12;18220:19;;17879:366;;;:::o;18251:419::-;18417:4;18455:2;18444:9;18440:18;18432:26;;18504:9;18498:4;18494:20;18490:1;18479:9;18475:17;18468:47;18532:131;18658:4;18532:131;:::i;:::-;18524:139;;18251:419;;;:::o;18676:172::-;18816:24;18812:1;18804:6;18800:14;18793:48;18676:172;:::o;18854:366::-;18996:3;19017:67;19081:2;19076:3;19017:67;:::i;:::-;19010:74;;19093:93;19182:3;19093:93;:::i;:::-;19211:2;19206:3;19202:12;19195:19;;18854:366;;;:::o;19226:419::-;19392:4;19430:2;19419:9;19415:18;19407:26;;19479:9;19473:4;19469:20;19465:1;19454:9;19450:17;19443:47;19507:131;19633:4;19507:131;:::i;:::-;19499:139;;19226:419;;;:::o;19651:240::-;19791:34;19787:1;19779:6;19775:14;19768:58;19860:23;19855:2;19847:6;19843:15;19836:48;19651:240;:::o;19897:366::-;20039:3;20060:67;20124:2;20119:3;20060:67;:::i;:::-;20053:74;;20136:93;20225:3;20136:93;:::i;:::-;20254:2;20249:3;20245:12;20238:19;;19897:366;;;:::o;20269:419::-;20435:4;20473:2;20462:9;20458:18;20450:26;;20522:9;20516:4;20512:20;20508:1;20497:9;20493:17;20486:47;20550:131;20676:4;20550:131;:::i;:::-;20542:139;;20269:419;;;:::o;20694:191::-;20734:3;20753:20;20771:1;20753:20;:::i;:::-;20748:25;;20787:20;20805:1;20787:20;:::i;:::-;20782:25;;20830:1;20827;20823:9;20816:16;;20851:3;20848:1;20845:10;20842:36;;;20858:18;;:::i;:::-;20842:36;20694:191;;;;:::o;20891:169::-;21031:21;21027:1;21019:6;21015:14;21008:45;20891:169;:::o;21066:366::-;21208:3;21229:67;21293:2;21288:3;21229:67;:::i;:::-;21222:74;;21305:93;21394:3;21305:93;:::i;:::-;21423:2;21418:3;21414:12;21407:19;;21066:366;;;:::o;21438:419::-;21604:4;21642:2;21631:9;21627:18;21619:26;;21691:9;21685:4;21681:20;21677:1;21666:9;21662:17;21655:47;21719:131;21845:4;21719:131;:::i;:::-;21711:139;;21438:419;;;:::o;21863:241::-;22003:34;21999:1;21991:6;21987:14;21980:58;22072:24;22067:2;22059:6;22055:15;22048:49;21863:241;:::o;22110:366::-;22252:3;22273:67;22337:2;22332:3;22273:67;:::i;:::-;22266:74;;22349:93;22438:3;22349:93;:::i;:::-;22467:2;22462:3;22458:12;22451:19;;22110:366;;;:::o;22482:419::-;22648:4;22686:2;22675:9;22671:18;22663:26;;22735:9;22729:4;22725:20;22721:1;22710:9;22706:17;22699:47;22763:131;22889:4;22763:131;:::i;:::-;22755:139;;22482:419;;;:::o;22907:194::-;22947:4;22967:20;22985:1;22967:20;:::i;:::-;22962:25;;23001:20;23019:1;23001:20;:::i;:::-;22996:25;;23045:1;23042;23038:9;23030:17;;23069:1;23063:4;23060:11;23057:37;;;23074:18;;:::i;:::-;23057:37;22907:194;;;;:::o;23107:180::-;23155:77;23152:1;23145:88;23252:4;23249:1;23242:15;23276:4;23273:1;23266:15;23293:180;23341:77;23338:1;23331:88;23438:4;23435:1;23428:15;23462:4;23459:1;23452:15;23479:143;23536:5;23567:6;23561:13;23552:22;;23583:33;23610:5;23583:33;:::i;:::-;23479:143;;;;:::o;23628:351::-;23698:6;23747:2;23735:9;23726:7;23722:23;23718:32;23715:119;;;23753:79;;:::i;:::-;23715:119;23873:1;23898:64;23954:7;23945:6;23934:9;23930:22;23898:64;:::i;:::-;23888:74;;23844:128;23628:351;;;;:::o;23985:85::-;24030:7;24059:5;24048:16;;23985:85;;;:::o;24076:158::-;24134:9;24167:61;24185:42;24194:32;24220:5;24194:32;:::i;:::-;24185:42;:::i;:::-;24167:61;:::i;:::-;24154:74;;24076:158;;;:::o;24240:147::-;24335:45;24374:5;24335:45;:::i;:::-;24330:3;24323:58;24240:147;;:::o;24393:114::-;24460:6;24494:5;24488:12;24478:22;;24393:114;;;:::o;24513:184::-;24612:11;24646:6;24641:3;24634:19;24686:4;24681:3;24677:14;24662:29;;24513:184;;;;:::o;24703:132::-;24770:4;24793:3;24785:11;;24823:4;24818:3;24814:14;24806:22;;24703:132;;;:::o;24841:108::-;24918:24;24936:5;24918:24;:::i;:::-;24913:3;24906:37;24841:108;;:::o;24955:179::-;25024:10;25045:46;25087:3;25079:6;25045:46;:::i;:::-;25123:4;25118:3;25114:14;25100:28;;24955:179;;;;:::o;25140:113::-;25210:4;25242;25237:3;25233:14;25225:22;;25140:113;;;:::o;25289:732::-;25408:3;25437:54;25485:5;25437:54;:::i;:::-;25507:86;25586:6;25581:3;25507:86;:::i;:::-;25500:93;;25617:56;25667:5;25617:56;:::i;:::-;25696:7;25727:1;25712:284;25737:6;25734:1;25731:13;25712:284;;;25813:6;25807:13;25840:63;25899:3;25884:13;25840:63;:::i;:::-;25833:70;;25926:60;25979:6;25926:60;:::i;:::-;25916:70;;25772:224;25759:1;25756;25752:9;25747:14;;25712:284;;;25716:14;26012:3;26005:10;;25413:608;;;25289:732;;;;:::o;26027:831::-;26290:4;26328:3;26317:9;26313:19;26305:27;;26342:71;26410:1;26399:9;26395:17;26386:6;26342:71;:::i;:::-;26423:80;26499:2;26488:9;26484:18;26475:6;26423:80;:::i;:::-;26550:9;26544:4;26540:20;26535:2;26524:9;26520:18;26513:48;26578:108;26681:4;26672:6;26578:108;:::i;:::-;26570:116;;26696:72;26764:2;26753:9;26749:18;26740:6;26696:72;:::i;:::-;26778:73;26846:3;26835:9;26831:19;26822:6;26778:73;:::i;:::-;26027:831;;;;;;;;:::o;26864:147::-;26965:11;27002:3;26987:18;;26864:147;;;;:::o;27017:114::-;;:::o;27137:398::-;27296:3;27317:83;27398:1;27393:3;27317:83;:::i;:::-;27310:90;;27409:93;27498:3;27409:93;:::i;:::-;27527:1;27522:3;27518:11;27511:18;;27137:398;;;:::o;27541:379::-;27725:3;27747:147;27890:3;27747:147;:::i;:::-;27740:154;;27911:3;27904:10;;27541:379;;;:::o;27926:181::-;28066:33;28062:1;28054:6;28050:14;28043:57;27926:181;:::o;28113:366::-;28255:3;28276:67;28340:2;28335:3;28276:67;:::i;:::-;28269:74;;28352:93;28441:3;28352:93;:::i;:::-;28470:2;28465:3;28461:12;28454:19;;28113:366;;;:::o;28485:419::-;28651:4;28689:2;28678:9;28674:18;28666:26;;28738:9;28732:4;28728:20;28724:1;28713:9;28709:17;28702:47;28766:131;28892:4;28766:131;:::i;:::-;28758:139;;28485:419;;;:::o

Swarm Source

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