ETH Price: $2,356.29 (+1.12%)

Token

The Lucky Rat (TLR)
 

Overview

Max Total Supply

1,000,000,000 TLR

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,722,226.292542469330064063 TLR

Value
$0.00
0x94410a3e82f3a7614f485c9d5b6b6266a168d89f
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:
TheLuckyRat

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;




/**
 * @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}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: Test.sol

//SPDX-License-Identifier: MIT
pragma solidity 0.8.16;



 
 
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,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
 
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}
 
contract TheLuckyRat is ERC20, Ownable{
    using Address for address payable;
 
    IRouter public router;
    address public pair;
 
    bool private swapping;
    bool public swapEnabled;
    bool public tradingAllowed;
 
    uint256 public swapThreshold = 50_000 * 10**18;
    uint256 public maxBuy = 50_000 * 10**18;
    uint256 public maxWallet = 50_000 * 10**18;
 
    address public marketingWallet = 0x27ad85d194773a7F8877C07304017a10552b3B00;
    address public stakingWallet = 0xEC742eFd72cC480FaE32391A0A3f2B7F3652E57D;
    address public lotteryWallet = 0xdF015503bb77A8b02B656A57Aaa1401df5c3ED52;
 
 
    struct Taxes {
        uint64 marketing;
        uint64 staking;
        uint64 liquidity;
        uint64 lottery;
    }
 
    Taxes public buyTaxes = Taxes(2,1,1,2);
    Taxes public sellTaxes = Taxes(2,1,1,2);
 
    uint256 public totalSellTax = 6;
    uint256 public totalBuyTax = 6;
 
    mapping (address => bool) public excludedFromFees;
 
    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }
 
    constructor() ERC20("The Lucky Rat", "TLR") {
        _mint(msg.sender, 1e9 * 10 ** decimals());
        excludedFromFees[msg.sender] = true;
 
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
 
        router = _router;
        pair = _pair;
        excludedFromFees[address(this)] = true;
        excludedFromFees[marketingWallet] = true;
        excludedFromFees[lotteryWallet] = true;
        excludedFromFees[stakingWallet] = true;
    }
 
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(tradingAllowed || excludedFromFees[sender] || excludedFromFees[recipient], "Trading disabled");
 
        if (swapping || excludedFromFees[sender] || excludedFromFees[recipient]){
            super._transfer(sender, recipient, amount);
            return;
        }
 
        if(recipient != pair) require(balanceOf(recipient) + amount <= maxWallet, "You are exceeding maxWallet");
 
        uint256 fee = 0;
        uint256 lotteryAmt = 0;
        uint256 stakingAmt = 0;
 
        if(recipient == pair) {
            fee = amount * totalSellTax / 100;
            lotteryAmt = amount * sellTaxes.lottery / 100;
            stakingAmt = amount * sellTaxes.staking / 100;
        }
        else if(sender == pair){
            require(amount <= maxBuy, "You are exceeding maxBuy");
            fee = amount * totalBuyTax / 100;
            lotteryAmt = amount * buyTaxes.lottery / 100;
            stakingAmt = amount * buyTaxes.staking / 100;
        }
 
        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (swapEnabled && !swapping && sender != pair && fee > 0) swapForFees();
 
        super._transfer(sender, recipient, amount - fee);
        if(fee > 0) super._transfer(sender, address(this) , (fee - lotteryAmt - stakingAmt));
        if(lotteryAmt > 0) super._transfer(sender, lotteryWallet , lotteryAmt);
        if(stakingAmt > 0) super._transfer(sender, stakingWallet , stakingAmt);
    }
 
    function swapForFees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {
 
            // Split the contract balance into halves
            uint256 denominator = (sellTaxes.liquidity + sellTaxes.marketing) * 2;
            uint256 tokensToAddLiquidityWith = contractBalance * sellTaxes.liquidity / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;
 
            uint256 initialBalance = address(this).balance;
 
            swapTokensForEth(toSwap);
 
            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance= deltaBalance / (denominator - sellTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * sellTaxes.liquidity;
 
            if(ethToAddLiquidityWith > 0){
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }
 
            uint256 marketingAmt = unitBalance * 2 * sellTaxes.marketing;
            if(marketingAmt > 0){
                payable(marketingWallet).sendValue(marketingAmt);
            }
        }
    }
 
 
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
 
        _approve(address(this), address(router), tokenAmount);
 
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);
 
        // add the liquidity
        router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
 
    function setSwapEnabled(bool state) external onlyOwner {
        swapEnabled = state;
    }
 
    function setSwapThreshold(uint256 new_amount) external onlyOwner {
        swapThreshold = new_amount * 10**decimals();
    }
 
    function setMaxBuy(uint256 amount) external onlyOwner{
        maxBuy = amount * 10**decimals();
    }
 
    function setMaxWallet(uint256 amount) external onlyOwner{
        maxWallet = amount * 10**decimals();
    }
 
    function setBuyTaxes(uint64 _marketing, uint64 _staking, uint64 _liquidity, uint64 _lottery) external onlyOwner{
        require(_marketing + _staking + _liquidity + _lottery <= 15, "Fees too high");
        buyTaxes = Taxes(_marketing, _staking, _liquidity, _lottery);
        totalBuyTax = _marketing + _staking + _liquidity + _lottery;
    }
 
    function setSellTaxes(uint64 _marketing, uint64 _staking, uint64 _liquidity, uint64 _lottery) external onlyOwner{
        require(_marketing + _staking + _liquidity + _lottery <= 15, "Fees too high");
        sellTaxes = Taxes(_marketing, _staking, _liquidity, _lottery);
        totalSellTax = _marketing + _staking + _liquidity + _lottery;
    }
 
    function setTradingActive() external onlyOwner{
        tradingAllowed = true;
        swapEnabled = true;
    }
 
    function madeWithLoveByFreezy() external pure returns(bool){
        return true;
    }
 
    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
        excludedFromFees[newWallet] = true;
    }
 
    function updateStakingWallet(address newWallet) external onlyOwner{
        stakingWallet = newWallet;
        excludedFromFees[newWallet] = true;
    }
 
    function updateLotteryWallet(address newWallet) external onlyOwner{
        lotteryWallet = newWallet;
        excludedFromFees[newWallet] = true;
    }
 
    function updateRouterAndPair(IRouter _router, address _pair) external onlyOwner{
        //Thank you Freezy
        require(address(_router) != address(0), "Router cannot be zero");
        require(pair != address(0), "Pair cannot be zero");
        router = _router;
        pair = _pair;
    }
 
    function updateExcludedFromFees(address _address, bool state) external onlyOwner {
        excludedFromFees[_address] = state;
    }
 
    function rescueERC20(address tokenAddress, uint256 amount) external onlyOwner{
        IERC20(tokenAddress).transfer(owner(), amount);
    }
 
    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(owner()).sendValue(weiAmount);
    }
 
    // fallbacks
    receive() external payable {}
 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"staking","type":"uint64"},{"internalType":"uint64","name":"liquidity","type":"uint64"},{"internalType":"uint64","name":"lottery","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lotteryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"madeWithLoveByFreezy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"staking","type":"uint64"},{"internalType":"uint64","name":"liquidity","type":"uint64"},{"internalType":"uint64","name":"lottery","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_staking","type":"uint64"},{"internalType":"uint64","name":"_liquidity","type":"uint64"},{"internalType":"uint64","name":"_lottery","type":"uint64"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_staking","type":"uint64"},{"internalType":"uint64","name":"_liquidity","type":"uint64"},{"internalType":"uint64","name":"_lottery","type":"uint64"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLotteryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IRouter","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052690a968163f0a57b400000600855690a968163f0a57b400000600955690a968163f0a57b400000600a557327ad85d194773a7f8877c07304017a10552b3b00600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ec742efd72cc480fae32391a0a3f2b7f3652e57d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073df015503bb77a8b02b656a57aaa1401df5c3ed52600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060800160405280600267ffffffffffffffff168152602001600167ffffffffffffffff168152602001600167ffffffffffffffff168152602001600267ffffffffffffffff16815250600e60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506040518060800160405280600267ffffffffffffffff168152602001600167ffffffffffffffff168152602001600167ffffffffffffffff168152602001600267ffffffffffffffff16815250600f60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050600660105560066011553480156200035e57600080fd5b506040518060400160405280600d81526020017f546865204c75636b7920526174000000000000000000000000000000000000008152506040518060400160405280600381526020017f544c5200000000000000000000000000000000000000000000000000000000008152508160039081620003dc919062000d4e565b508060049081620003ee919062000d4e565b50505062000411620004056200087b60201b60201c565b6200088360201b60201c565b6200045133620004266200094960201b60201c565b600a62000434919062000fc5565b633b9aca0062000445919062001016565b6200095260201b60201c565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000510573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005369190620010e1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200059e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c49190620010e1565b6040518363ffffffff1660e01b8152600401620005e392919062001124565b6020604051808303816000875af115801562000603573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006299190620010e1565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200123d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011b2565b60405180910390fd5b620009d86000838362000aca60201b60201c565b8060026000828254620009ec9190620011d4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a439190620011d4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aaa919062001220565b60405180910390a362000ac66000838362000acf60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b5657607f821691505b60208210810362000b6c5762000b6b62000b0e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bd67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b97565b62000be2868362000b97565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c2f62000c2962000c238462000bfa565b62000c04565b62000bfa565b9050919050565b6000819050919050565b62000c4b8362000c0e565b62000c6362000c5a8262000c36565b84845462000ba4565b825550505050565b600090565b62000c7a62000c6b565b62000c8781848462000c40565b505050565b5b8181101562000caf5762000ca360008262000c70565b60018101905062000c8d565b5050565b601f82111562000cfe5762000cc88162000b72565b62000cd38462000b87565b8101602085101562000ce3578190505b62000cfb62000cf28562000b87565b83018262000c8c565b50505b505050565b600082821c905092915050565b600062000d236000198460080262000d03565b1980831691505092915050565b600062000d3e838362000d10565b9150826002028217905092915050565b62000d598262000ad4565b67ffffffffffffffff81111562000d755762000d7462000adf565b5b62000d81825462000b3d565b62000d8e82828562000cb3565b600060209050601f83116001811462000dc6576000841562000db1578287015190505b62000dbd858262000d30565b86555062000e2d565b601f19841662000dd68662000b72565b60005b8281101562000e005784890151825560018201915060208501945060208101905062000dd9565b8683101562000e20578489015162000e1c601f89168262000d10565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ec35780860481111562000e9b5762000e9a62000e35565b5b600185161562000eab5780820291505b808102905062000ebb8562000e64565b945062000e7b565b94509492505050565b60008262000ede576001905062000fb1565b8162000eee576000905062000fb1565b816001811462000f07576002811462000f125762000f48565b600191505062000fb1565b60ff84111562000f275762000f2662000e35565b5b8360020a91508482111562000f415762000f4062000e35565b5b5062000fb1565b5060208310610133831016604e8410600b841016171562000f825782820a90508381111562000f7c5762000f7b62000e35565b5b62000fb1565b62000f91848484600162000e71565b9250905081840481111562000fab5762000faa62000e35565b5b81810290505b9392505050565b600060ff82169050919050565b600062000fd28262000bfa565b915062000fdf8362000fb8565b92506200100e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ecc565b905092915050565b6000620010238262000bfa565b9150620010308362000bfa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200106c576200106b62000e35565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010a9826200107c565b9050919050565b620010bb816200109c565b8114620010c757600080fd5b50565b600081519050620010db81620010b0565b92915050565b600060208284031215620010fa57620010f962001077565b5b60006200110a84828501620010ca565b91505092915050565b6200111e816200109c565b82525050565b60006040820190506200113b600083018562001113565b6200114a602083018462001113565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200119a601f8362001151565b9150620011a78262001162565b602082019050919050565b60006020820190508181036000830152620011cd816200118b565b9050919050565b6000620011e18262000bfa565b9150620011ee8362000bfa565b925082820190508082111562001209576200120862000e35565b5b92915050565b6200121a8162000bfa565b82525050565b60006020820190506200123760008301846200120f565b92915050565b6141f3806200124d6000396000f3fe60806040526004361061026b5760003560e01c80638cd4426d11610144578063dbe66ca0116100b6578063edbb3b2c1161007a578063edbb3b2c1461092e578063f2fde38b14610957578063f53bc83514610980578063f66895a3146109a9578063f887ea40146109d7578063f8b45b0514610a0257610272565b8063dbe66ca014610839578063dcab514014610876578063dd62ed3e1461089f578063e01af92c146108dc578063e545fd6d1461090557610272565b80639e252f00116101085780639e252f0014610717578063a364b07714610740578063a457c2d71461076b578063a8aa1b31146107a8578063a9059cbb146107d3578063aacebbe31461081057610272565b80638cd4426d146106445780638da5cb5b1461066d57806392dbbd4e1461069857806395d89b41146106c35780639d0014b1146106ee57610272565b806346469afb116101dd57806370a08231116101a157806370a082311461054357806370db69d614610580578063715018a6146105ab57806375f0a874146105c257806381bd0881146105ed578063864701a51461061657610272565b806346469afb1461047057806353371be01461049b5780635d0044ca146104c65780635e915db9146104ef5780636ddd17131461051857610272565b806318160ddd1161022f57806318160ddd1461034c5780631bff78981461037757806323b872dd146103a2578063313ce567146103df578063395093511461040a57806340b28c2f1461044757610272565b80630445b6671461027757806306ee6ad8146102a257806306fdde03146102cd578063095ea7b3146102f8578063135548541461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a2d565b6040516102999190612c09565b60405180910390f35b3480156102ae57600080fd5b506102b7610a33565b6040516102c49190612c65565b60405180910390f35b3480156102d957600080fd5b506102e2610a59565b6040516102ef9190612d10565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190612d8f565b610aeb565b60405161032c9190612dea565b60405180910390f35b34801561034157600080fd5b5061034a610b0e565b005b34801561035857600080fd5b50610361610b4e565b60405161036e9190612c09565b60405180910390f35b34801561038357600080fd5b5061038c610b58565b6040516103999190612c09565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612e05565b610b5e565b6040516103d69190612dea565b60405180910390f35b3480156103eb57600080fd5b506103f4610b8d565b6040516104019190612e74565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612d8f565b610b96565b60405161043e9190612dea565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190612ecd565b610bcd565b005b34801561047c57600080fd5b50610485610d5b565b6040516104929190612c09565b60405180910390f35b3480156104a757600080fd5b506104b0610d61565b6040516104bd9190612dea565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612f0d565b610d74565b005b3480156104fb57600080fd5b5061051660048036038101906105119190612f3a565b610da4565b005b34801561052457600080fd5b5061052d610e48565b60405161053a9190612dea565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612f3a565b610e5b565b6040516105779190612c09565b60405180910390f35b34801561058c57600080fd5b50610595610ea3565b6040516105a29190612c09565b60405180910390f35b3480156105b757600080fd5b506105c0610ea9565b005b3480156105ce57600080fd5b506105d7610ebd565b6040516105e49190612c65565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190612fa7565b610ee3565b005b34801561062257600080fd5b5061062b61109c565b60405161063b949392919061301d565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612d8f565b61110a565b005b34801561067957600080fd5b5061068261119c565b60405161068f9190612c65565b60405180910390f35b3480156106a457600080fd5b506106ad6111c6565b6040516106ba9190612dea565b60405180910390f35b3480156106cf57600080fd5b506106d86111cf565b6040516106e59190612d10565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612f0d565b611261565b005b34801561072357600080fd5b5061073e60048036038101906107399190612f0d565b611291565b005b34801561074c57600080fd5b506107556112cc565b6040516107629190612c65565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d8f565b6112f2565b60405161079f9190612dea565b60405180910390f35b3480156107b457600080fd5b506107bd611369565b6040516107ca9190612c65565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190612d8f565b61138f565b6040516108079190612dea565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190612f3a565b6113b2565b005b34801561084557600080fd5b50610860600480360381019061085b9190612f3a565b611456565b60405161086d9190612dea565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612fa7565b611476565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613062565b61162f565b6040516108d39190612c09565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe91906130ce565b6116b6565b005b34801561091157600080fd5b5061092c600480360381019061092791906130fb565b6116db565b005b34801561093a57600080fd5b5061095560048036038101906109509190612f3a565b61173e565b005b34801561096357600080fd5b5061097e60048036038101906109799190612f3a565b6117e2565b005b34801561098c57600080fd5b506109a760048036038101906109a29190612f0d565b611865565b005b3480156109b557600080fd5b506109be611895565b6040516109ce949392919061301d565b60405180910390f35b3480156109e357600080fd5b506109ec611903565b6040516109f9919061319a565b60405180910390f35b348015610a0e57600080fd5b50610a17611929565b604051610a249190612c09565b60405180910390f35b60085481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a68906131e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906131e4565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b600080610af661192f565b9050610b03818585611937565b600191505092915050565b610b16611b00565b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff021916908315150217905550565b6000600254905090565b60105481565b600080610b6961192f565b9050610b76858285611b7e565b610b81858585611c0a565b60019150509392505050565b60006012905090565b600080610ba161192f565b9050610bc2818585610bb3858961162f565b610bbd9190613244565b611937565b600191505092915050565b610bd5611b00565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906132c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613330565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60115481565b600760169054906101000a900460ff1681565b610d7c611b00565b610d84610b8d565b600a610d909190613483565b81610d9b91906134ce565b600a8190555050565b610dac611b00565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60095481565b610eb1611b00565b610ebb600061223b565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eeb611b00565b600f81838587610efb9190613528565b610f059190613528565b610f0f9190613528565b67ffffffffffffffff161115610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906135b0565b60405180910390fd5b60405180608001604052808567ffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff16815250600e60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050808284866110729190613528565b61107c9190613528565b6110869190613528565b67ffffffffffffffff1660118190555050505050565b600e8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900467ffffffffffffffff16905084565b611112611b00565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61113661119c565b836040518363ffffffff1660e01b81526004016111549291906135d0565b6020604051808303816000875af1158015611173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611197919061360e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001905090565b6060600480546111de906131e4565b80601f016020809104026020016040519081016040528092919081815260200182805461120a906131e4565b80156112575780601f1061122c57610100808354040283529160200191611257565b820191906000526020600020905b81548152906001019060200180831161123a57829003601f168201915b5050505050905090565b611269611b00565b611271610b8d565b600a61127d9190613483565b8161128891906134ce565b60088190555050565b611299611b00565b6112c9816112a561119c565b73ffffffffffffffffffffffffffffffffffffffff1661230190919063ffffffff16565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806112fd61192f565b9050600061130b828661162f565b905083811015611350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611347906136ad565b60405180910390fd5b61135d8286868403611937565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061139a61192f565b90506113a7818585611c0a565b600191505092915050565b6113ba611b00565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b61147e611b00565b600f8183858761148e9190613528565b6114989190613528565b6114a29190613528565b67ffffffffffffffff1611156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e4906135b0565b60405180910390fd5b60405180608001604052808567ffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff16815250600f60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050808284866116059190613528565b61160f9190613528565b6116199190613528565b67ffffffffffffffff1660108190555050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116be611b00565b80600760156101000a81548160ff02191690831515021790555050565b6116e3611b00565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611746611b00565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117ea611b00565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061373f565b60405180910390fd5b6118628161223b565b50565b61186d611b00565b611875610b8d565b600a6118819190613483565b8161188c91906134ce565b60098190555050565b600f8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900467ffffffffffffffff16905084565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d906137d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90613863565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af39190612c09565b60405180910390a3505050565b611b0861192f565b73ffffffffffffffffffffffffffffffffffffffff16611b2661119c565b73ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b73906138cf565b60405180910390fd5b565b6000611b8a848461162f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c045781811015611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061393b565b60405180910390fd5b611c038484848403611937565b5b50505050565b60008111611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906139cd565b60405180910390fd5b600760169054906101000a900460ff1680611cb15750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d055750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90613a39565b60405180910390fd5b600760149054906101000a900460ff1680611da85750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611dfc5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e1157611e0c8383836123f5565b612236565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ebf57600a5481611e7384610e5b565b611e7d9190613244565b1115611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613aa5565b60405180910390fd5b5b6000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611fb457606460105485611f2991906134ce565b611f339190613af4565b92506064600f60000160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1685611f6691906134ce565b611f709190613af4565b91506064600f60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1685611fa391906134ce565b611fad9190613af4565b90506120e6565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120e55760095484111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613b71565b60405180910390fd5b60646011548561205e91906134ce565b6120689190613af4565b92506064600e60000160189054906101000a900467ffffffffffffffff1667ffffffffffffffff168561209b91906134ce565b6120a59190613af4565b91506064600e60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16856120d891906134ce565b6120e29190613af4565b90505b5b600760159054906101000a900460ff16801561210f5750600760149054906101000a900460ff16155b80156121695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156121755750600083115b1561218357612182612674565b5b612199868685876121949190613b91565b6123f5565b60008311156121c4576121c386308385876121b49190613b91565b6121be9190613b91565b6123f5565b5b60008211156121fb576121fa86600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123f5565b5b60008111156122325761223186600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123f5565b5b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80471015612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90613c11565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161236a90613c62565b60006040518083038185875af1925050503d80600081146123a7576040519150601f19603f3d011682016040523d82523d6000602084013e6123ac565b606091505b50509050806123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613ce9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90613d7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90613e0d565b60405180910390fd5b6124de8383836128be565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613e9f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f79190613244565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161265b9190612c09565b60405180910390a361266e8484846128c3565b50505050565b600760149054906101000a900460ff166128bc576001600760146101000a81548160ff02191690831515021790555060006126ae30610e5b565b9050600854811061289f5760006002600f60000160009054906101000a900467ffffffffffffffff16600f60000160109054906101000a900467ffffffffffffffff166126fb9190613528565b6127059190613ebf565b67ffffffffffffffff169050600081600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff168461274391906134ce565b61274d9190613af4565b90506000818461275d9190613b91565b9050600047905061276d826128c8565b6000814761277b9190613b91565b90506000600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16866127ae9190613b91565b826127b99190613af4565b90506000600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16826127ec91906134ce565b90506000811115612802576128018682612b0b565b5b6000600f60000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1660028461283591906134ce565b61283f91906134ce565b905060008111156128965761289581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661230190919063ffffffff16565b5b50505050505050505b506000600760146101000a81548160ff0219169083151502179055505b565b505050565b505050565b6000600267ffffffffffffffff8111156128e5576128e4613f01565b5b6040519080825280602002602001820160405280156129135781602001602082028036833780820191505090505b509050308160008151811061292b5761292a613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f69190613f74565b81600181518110612a0a57612a09613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611937565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad595949392919061409a565b600060405180830381600087803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b505050505050565b612b3830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611937565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b8461119c565b426040518863ffffffff1660e01b8152600401612ba6969594939291906140f4565b60606040518083038185885af1158015612bc4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612be9919061416a565b5050505050565b6000819050919050565b612c0381612bf0565b82525050565b6000602082019050612c1e6000830184612bfa565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b82525050565b6000602082019050612c7a6000830184612c56565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cba578082015181840152602081019050612c9f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce282612c80565b612cec8185612c8b565b9350612cfc818560208601612c9c565b612d0581612cc6565b840191505092915050565b60006020820190508181036000830152612d2a8184612cd7565b905092915050565b600080fd5b612d4081612c44565b8114612d4b57600080fd5b50565b600081359050612d5d81612d37565b92915050565b612d6c81612bf0565b8114612d7757600080fd5b50565b600081359050612d8981612d63565b92915050565b60008060408385031215612da657612da5612d32565b5b6000612db485828601612d4e565b9250506020612dc585828601612d7a565b9150509250929050565b60008115159050919050565b612de481612dcf565b82525050565b6000602082019050612dff6000830184612ddb565b92915050565b600080600060608486031215612e1e57612e1d612d32565b5b6000612e2c86828701612d4e565b9350506020612e3d86828701612d4e565b9250506040612e4e86828701612d7a565b9150509250925092565b600060ff82169050919050565b612e6e81612e58565b82525050565b6000602082019050612e896000830184612e65565b92915050565b6000612e9a82612c44565b9050919050565b612eaa81612e8f565b8114612eb557600080fd5b50565b600081359050612ec781612ea1565b92915050565b60008060408385031215612ee457612ee3612d32565b5b6000612ef285828601612eb8565b9250506020612f0385828601612d4e565b9150509250929050565b600060208284031215612f2357612f22612d32565b5b6000612f3184828501612d7a565b91505092915050565b600060208284031215612f5057612f4f612d32565b5b6000612f5e84828501612d4e565b91505092915050565b600067ffffffffffffffff82169050919050565b612f8481612f67565b8114612f8f57600080fd5b50565b600081359050612fa181612f7b565b92915050565b60008060008060808587031215612fc157612fc0612d32565b5b6000612fcf87828801612f92565b9450506020612fe087828801612f92565b9350506040612ff187828801612f92565b925050606061300287828801612f92565b91505092959194509250565b61301781612f67565b82525050565b6000608082019050613032600083018761300e565b61303f602083018661300e565b61304c604083018561300e565b613059606083018461300e565b95945050505050565b6000806040838503121561307957613078612d32565b5b600061308785828601612d4e565b925050602061309885828601612d4e565b9150509250929050565b6130ab81612dcf565b81146130b657600080fd5b50565b6000813590506130c8816130a2565b92915050565b6000602082840312156130e4576130e3612d32565b5b60006130f2848285016130b9565b91505092915050565b6000806040838503121561311257613111612d32565b5b600061312085828601612d4e565b9250506020613131858286016130b9565b9150509250929050565b6000819050919050565b600061316061315b61315684612c24565b61313b565b612c24565b9050919050565b600061317282613145565b9050919050565b600061318482613167565b9050919050565b61319481613179565b82525050565b60006020820190506131af600083018461318b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131fc57607f821691505b60208210810361320f5761320e6131b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324f82612bf0565b915061325a83612bf0565b925082820190508082111561327257613271613215565b5b92915050565b7f526f757465722063616e6e6f74206265207a65726f0000000000000000000000600082015250565b60006132ae601583612c8b565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f506169722063616e6e6f74206265207a65726f00000000000000000000000000600082015250565b600061331a601383612c8b565b9150613325826132e4565b602082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156133a75780860481111561338357613382613215565b5b60018516156133925780820291505b80810290506133a085613350565b9450613367565b94509492505050565b6000826133c0576001905061347c565b816133ce576000905061347c565b81600181146133e457600281146133ee5761341d565b600191505061347c565b60ff841115613400576133ff613215565b5b8360020a91508482111561341757613416613215565b5b5061347c565b5060208310610133831016604e8410600b84101617156134525782820a90508381111561344d5761344c613215565b5b61347c565b61345f848484600161335d565b9250905081840481111561347657613475613215565b5b81810290505b9392505050565b600061348e82612bf0565b915061349983612e58565b92506134c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846133b0565b905092915050565b60006134d982612bf0565b91506134e483612bf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561351d5761351c613215565b5b828202905092915050565b600061353382612f67565b915061353e83612f67565b9250828201905067ffffffffffffffff81111561355e5761355d613215565b5b92915050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b600061359a600d83612c8b565b91506135a582613564565b602082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b60006040820190506135e56000830185612c56565b6135f26020830184612bfa565b9392505050565b600081519050613608816130a2565b92915050565b60006020828403121561362457613623612d32565b5b6000613632848285016135f9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613697602583612c8b565b91506136a28261363b565b604082019050919050565b600060208201905081810360008301526136c68161368a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613729602683612c8b565b9150613734826136cd565b604082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137bb602483612c8b565b91506137c68261375f565b604082019050919050565b600060208201905081810360008301526137ea816137ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061384d602283612c8b565b9150613858826137f1565b604082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b9602083612c8b565b91506138c482613883565b602082019050919050565b600060208201905081810360008301526138e8816138ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613925601d83612c8b565b9150613930826138ef565b602082019050919050565b6000602082019050818103600083015261395481613918565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006139b7602983612c8b565b91506139c28261395b565b604082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f54726164696e672064697361626c656400000000000000000000000000000000600082015250565b6000613a23601083612c8b565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65740000000000600082015250565b6000613a8f601b83612c8b565b9150613a9a82613a59565b602082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aff82612bf0565b9150613b0a83612bf0565b925082613b1a57613b19613ac5565b5b828204905092915050565b7f596f752061726520657863656564696e67206d61784275790000000000000000600082015250565b6000613b5b601883612c8b565b9150613b6682613b25565b602082019050919050565b60006020820190508181036000830152613b8a81613b4e565b9050919050565b6000613b9c82612bf0565b9150613ba783612bf0565b9250828203905081811115613bbf57613bbe613215565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613bfb601d83612c8b565b9150613c0682613bc5565b602082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b600081905092915050565b50565b6000613c4c600083613c31565b9150613c5782613c3c565b600082019050919050565b6000613c6d82613c3f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613cd3603a83612c8b565b9150613cde82613c77565b604082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d65602583612c8b565b9150613d7082613d09565b604082019050919050565b60006020820190508181036000830152613d9481613d58565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613df7602383612c8b565b9150613e0282613d9b565b604082019050919050565b60006020820190508181036000830152613e2681613dea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613e89602683612c8b565b9150613e9482613e2d565b604082019050919050565b60006020820190508181036000830152613eb881613e7c565b9050919050565b6000613eca82612f67565b9150613ed583612f67565b92508167ffffffffffffffff0483118215151615613ef657613ef5613215565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f6e81612d37565b92915050565b600060208284031215613f8a57613f89612d32565b5b6000613f9884828501613f5f565b91505092915050565b6000819050919050565b6000613fc6613fc1613fbc84613fa1565b61313b565b612bf0565b9050919050565b613fd681613fab565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61401181612c44565b82525050565b60006140238383614008565b60208301905092915050565b6000602082019050919050565b600061404782613fdc565b6140518185613fe7565b935061405c83613ff8565b8060005b8381101561408d5781516140748882614017565b975061407f8361402f565b925050600181019050614060565b5085935050505092915050565b600060a0820190506140af6000830188612bfa565b6140bc6020830187613fcd565b81810360408301526140ce818661403c565b90506140dd6060830185612c56565b6140ea6080830184612bfa565b9695505050505050565b600060c0820190506141096000830189612c56565b6141166020830188612bfa565b6141236040830187613fcd565b6141306060830186613fcd565b61413d6080830185612c56565b61414a60a0830184612bfa565b979650505050505050565b60008151905061416481612d63565b92915050565b60008060006060848603121561418357614182612d32565b5b600061419186828701614155565b93505060206141a286828701614155565b92505060406141b386828701614155565b915050925092509256fea2646970667358221220d395cff9bbaafb8aaa9cc4a8895c1c5db847eb6e247eebe37da0a224a3e4e10164736f6c63430008100033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80638cd4426d11610144578063dbe66ca0116100b6578063edbb3b2c1161007a578063edbb3b2c1461092e578063f2fde38b14610957578063f53bc83514610980578063f66895a3146109a9578063f887ea40146109d7578063f8b45b0514610a0257610272565b8063dbe66ca014610839578063dcab514014610876578063dd62ed3e1461089f578063e01af92c146108dc578063e545fd6d1461090557610272565b80639e252f00116101085780639e252f0014610717578063a364b07714610740578063a457c2d71461076b578063a8aa1b31146107a8578063a9059cbb146107d3578063aacebbe31461081057610272565b80638cd4426d146106445780638da5cb5b1461066d57806392dbbd4e1461069857806395d89b41146106c35780639d0014b1146106ee57610272565b806346469afb116101dd57806370a08231116101a157806370a082311461054357806370db69d614610580578063715018a6146105ab57806375f0a874146105c257806381bd0881146105ed578063864701a51461061657610272565b806346469afb1461047057806353371be01461049b5780635d0044ca146104c65780635e915db9146104ef5780636ddd17131461051857610272565b806318160ddd1161022f57806318160ddd1461034c5780631bff78981461037757806323b872dd146103a2578063313ce567146103df578063395093511461040a57806340b28c2f1461044757610272565b80630445b6671461027757806306ee6ad8146102a257806306fdde03146102cd578063095ea7b3146102f8578063135548541461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a2d565b6040516102999190612c09565b60405180910390f35b3480156102ae57600080fd5b506102b7610a33565b6040516102c49190612c65565b60405180910390f35b3480156102d957600080fd5b506102e2610a59565b6040516102ef9190612d10565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190612d8f565b610aeb565b60405161032c9190612dea565b60405180910390f35b34801561034157600080fd5b5061034a610b0e565b005b34801561035857600080fd5b50610361610b4e565b60405161036e9190612c09565b60405180910390f35b34801561038357600080fd5b5061038c610b58565b6040516103999190612c09565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612e05565b610b5e565b6040516103d69190612dea565b60405180910390f35b3480156103eb57600080fd5b506103f4610b8d565b6040516104019190612e74565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612d8f565b610b96565b60405161043e9190612dea565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190612ecd565b610bcd565b005b34801561047c57600080fd5b50610485610d5b565b6040516104929190612c09565b60405180910390f35b3480156104a757600080fd5b506104b0610d61565b6040516104bd9190612dea565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612f0d565b610d74565b005b3480156104fb57600080fd5b5061051660048036038101906105119190612f3a565b610da4565b005b34801561052457600080fd5b5061052d610e48565b60405161053a9190612dea565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612f3a565b610e5b565b6040516105779190612c09565b60405180910390f35b34801561058c57600080fd5b50610595610ea3565b6040516105a29190612c09565b60405180910390f35b3480156105b757600080fd5b506105c0610ea9565b005b3480156105ce57600080fd5b506105d7610ebd565b6040516105e49190612c65565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190612fa7565b610ee3565b005b34801561062257600080fd5b5061062b61109c565b60405161063b949392919061301d565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612d8f565b61110a565b005b34801561067957600080fd5b5061068261119c565b60405161068f9190612c65565b60405180910390f35b3480156106a457600080fd5b506106ad6111c6565b6040516106ba9190612dea565b60405180910390f35b3480156106cf57600080fd5b506106d86111cf565b6040516106e59190612d10565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612f0d565b611261565b005b34801561072357600080fd5b5061073e60048036038101906107399190612f0d565b611291565b005b34801561074c57600080fd5b506107556112cc565b6040516107629190612c65565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d8f565b6112f2565b60405161079f9190612dea565b60405180910390f35b3480156107b457600080fd5b506107bd611369565b6040516107ca9190612c65565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190612d8f565b61138f565b6040516108079190612dea565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190612f3a565b6113b2565b005b34801561084557600080fd5b50610860600480360381019061085b9190612f3a565b611456565b60405161086d9190612dea565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612fa7565b611476565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613062565b61162f565b6040516108d39190612c09565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe91906130ce565b6116b6565b005b34801561091157600080fd5b5061092c600480360381019061092791906130fb565b6116db565b005b34801561093a57600080fd5b5061095560048036038101906109509190612f3a565b61173e565b005b34801561096357600080fd5b5061097e60048036038101906109799190612f3a565b6117e2565b005b34801561098c57600080fd5b506109a760048036038101906109a29190612f0d565b611865565b005b3480156109b557600080fd5b506109be611895565b6040516109ce949392919061301d565b60405180910390f35b3480156109e357600080fd5b506109ec611903565b6040516109f9919061319a565b60405180910390f35b348015610a0e57600080fd5b50610a17611929565b604051610a249190612c09565b60405180910390f35b60085481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a68906131e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906131e4565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b600080610af661192f565b9050610b03818585611937565b600191505092915050565b610b16611b00565b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff021916908315150217905550565b6000600254905090565b60105481565b600080610b6961192f565b9050610b76858285611b7e565b610b81858585611c0a565b60019150509392505050565b60006012905090565b600080610ba161192f565b9050610bc2818585610bb3858961162f565b610bbd9190613244565b611937565b600191505092915050565b610bd5611b00565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906132c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613330565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60115481565b600760169054906101000a900460ff1681565b610d7c611b00565b610d84610b8d565b600a610d909190613483565b81610d9b91906134ce565b600a8190555050565b610dac611b00565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60095481565b610eb1611b00565b610ebb600061223b565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eeb611b00565b600f81838587610efb9190613528565b610f059190613528565b610f0f9190613528565b67ffffffffffffffff161115610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906135b0565b60405180910390fd5b60405180608001604052808567ffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff16815250600e60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050808284866110729190613528565b61107c9190613528565b6110869190613528565b67ffffffffffffffff1660118190555050505050565b600e8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900467ffffffffffffffff16905084565b611112611b00565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61113661119c565b836040518363ffffffff1660e01b81526004016111549291906135d0565b6020604051808303816000875af1158015611173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611197919061360e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001905090565b6060600480546111de906131e4565b80601f016020809104026020016040519081016040528092919081815260200182805461120a906131e4565b80156112575780601f1061122c57610100808354040283529160200191611257565b820191906000526020600020905b81548152906001019060200180831161123a57829003601f168201915b5050505050905090565b611269611b00565b611271610b8d565b600a61127d9190613483565b8161128891906134ce565b60088190555050565b611299611b00565b6112c9816112a561119c565b73ffffffffffffffffffffffffffffffffffffffff1661230190919063ffffffff16565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806112fd61192f565b9050600061130b828661162f565b905083811015611350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611347906136ad565b60405180910390fd5b61135d8286868403611937565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061139a61192f565b90506113a7818585611c0a565b600191505092915050565b6113ba611b00565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b61147e611b00565b600f8183858761148e9190613528565b6114989190613528565b6114a29190613528565b67ffffffffffffffff1611156114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e4906135b0565b60405180910390fd5b60405180608001604052808567ffffffffffffffff1681526020018467ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff16815250600f60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050808284866116059190613528565b61160f9190613528565b6116199190613528565b67ffffffffffffffff1660108190555050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116be611b00565b80600760156101000a81548160ff02191690831515021790555050565b6116e3611b00565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611746611b00565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117ea611b00565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118509061373f565b60405180910390fd5b6118628161223b565b50565b61186d611b00565b611875610b8d565b600a6118819190613483565b8161188c91906134ce565b60098190555050565b600f8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900467ffffffffffffffff16905084565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d906137d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90613863565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af39190612c09565b60405180910390a3505050565b611b0861192f565b73ffffffffffffffffffffffffffffffffffffffff16611b2661119c565b73ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b73906138cf565b60405180910390fd5b565b6000611b8a848461162f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c045781811015611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061393b565b60405180910390fd5b611c038484848403611937565b5b50505050565b60008111611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906139cd565b60405180910390fd5b600760169054906101000a900460ff1680611cb15750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611d055750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90613a39565b60405180910390fd5b600760149054906101000a900460ff1680611da85750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611dfc5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e1157611e0c8383836123f5565b612236565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ebf57600a5481611e7384610e5b565b611e7d9190613244565b1115611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613aa5565b60405180910390fd5b5b6000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611fb457606460105485611f2991906134ce565b611f339190613af4565b92506064600f60000160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1685611f6691906134ce565b611f709190613af4565b91506064600f60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1685611fa391906134ce565b611fad9190613af4565b90506120e6565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120e55760095484111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613b71565b60405180910390fd5b60646011548561205e91906134ce565b6120689190613af4565b92506064600e60000160189054906101000a900467ffffffffffffffff1667ffffffffffffffff168561209b91906134ce565b6120a59190613af4565b91506064600e60000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16856120d891906134ce565b6120e29190613af4565b90505b5b600760159054906101000a900460ff16801561210f5750600760149054906101000a900460ff16155b80156121695750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156121755750600083115b1561218357612182612674565b5b612199868685876121949190613b91565b6123f5565b60008311156121c4576121c386308385876121b49190613b91565b6121be9190613b91565b6123f5565b5b60008211156121fb576121fa86600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123f5565b5b60008111156122325761223186600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123f5565b5b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80471015612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90613c11565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161236a90613c62565b60006040518083038185875af1925050503d80600081146123a7576040519150601f19603f3d011682016040523d82523d6000602084013e6123ac565b606091505b50509050806123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613ce9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90613d7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90613e0d565b60405180910390fd5b6124de8383836128be565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613e9f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f79190613244565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161265b9190612c09565b60405180910390a361266e8484846128c3565b50505050565b600760149054906101000a900460ff166128bc576001600760146101000a81548160ff02191690831515021790555060006126ae30610e5b565b9050600854811061289f5760006002600f60000160009054906101000a900467ffffffffffffffff16600f60000160109054906101000a900467ffffffffffffffff166126fb9190613528565b6127059190613ebf565b67ffffffffffffffff169050600081600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff168461274391906134ce565b61274d9190613af4565b90506000818461275d9190613b91565b9050600047905061276d826128c8565b6000814761277b9190613b91565b90506000600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16866127ae9190613b91565b826127b99190613af4565b90506000600f60000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16826127ec91906134ce565b90506000811115612802576128018682612b0b565b5b6000600f60000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1660028461283591906134ce565b61283f91906134ce565b905060008111156128965761289581600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661230190919063ffffffff16565b5b50505050505050505b506000600760146101000a81548160ff0219169083151502179055505b565b505050565b505050565b6000600267ffffffffffffffff8111156128e5576128e4613f01565b5b6040519080825280602002602001820160405280156129135781602001602082028036833780820191505090505b509050308160008151811061292b5761292a613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f69190613f74565b81600181518110612a0a57612a09613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611937565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad595949392919061409a565b600060405180830381600087803b158015612aef57600080fd5b505af1158015612b03573d6000803e3d6000fd5b505050505050565b612b3830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611937565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b8461119c565b426040518863ffffffff1660e01b8152600401612ba6969594939291906140f4565b60606040518083038185885af1158015612bc4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612be9919061416a565b5050505050565b6000819050919050565b612c0381612bf0565b82525050565b6000602082019050612c1e6000830184612bfa565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b82525050565b6000602082019050612c7a6000830184612c56565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cba578082015181840152602081019050612c9f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce282612c80565b612cec8185612c8b565b9350612cfc818560208601612c9c565b612d0581612cc6565b840191505092915050565b60006020820190508181036000830152612d2a8184612cd7565b905092915050565b600080fd5b612d4081612c44565b8114612d4b57600080fd5b50565b600081359050612d5d81612d37565b92915050565b612d6c81612bf0565b8114612d7757600080fd5b50565b600081359050612d8981612d63565b92915050565b60008060408385031215612da657612da5612d32565b5b6000612db485828601612d4e565b9250506020612dc585828601612d7a565b9150509250929050565b60008115159050919050565b612de481612dcf565b82525050565b6000602082019050612dff6000830184612ddb565b92915050565b600080600060608486031215612e1e57612e1d612d32565b5b6000612e2c86828701612d4e565b9350506020612e3d86828701612d4e565b9250506040612e4e86828701612d7a565b9150509250925092565b600060ff82169050919050565b612e6e81612e58565b82525050565b6000602082019050612e896000830184612e65565b92915050565b6000612e9a82612c44565b9050919050565b612eaa81612e8f565b8114612eb557600080fd5b50565b600081359050612ec781612ea1565b92915050565b60008060408385031215612ee457612ee3612d32565b5b6000612ef285828601612eb8565b9250506020612f0385828601612d4e565b9150509250929050565b600060208284031215612f2357612f22612d32565b5b6000612f3184828501612d7a565b91505092915050565b600060208284031215612f5057612f4f612d32565b5b6000612f5e84828501612d4e565b91505092915050565b600067ffffffffffffffff82169050919050565b612f8481612f67565b8114612f8f57600080fd5b50565b600081359050612fa181612f7b565b92915050565b60008060008060808587031215612fc157612fc0612d32565b5b6000612fcf87828801612f92565b9450506020612fe087828801612f92565b9350506040612ff187828801612f92565b925050606061300287828801612f92565b91505092959194509250565b61301781612f67565b82525050565b6000608082019050613032600083018761300e565b61303f602083018661300e565b61304c604083018561300e565b613059606083018461300e565b95945050505050565b6000806040838503121561307957613078612d32565b5b600061308785828601612d4e565b925050602061309885828601612d4e565b9150509250929050565b6130ab81612dcf565b81146130b657600080fd5b50565b6000813590506130c8816130a2565b92915050565b6000602082840312156130e4576130e3612d32565b5b60006130f2848285016130b9565b91505092915050565b6000806040838503121561311257613111612d32565b5b600061312085828601612d4e565b9250506020613131858286016130b9565b9150509250929050565b6000819050919050565b600061316061315b61315684612c24565b61313b565b612c24565b9050919050565b600061317282613145565b9050919050565b600061318482613167565b9050919050565b61319481613179565b82525050565b60006020820190506131af600083018461318b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131fc57607f821691505b60208210810361320f5761320e6131b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324f82612bf0565b915061325a83612bf0565b925082820190508082111561327257613271613215565b5b92915050565b7f526f757465722063616e6e6f74206265207a65726f0000000000000000000000600082015250565b60006132ae601583612c8b565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f506169722063616e6e6f74206265207a65726f00000000000000000000000000600082015250565b600061331a601383612c8b565b9150613325826132e4565b602082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156133a75780860481111561338357613382613215565b5b60018516156133925780820291505b80810290506133a085613350565b9450613367565b94509492505050565b6000826133c0576001905061347c565b816133ce576000905061347c565b81600181146133e457600281146133ee5761341d565b600191505061347c565b60ff841115613400576133ff613215565b5b8360020a91508482111561341757613416613215565b5b5061347c565b5060208310610133831016604e8410600b84101617156134525782820a90508381111561344d5761344c613215565b5b61347c565b61345f848484600161335d565b9250905081840481111561347657613475613215565b5b81810290505b9392505050565b600061348e82612bf0565b915061349983612e58565b92506134c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846133b0565b905092915050565b60006134d982612bf0565b91506134e483612bf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561351d5761351c613215565b5b828202905092915050565b600061353382612f67565b915061353e83612f67565b9250828201905067ffffffffffffffff81111561355e5761355d613215565b5b92915050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b600061359a600d83612c8b565b91506135a582613564565b602082019050919050565b600060208201905081810360008301526135c98161358d565b9050919050565b60006040820190506135e56000830185612c56565b6135f26020830184612bfa565b9392505050565b600081519050613608816130a2565b92915050565b60006020828403121561362457613623612d32565b5b6000613632848285016135f9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613697602583612c8b565b91506136a28261363b565b604082019050919050565b600060208201905081810360008301526136c68161368a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613729602683612c8b565b9150613734826136cd565b604082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137bb602483612c8b565b91506137c68261375f565b604082019050919050565b600060208201905081810360008301526137ea816137ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061384d602283612c8b565b9150613858826137f1565b604082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b9602083612c8b565b91506138c482613883565b602082019050919050565b600060208201905081810360008301526138e8816138ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613925601d83612c8b565b9150613930826138ef565b602082019050919050565b6000602082019050818103600083015261395481613918565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006139b7602983612c8b565b91506139c28261395b565b604082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f54726164696e672064697361626c656400000000000000000000000000000000600082015250565b6000613a23601083612c8b565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65740000000000600082015250565b6000613a8f601b83612c8b565b9150613a9a82613a59565b602082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aff82612bf0565b9150613b0a83612bf0565b925082613b1a57613b19613ac5565b5b828204905092915050565b7f596f752061726520657863656564696e67206d61784275790000000000000000600082015250565b6000613b5b601883612c8b565b9150613b6682613b25565b602082019050919050565b60006020820190508181036000830152613b8a81613b4e565b9050919050565b6000613b9c82612bf0565b9150613ba783612bf0565b9250828203905081811115613bbf57613bbe613215565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613bfb601d83612c8b565b9150613c0682613bc5565b602082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b600081905092915050565b50565b6000613c4c600083613c31565b9150613c5782613c3c565b600082019050919050565b6000613c6d82613c3f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613cd3603a83612c8b565b9150613cde82613c77565b604082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d65602583612c8b565b9150613d7082613d09565b604082019050919050565b60006020820190508181036000830152613d9481613d58565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613df7602383612c8b565b9150613e0282613d9b565b604082019050919050565b60006020820190508181036000830152613e2681613dea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613e89602683612c8b565b9150613e9482613e2d565b604082019050919050565b60006020820190508181036000830152613eb881613e7c565b9050919050565b6000613eca82612f67565b9150613ed583612f67565b92508167ffffffffffffffff0483118215151615613ef657613ef5613215565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f6e81612d37565b92915050565b600060208284031215613f8a57613f89612d32565b5b6000613f9884828501613f5f565b91505092915050565b6000819050919050565b6000613fc6613fc1613fbc84613fa1565b61313b565b612bf0565b9050919050565b613fd681613fab565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61401181612c44565b82525050565b60006140238383614008565b60208301905092915050565b6000602082019050919050565b600061404782613fdc565b6140518185613fe7565b935061405c83613ff8565b8060005b8381101561408d5781516140748882614017565b975061407f8361402f565b925050600181019050614060565b5085935050505092915050565b600060a0820190506140af6000830188612bfa565b6140bc6020830187613fcd565b81810360408301526140ce818661403c565b90506140dd6060830185612c56565b6140ea6080830184612bfa565b9695505050505050565b600060c0820190506141096000830189612c56565b6141166020830188612bfa565b6141236040830187613fcd565b6141306060830186613fcd565b61413d6080830185612c56565b61414a60a0830184612bfa565b979650505050505050565b60008151905061416481612d63565b92915050565b60008060006060848603121561418357614182612d32565b5b600061419186828701614155565b93505060206141a286828701614155565b92505060406141b386828701614155565b915050925092509256fea2646970667358221220d395cff9bbaafb8aaa9cc4a8895c1c5db847eb6e247eebe37da0a224a3e4e10164736f6c63430008100033

Deployed Bytecode Sourcemap

29526:8260:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29765:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29998:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15206:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17557:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36290:115;;;;;;;;;;;;;:::i;:::-;;16326:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30392:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18338:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16168:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19042:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37008:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30430:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29729:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35454:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36844:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29699:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16497:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29818:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27875:103;;;;;;;;;;;;;:::i;:::-;;29916:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35573:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30298:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37461:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27227:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36414:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35205:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37612:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30078:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19783:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29642:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16830:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36512:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30470:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35930:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17086:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35103:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37318:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36680:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28133:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35341:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30343:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29614:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29864:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29765:46;;;;:::o;29998:73::-;;;;;;;;;;;;;:::o;15206:100::-;15260:13;15293:5;15286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15206:100;:::o;17557:201::-;17640:4;17657:13;17673:12;:10;:12::i;:::-;17657:28;;17696:32;17705:5;17712:7;17721:6;17696:8;:32::i;:::-;17746:4;17739:11;;;17557:201;;;;:::o;36290:115::-;27113:13;:11;:13::i;:::-;36364:4:::1;36347:14;;:21;;;;;;;;;;;;;;;;;;36393:4;36379:11;;:18;;;;;;;;;;;;;;;;;;36290:115::o:0;16326:108::-;16387:7;16414:12;;16407:19;;16326:108;:::o;30392:31::-;;;;:::o;18338:295::-;18469:4;18486:15;18504:12;:10;:12::i;:::-;18486:30;;18527:38;18543:4;18549:7;18558:6;18527:15;:38::i;:::-;18576:27;18586:4;18592:2;18596:6;18576:9;:27::i;:::-;18621:4;18614:11;;;18338:295;;;;;:::o;16168:93::-;16226:5;16251:2;16244:9;;16168:93;:::o;19042:238::-;19130:4;19147:13;19163:12;:10;:12::i;:::-;19147:28;;19186:64;19195:5;19202:7;19239:10;19211:25;19221:5;19228:7;19211:9;:25::i;:::-;:38;;;;:::i;:::-;19186:8;:64::i;:::-;19268:4;19261:11;;;19042:238;;;;:::o;37008:301::-;27113:13;:11;:13::i;:::-;37162:1:::1;37134:30;;37142:7;37134:30;;::::0;37126:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37225:1;37209:18;;:4;;;;;;;;;;;:18;;::::0;37201:50:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37271:7;37262:6;;:16;;;;;;;;;;;;;;;;;;37296:5;37289:4;;:12;;;;;;;;;;;;;;;;;;37008:301:::0;;:::o;30430:30::-;;;;:::o;29729:26::-;;;;;;;;;;;;;:::o;35454:110::-;27113:13;:11;:13::i;:::-;35546:10:::1;:8;:10::i;:::-;35542:2;:14;;;;:::i;:::-;35533:6;:23;;;;:::i;:::-;35521:9;:35;;;;35454:110:::0;:::o;36844:155::-;27113:13;:11;:13::i;:::-;36937:9:::1;36921:13;;:25;;;;;;;;;;;;;;;;;;36987:4;36957:16;:27;36974:9;36957:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36844:155:::0;:::o;29699:23::-;;;;;;;;;;;;;:::o;16497:127::-;16571:7;16598:9;:18;16608:7;16598:18;;;;;;;;;;;;;;;;16591:25;;16497:127;;;:::o;29818:39::-;;;;:::o;27875:103::-;27113:13;:11;:13::i;:::-;27940:30:::1;27967:1;27940:18;:30::i;:::-;27875:103::o:0;29916:75::-;;;;;;;;;;;;;:::o;35573:348::-;27113:13;:11;:13::i;:::-;35752:2:::1;35740:8;35727:10;35716:8;35703:10;:21;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;:51;;;;35695:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;35794:49;;;;;;;;35800:10;35794:49;;;;;;35812:8;35794:49;;;;;;35822:10;35794:49;;;;;;35834:8;35794:49;;;;::::0;35783:8:::1;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35905:8;35892:10;35881:8;35868:10;:21;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;35854:59;;:11;:59;;;;35573:348:::0;;;;:::o;30298:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37461:142::-;27113:13;:11;:13::i;:::-;37556:12:::1;37549:29;;;37579:7;:5;:7::i;:::-;37588:6;37549:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37461:142:::0;;:::o;27227:87::-;27273:7;27300:6;;;;;;;;;;;27293:13;;27227:87;:::o;36414:89::-;36468:4;36491;36484:11;;36414:89;:::o;15425:104::-;15481:13;15514:7;15507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15425:104;:::o;35205:127::-;27113:13;:11;:13::i;:::-;35314:10:::1;:8;:10::i;:::-;35310:2;:14;;;;:::i;:::-;35297:10;:27;;;;:::i;:::-;35281:13;:43;;;;35205:127:::0;:::o;37612:112::-;27113:13;:11;:13::i;:::-;37679:37:::1;37706:9;37687:7;:5;:7::i;:::-;37679:26;;;;:37;;;;:::i;:::-;37612:112:::0;:::o;30078:73::-;;;;;;;;;;;;;:::o;19783:436::-;19876:4;19893:13;19909:12;:10;:12::i;:::-;19893:28;;19932:24;19959:25;19969:5;19976:7;19959:9;:25::i;:::-;19932:52;;20023:15;20003:16;:35;;19995:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20116:60;20125:5;20132:7;20160:15;20141:16;:34;20116:8;:60::i;:::-;20207:4;20200:11;;;;19783:436;;;;:::o;29642:19::-;;;;;;;;;;;;;:::o;16830:193::-;16909:4;16926:13;16942:12;:10;:12::i;:::-;16926:28;;16965;16975:5;16982:2;16986:6;16965:9;:28::i;:::-;17011:4;17004:11;;;16830:193;;;;:::o;36512:159::-;27113:13;:11;:13::i;:::-;36609:9:::1;36591:15;;:27;;;;;;;;;;;;;;;;;;36659:4;36629:16;:27;36646:9;36629:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36512:159:::0;:::o;30470:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;35930:351::-;27113:13;:11;:13::i;:::-;36110:2:::1;36098:8;36085:10;36074:8;36061:10;:21;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;:51;;;;36053:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36153:49;;;;;;;;36159:10;36153:49;;;;;;36171:8;36153:49;;;;;;36181:10;36153:49;;;;;;36193:8;36153:49;;;;::::0;36141:9:::1;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36265:8;36252:10;36241:8;36228:10;:21;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;36213:60;;:12;:60;;;;35930:351:::0;;;;:::o;17086:151::-;17175:7;17202:11;:18;17214:5;17202:18;;;;;;;;;;;;;;;:27;17221:7;17202:27;;;;;;;;;;;;;;;;17195:34;;17086:151;;;;:::o;35103:93::-;27113:13;:11;:13::i;:::-;35183:5:::1;35169:11;;:19;;;;;;;;;;;;;;;;;;35103:93:::0;:::o;37318:134::-;27113:13;:11;:13::i;:::-;37439:5:::1;37410:16;:26;37427:8;37410:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;37318:134:::0;;:::o;36680:155::-;27113:13;:11;:13::i;:::-;36773:9:::1;36757:13;;:25;;;;;;;;;;;;;;;;;;36823:4;36793:16;:27;36810:9;36793:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36680:155:::0;:::o;28133:201::-;27113:13;:11;:13::i;:::-;28242:1:::1;28222:22;;:8;:22;;::::0;28214:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28298:28;28317:8;28298:18;:28::i;:::-;28133:201:::0;:::o;35341:104::-;27113:13;:11;:13::i;:::-;35427:10:::1;:8;:10::i;:::-;35423:2;:14;;;;:::i;:::-;35414:6;:23;;;;:::i;:::-;35405:6;:32;;;;35341:104:::0;:::o;30343:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29614:21::-;;;;;;;;;;;;;:::o;29864:42::-;;;;:::o;12846:98::-;12899:7;12926:10;12919:17;;12846:98;:::o;23408:380::-;23561:1;23544:19;;:5;:19;;;23536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23642:1;23623:21;;:7;:21;;;23615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23726:6;23696:11;:18;23708:5;23696:18;;;;;;;;;;;;;;;:27;23715:7;23696:27;;;;;;;;;;;;;;;:36;;;;23764:7;23748:32;;23757:5;23748:32;;;23773:6;23748:32;;;;;;:::i;:::-;;;;;;;;23408:380;;;:::o;27392:132::-;27467:12;:10;:12::i;:::-;27456:23;;:7;:5;:7::i;:::-;:23;;;27448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27392:132::o;24079:453::-;24214:24;24241:25;24251:5;24258:7;24241:9;:25::i;:::-;24214:52;;24301:17;24281:16;:37;24277:248;;24363:6;24343:16;:26;;24335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24447:51;24456:5;24463:7;24491:6;24472:16;:25;24447:8;:51::i;:::-;24277:248;24203:329;24079:453;;;:::o;31281:1667::-;31397:1;31388:6;:10;31380:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31463:14;;;;;;;;;;;:42;;;;31481:16;:24;31498:6;31481:24;;;;;;;;;;;;;;;;;;;;;;;;;31463:42;:73;;;;31509:16;:27;31526:9;31509:27;;;;;;;;;;;;;;;;;;;;;;;;;31463:73;31455:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;31575:8;;;;;;;;;;;:36;;;;31587:16;:24;31604:6;31587:24;;;;;;;;;;;;;;;;;;;;;;;;;31575:36;:67;;;;31615:16;:27;31632:9;31615:27;;;;;;;;;;;;;;;;;;;;;;;;;31575:67;31571:162;;;31658:42;31674:6;31682:9;31693:6;31658:15;:42::i;:::-;31715:7;;31571:162;31762:4;;;;;;;;;;;31749:17;;:9;:17;;;31746:104;;31809:9;;31799:6;31776:20;31786:9;31776;:20::i;:::-;:29;;;;:::i;:::-;:42;;31768:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;31746:104;31864:11;31890:18;31923;31975:4;;;;;;;;;;;31962:17;;:9;:17;;;31959:480;;32026:3;32011:12;;32002:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;31996:33;;32086:3;32066:9;:17;;;;;;;;;;;;32057:26;;:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;32044:45;;32146:3;32126:9;:17;;;;;;;;;;;;32117:26;;:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;32104:45;;31959:480;;;32189:4;;;;;;;;;;;32179:14;;:6;:14;;;32176:263;;32227:6;;32217;:16;;32209:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32306:3;32292:11;;32283:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;32277:32;;32365:3;32346:8;:16;;;;;;;;;;;;32337:25;;:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;32324:44;;32424:3;32405:8;:16;;;;;;;;;;;;32396:25;;:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;32383:44;;32176:263;31959:480;32553:11;;;;;;;;;;;:24;;;;;32569:8;;;;;;;;;;;32568:9;32553:24;:42;;;;;32591:4;;;;;;;;;;;32581:14;;:6;:14;;;;32553:42;:53;;;;;32605:1;32599:3;:7;32553:53;32549:72;;;32608:13;:11;:13::i;:::-;32549:72;32635:48;32651:6;32659:9;32679:3;32670:6;:12;;;;:::i;:::-;32635:15;:48::i;:::-;32703:1;32697:3;:7;32694:84;;;32706:72;32722:6;32738:4;32766:10;32753;32747:3;:16;;;;:::i;:::-;:29;;;;:::i;:::-;32706:15;:72::i;:::-;32694:84;32805:1;32792:10;:14;32789:70;;;32808:51;32824:6;32832:13;;;;;;;;;;;32848:10;32808:15;:51::i;:::-;32789:70;32886:1;32873:10;:14;32870:70;;;32889:51;32905:6;32913:13;;;;;;;;;;;32929:10;32889:15;:51::i;:::-;32870:70;31369:1579;;;31281:1667;;;;:::o;28494:191::-;28568:16;28587:6;;;;;;;;;;;28568:25;;28613:8;28604:6;;:17;;;;;;;;;;;;;;;;;;28668:8;28637:40;;28658:8;28637:40;;;;;;;;;;;;28557:128;28494:191;:::o;2494:317::-;2609:6;2584:21;:31;;2576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2663:12;2681:9;:14;;2703:6;2681:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2662:52;;;2733:7;2725:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2565:246;2494:317;;:::o;20689:671::-;20836:1;20820:18;;:4;:18;;;20812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20913:1;20899:16;;:2;:16;;;20891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20968:38;20989:4;20995:2;20999:6;20968:20;:38::i;:::-;21019:19;21041:9;:15;21051:4;21041:15;;;;;;;;;;;;;;;;21019:37;;21090:6;21075:11;:21;;21067:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21207:6;21193:11;:20;21175:9;:15;21185:4;21175:15;;;;;;;;;;;;;;;:38;;;;21252:6;21235:9;:13;21245:2;21235:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21291:2;21276:26;;21285:4;21276:26;;;21295:6;21276:26;;;;;;:::i;:::-;;;;;;;;21315:37;21335:4;21341:2;21345:6;21315:19;:37::i;:::-;20801:559;20689:671;;;:::o;32957:1217::-;30563:8;;;;;;;;;;;30558:104;;30599:4;30588:8;;:15;;;;;;;;;;;;;;;;;;33006:23:::1;33032:24;33050:4;33032:9;:24::i;:::-;33006:50;;33090:13;;33071:15;:32;33067:1100;;33178:19;33246:1;33223:9;:19;;;;;;;;;;;;33201:9;:19;;;;;;;;;;;;:41;;;;:::i;:::-;33200:47;;;;:::i;:::-;33178:69;;;;33262:32;33337:11;33315:9;:19;;;;;;;;;;;;33297:37;;:15;:37;;;;:::i;:::-;:51;;;;:::i;:::-;33262:86;;33363:14;33398:24;33380:15;:42;;;;:::i;:::-;33363:59;;33440:22;33465:21;33440:46;;33504:24;33521:6;33504:16;:24::i;:::-;33546:20;33593:14;33569:21;:38;;;;:::i;:::-;33546:61;;33622:19;33673:9;:19;;;;;;;;;;;;33659:33;;:11;:33;;;;:::i;:::-;33643:12;:50;;;;:::i;:::-;33622:71;;33708:29;33754:9;:19;;;;;;;;;;;;33740:33;;:11;:33;;;;:::i;:::-;33708:65;;33818:1;33794:21;:25;33791:170;;;33884:61;33897:24;33923:21;33884:12;:61::i;:::-;33791:170;33978:20;34019:9;:19;;;;;;;;;;;;34001:37;;34015:1;34001:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;33978:60;;34071:1;34056:12;:16;34053:103;;;34092:48;34127:12;34100:15;;;;;;;;;;;34092:34;;;;:48;;;;:::i;:::-;34053:103;33105:1062;;;;;;;;33067:1100;32995:1179;30645:5:::0;30634:8;;:16;;;;;;;;;;;;;;;;;;30558:104;32957:1217::o;25132:125::-;;;;:::o;25861:124::-;;;;:::o;34186:403::-;34252:21;34290:1;34276:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34252:40;;34321:4;34303;34308:1;34303:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34347:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34337:4;34342:1;34337:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34374:53;34391:4;34406:6;;;;;;;;;;;34415:11;34374:8;:53::i;:::-;34467:6;;;;;;;;;;;:57;;;34525:11;34538:1;34541:4;34555;34562:15;34467:111;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34241:348;34186:403;:::o;34598:496::-;34746:53;34763:4;34778:6;;;;;;;;;;;34787:11;34746:8;:53::i;:::-;34843:6;;;;;;;;;;;:22;;;34873:9;34906:4;34926:11;34952:1;34995;35038:7;:5;:7::i;:::-;35060:15;34843:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34598:496;;:::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:126::-;479:7;519:42;512:5;508:54;497:65;;442:126;;;:::o;574:96::-;611:7;640:24;658:5;640:24;:::i;:::-;629:35;;574:96;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:86::-;4810:7;4850:4;4843:5;4839:16;4828:27;;4775:86;;;:::o;4867:112::-;4950:22;4966:5;4950:22;:::i;:::-;4945:3;4938:35;4867:112;;:::o;4985:214::-;5074:4;5112:2;5101:9;5097:18;5089:26;;5125:67;5189:1;5178:9;5174:17;5165:6;5125:67;:::i;:::-;4985:214;;;;:::o;5205:112::-;5258:7;5287:24;5305:5;5287:24;:::i;:::-;5276:35;;5205:112;;;:::o;5323:154::-;5412:40;5446:5;5412:40;:::i;:::-;5405:5;5402:51;5392:79;;5467:1;5464;5457:12;5392:79;5323:154;:::o;5483:171::-;5545:5;5583:6;5570:20;5561:29;;5599:49;5642:5;5599:49;:::i;:::-;5483:171;;;;:::o;5660:506::-;5744:6;5752;5801:2;5789:9;5780:7;5776:23;5772:32;5769:119;;;5807:79;;:::i;:::-;5769:119;5927:1;5952:69;6013:7;6004:6;5993:9;5989:22;5952:69;:::i;:::-;5942:79;;5898:133;6070:2;6096:53;6141:7;6132:6;6121:9;6117:22;6096:53;:::i;:::-;6086:63;;6041:118;5660:506;;;;;:::o;6172:329::-;6231:6;6280:2;6268:9;6259:7;6255:23;6251:32;6248:119;;;6286:79;;:::i;:::-;6248:119;6406:1;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6377:117;6172:329;;;;:::o;6507:::-;6566:6;6615:2;6603:9;6594:7;6590:23;6586:32;6583:119;;;6621:79;;:::i;:::-;6583:119;6741:1;6766:53;6811:7;6802:6;6791:9;6787:22;6766:53;:::i;:::-;6756:63;;6712:117;6507:329;;;;:::o;6842:101::-;6878:7;6918:18;6911:5;6907:30;6896:41;;6842:101;;;:::o;6949:120::-;7021:23;7038:5;7021:23;:::i;:::-;7014:5;7011:34;7001:62;;7059:1;7056;7049:12;7001:62;6949:120;:::o;7075:137::-;7120:5;7158:6;7145:20;7136:29;;7174:32;7200:5;7174:32;:::i;:::-;7075:137;;;;:::o;7218:757::-;7300:6;7308;7316;7324;7373:3;7361:9;7352:7;7348:23;7344:33;7341:120;;;7380:79;;:::i;:::-;7341:120;7500:1;7525:52;7569:7;7560:6;7549:9;7545:22;7525:52;:::i;:::-;7515:62;;7471:116;7626:2;7652:52;7696:7;7687:6;7676:9;7672:22;7652:52;:::i;:::-;7642:62;;7597:117;7753:2;7779:52;7823:7;7814:6;7803:9;7799:22;7779:52;:::i;:::-;7769:62;;7724:117;7880:2;7906:52;7950:7;7941:6;7930:9;7926:22;7906:52;:::i;:::-;7896:62;;7851:117;7218:757;;;;;;;:::o;7981:115::-;8066:23;8083:5;8066:23;:::i;:::-;8061:3;8054:36;7981:115;;:::o;8102:537::-;8271:4;8309:3;8298:9;8294:19;8286:27;;8323:69;8389:1;8378:9;8374:17;8365:6;8323:69;:::i;:::-;8402:70;8468:2;8457:9;8453:18;8444:6;8402:70;:::i;:::-;8482;8548:2;8537:9;8533:18;8524:6;8482:70;:::i;:::-;8562;8628:2;8617:9;8613:18;8604:6;8562:70;:::i;:::-;8102:537;;;;;;;:::o;8645:474::-;8713:6;8721;8770:2;8758:9;8749:7;8745:23;8741:32;8738:119;;;8776:79;;:::i;:::-;8738:119;8896:1;8921:53;8966:7;8957:6;8946:9;8942:22;8921:53;:::i;:::-;8911:63;;8867:117;9023:2;9049:53;9094:7;9085:6;9074:9;9070:22;9049:53;:::i;:::-;9039:63;;8994:118;8645:474;;;;;:::o;9125:116::-;9195:21;9210:5;9195:21;:::i;:::-;9188:5;9185:32;9175:60;;9231:1;9228;9221:12;9175:60;9125:116;:::o;9247:133::-;9290:5;9328:6;9315:20;9306:29;;9344:30;9368:5;9344:30;:::i;:::-;9247:133;;;;:::o;9386:323::-;9442:6;9491:2;9479:9;9470:7;9466:23;9462:32;9459:119;;;9497:79;;:::i;:::-;9459:119;9617:1;9642:50;9684:7;9675:6;9664:9;9660:22;9642:50;:::i;:::-;9632:60;;9588:114;9386:323;;;;:::o;9715:468::-;9780:6;9788;9837:2;9825:9;9816:7;9812:23;9808:32;9805:119;;;9843:79;;:::i;:::-;9805:119;9963:1;9988:53;10033:7;10024:6;10013:9;10009:22;9988:53;:::i;:::-;9978:63;;9934:117;10090:2;10116:50;10158:7;10149:6;10138:9;10134:22;10116:50;:::i;:::-;10106:60;;10061:115;9715:468;;;;;:::o;10189:60::-;10217:3;10238:5;10231:12;;10189:60;;;:::o;10255:142::-;10305:9;10338:53;10356:34;10365:24;10383:5;10365:24;:::i;:::-;10356:34;:::i;:::-;10338:53;:::i;:::-;10325:66;;10255:142;;;:::o;10403:126::-;10453:9;10486:37;10517:5;10486:37;:::i;:::-;10473:50;;10403:126;;;:::o;10535:142::-;10601:9;10634:37;10665:5;10634:37;:::i;:::-;10621:50;;10535:142;;;:::o;10683:163::-;10786:53;10833:5;10786:53;:::i;:::-;10781:3;10774:66;10683:163;;:::o;10852:254::-;10961:4;10999:2;10988:9;10984:18;10976:26;;11012:87;11096:1;11085:9;11081:17;11072:6;11012:87;:::i;:::-;10852:254;;;;:::o;11112:180::-;11160:77;11157:1;11150:88;11257:4;11254:1;11247:15;11281:4;11278:1;11271:15;11298:320;11342:6;11379:1;11373:4;11369:12;11359:22;;11426:1;11420:4;11416:12;11447:18;11437:81;;11503:4;11495:6;11491:17;11481:27;;11437:81;11565:2;11557:6;11554:14;11534:18;11531:38;11528:84;;11584:18;;:::i;:::-;11528:84;11349:269;11298:320;;;:::o;11624:180::-;11672:77;11669:1;11662:88;11769:4;11766:1;11759:15;11793:4;11790:1;11783:15;11810:191;11850:3;11869:20;11887:1;11869:20;:::i;:::-;11864:25;;11903:20;11921:1;11903:20;:::i;:::-;11898:25;;11946:1;11943;11939:9;11932:16;;11967:3;11964:1;11961:10;11958:36;;;11974:18;;:::i;:::-;11958:36;11810:191;;;;:::o;12007:171::-;12147:23;12143:1;12135:6;12131:14;12124:47;12007:171;:::o;12184:366::-;12326:3;12347:67;12411:2;12406:3;12347:67;:::i;:::-;12340:74;;12423:93;12512:3;12423:93;:::i;:::-;12541:2;12536:3;12532:12;12525:19;;12184:366;;;:::o;12556:419::-;12722:4;12760:2;12749:9;12745:18;12737:26;;12809:9;12803:4;12799:20;12795:1;12784:9;12780:17;12773:47;12837:131;12963:4;12837:131;:::i;:::-;12829:139;;12556:419;;;:::o;12981:169::-;13121:21;13117:1;13109:6;13105:14;13098:45;12981:169;:::o;13156:366::-;13298:3;13319:67;13383:2;13378:3;13319:67;:::i;:::-;13312:74;;13395:93;13484:3;13395:93;:::i;:::-;13513:2;13508:3;13504:12;13497:19;;13156:366;;;:::o;13528:419::-;13694:4;13732:2;13721:9;13717:18;13709:26;;13781:9;13775:4;13771:20;13767:1;13756:9;13752:17;13745:47;13809:131;13935:4;13809:131;:::i;:::-;13801:139;;13528:419;;;:::o;13953:102::-;13995:8;14042:5;14039:1;14035:13;14014:34;;13953:102;;;:::o;14061:848::-;14122:5;14129:4;14153:6;14144:15;;14177:5;14168:14;;14191:712;14212:1;14202:8;14199:15;14191:712;;;14307:4;14302:3;14298:14;14292:4;14289:24;14286:50;;;14316:18;;:::i;:::-;14286:50;14366:1;14356:8;14352:16;14349:451;;;14781:4;14774:5;14770:16;14761:25;;14349:451;14831:4;14825;14821:15;14813:23;;14861:32;14884:8;14861:32;:::i;:::-;14849:44;;14191:712;;;14061:848;;;;;;;:::o;14915:1073::-;14969:5;15160:8;15150:40;;15181:1;15172:10;;15183:5;;15150:40;15209:4;15199:36;;15226:1;15217:10;;15228:5;;15199:36;15295:4;15343:1;15338:27;;;;15379:1;15374:191;;;;15288:277;;15338:27;15356:1;15347:10;;15358:5;;;15374:191;15419:3;15409:8;15406:17;15403:43;;;15426:18;;:::i;:::-;15403:43;15475:8;15472:1;15468:16;15459:25;;15510:3;15503:5;15500:14;15497:40;;;15517:18;;:::i;:::-;15497:40;15550:5;;;15288:277;;15674:2;15664:8;15661:16;15655:3;15649:4;15646:13;15642:36;15624:2;15614:8;15611:16;15606:2;15600:4;15597:12;15593:35;15577:111;15574:246;;;15730:8;15724:4;15720:19;15711:28;;15765:3;15758:5;15755:14;15752:40;;;15772:18;;:::i;:::-;15752:40;15805:5;;15574:246;15845:42;15883:3;15873:8;15867:4;15864:1;15845:42;:::i;:::-;15830:57;;;;15919:4;15914:3;15910:14;15903:5;15900:25;15897:51;;;15928:18;;:::i;:::-;15897:51;15977:4;15970:5;15966:16;15957:25;;14915:1073;;;;;;:::o;15994:281::-;16052:5;16076:23;16094:4;16076:23;:::i;:::-;16068:31;;16120:25;16136:8;16120:25;:::i;:::-;16108:37;;16164:104;16201:66;16191:8;16185:4;16164:104;:::i;:::-;16155:113;;15994:281;;;;:::o;16281:348::-;16321:7;16344:20;16362:1;16344:20;:::i;:::-;16339:25;;16378:20;16396:1;16378:20;:::i;:::-;16373:25;;16566:1;16498:66;16494:74;16491:1;16488:81;16483:1;16476:9;16469:17;16465:105;16462:131;;;16573:18;;:::i;:::-;16462:131;16621:1;16618;16614:9;16603:20;;16281:348;;;;:::o;16635:205::-;16674:3;16693:19;16710:1;16693:19;:::i;:::-;16688:24;;16726:19;16743:1;16726:19;:::i;:::-;16721:24;;16768:1;16765;16761:9;16754:16;;16791:18;16786:3;16783:27;16780:53;;;16813:18;;:::i;:::-;16780:53;16635:205;;;;:::o;16846:163::-;16986:15;16982:1;16974:6;16970:14;16963:39;16846:163;:::o;17015:366::-;17157:3;17178:67;17242:2;17237:3;17178:67;:::i;:::-;17171:74;;17254:93;17343:3;17254:93;:::i;:::-;17372:2;17367:3;17363:12;17356:19;;17015:366;;;:::o;17387:419::-;17553:4;17591:2;17580:9;17576:18;17568:26;;17640:9;17634:4;17630:20;17626:1;17615:9;17611:17;17604:47;17668:131;17794:4;17668:131;:::i;:::-;17660:139;;17387:419;;;:::o;17812:332::-;17933:4;17971:2;17960:9;17956:18;17948:26;;17984:71;18052:1;18041:9;18037:17;18028:6;17984:71;:::i;:::-;18065:72;18133:2;18122:9;18118:18;18109:6;18065:72;:::i;:::-;17812:332;;;;;:::o;18150:137::-;18204:5;18235:6;18229:13;18220:22;;18251:30;18275:5;18251:30;:::i;:::-;18150:137;;;;:::o;18293:345::-;18360:6;18409:2;18397:9;18388:7;18384:23;18380:32;18377:119;;;18415:79;;:::i;:::-;18377:119;18535:1;18560:61;18613:7;18604:6;18593:9;18589:22;18560:61;:::i;:::-;18550:71;;18506:125;18293:345;;;;:::o;18644:224::-;18784:34;18780:1;18772:6;18768:14;18761:58;18853:7;18848:2;18840:6;18836:15;18829:32;18644:224;:::o;18874:366::-;19016:3;19037:67;19101:2;19096:3;19037:67;:::i;:::-;19030:74;;19113:93;19202:3;19113:93;:::i;:::-;19231:2;19226:3;19222:12;19215:19;;18874:366;;;:::o;19246:419::-;19412:4;19450:2;19439:9;19435:18;19427:26;;19499:9;19493:4;19489:20;19485:1;19474:9;19470:17;19463:47;19527:131;19653:4;19527:131;:::i;:::-;19519:139;;19246:419;;;:::o;19671:225::-;19811:34;19807:1;19799:6;19795:14;19788:58;19880:8;19875:2;19867:6;19863:15;19856:33;19671:225;:::o;19902:366::-;20044:3;20065:67;20129:2;20124:3;20065:67;:::i;:::-;20058:74;;20141:93;20230:3;20141:93;:::i;:::-;20259:2;20254:3;20250:12;20243:19;;19902:366;;;:::o;20274:419::-;20440:4;20478:2;20467:9;20463:18;20455:26;;20527:9;20521:4;20517:20;20513:1;20502:9;20498:17;20491:47;20555:131;20681:4;20555:131;:::i;:::-;20547:139;;20274:419;;;:::o;20699:223::-;20839:34;20835:1;20827:6;20823:14;20816:58;20908:6;20903:2;20895:6;20891:15;20884:31;20699:223;:::o;20928:366::-;21070:3;21091:67;21155:2;21150:3;21091:67;:::i;:::-;21084:74;;21167:93;21256:3;21167:93;:::i;:::-;21285:2;21280:3;21276:12;21269:19;;20928:366;;;:::o;21300:419::-;21466:4;21504:2;21493:9;21489:18;21481:26;;21553:9;21547:4;21543:20;21539:1;21528:9;21524:17;21517:47;21581:131;21707:4;21581:131;:::i;:::-;21573:139;;21300:419;;;:::o;21725:221::-;21865:34;21861:1;21853:6;21849:14;21842:58;21934:4;21929:2;21921:6;21917:15;21910:29;21725:221;:::o;21952:366::-;22094:3;22115:67;22179:2;22174:3;22115:67;:::i;:::-;22108:74;;22191:93;22280:3;22191:93;:::i;:::-;22309:2;22304:3;22300:12;22293:19;;21952:366;;;:::o;22324:419::-;22490:4;22528:2;22517:9;22513:18;22505:26;;22577:9;22571:4;22567:20;22563:1;22552:9;22548:17;22541:47;22605:131;22731:4;22605:131;:::i;:::-;22597:139;;22324:419;;;:::o;22749:182::-;22889:34;22885:1;22877:6;22873:14;22866:58;22749:182;:::o;22937:366::-;23079:3;23100:67;23164:2;23159:3;23100:67;:::i;:::-;23093:74;;23176:93;23265:3;23176:93;:::i;:::-;23294:2;23289:3;23285:12;23278:19;;22937:366;;;:::o;23309:419::-;23475:4;23513:2;23502:9;23498:18;23490:26;;23562:9;23556:4;23552:20;23548:1;23537:9;23533:17;23526:47;23590:131;23716:4;23590:131;:::i;:::-;23582:139;;23309:419;;;:::o;23734:179::-;23874:31;23870:1;23862:6;23858:14;23851:55;23734:179;:::o;23919:366::-;24061:3;24082:67;24146:2;24141:3;24082:67;:::i;:::-;24075:74;;24158:93;24247:3;24158:93;:::i;:::-;24276:2;24271:3;24267:12;24260:19;;23919:366;;;:::o;24291:419::-;24457:4;24495:2;24484:9;24480:18;24472:26;;24544:9;24538:4;24534:20;24530:1;24519:9;24515:17;24508:47;24572:131;24698:4;24572:131;:::i;:::-;24564:139;;24291:419;;;:::o;24716:228::-;24856:34;24852:1;24844:6;24840:14;24833:58;24925:11;24920:2;24912:6;24908:15;24901:36;24716:228;:::o;24950:366::-;25092:3;25113:67;25177:2;25172:3;25113:67;:::i;:::-;25106:74;;25189:93;25278:3;25189:93;:::i;:::-;25307:2;25302:3;25298:12;25291:19;;24950:366;;;:::o;25322:419::-;25488:4;25526:2;25515:9;25511:18;25503:26;;25575:9;25569:4;25565:20;25561:1;25550:9;25546:17;25539:47;25603:131;25729:4;25603:131;:::i;:::-;25595:139;;25322:419;;;:::o;25747:166::-;25887:18;25883:1;25875:6;25871:14;25864:42;25747:166;:::o;25919:366::-;26061:3;26082:67;26146:2;26141:3;26082:67;:::i;:::-;26075:74;;26158:93;26247:3;26158:93;:::i;:::-;26276:2;26271:3;26267:12;26260:19;;25919:366;;;:::o;26291:419::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:131;26698:4;26572:131;:::i;:::-;26564:139;;26291:419;;;:::o;26716:177::-;26856:29;26852:1;26844:6;26840:14;26833:53;26716:177;:::o;26899:366::-;27041:3;27062:67;27126:2;27121:3;27062:67;:::i;:::-;27055:74;;27138:93;27227:3;27138:93;:::i;:::-;27256:2;27251:3;27247:12;27240:19;;26899:366;;;:::o;27271:419::-;27437:4;27475:2;27464:9;27460:18;27452:26;;27524:9;27518:4;27514:20;27510:1;27499:9;27495:17;27488:47;27552:131;27678:4;27552:131;:::i;:::-;27544:139;;27271:419;;;:::o;27696:180::-;27744:77;27741:1;27734:88;27841:4;27838:1;27831:15;27865:4;27862:1;27855:15;27882:185;27922:1;27939:20;27957:1;27939:20;:::i;:::-;27934:25;;27973:20;27991:1;27973:20;:::i;:::-;27968:25;;28012:1;28002:35;;28017:18;;:::i;:::-;28002:35;28059:1;28056;28052:9;28047:14;;27882:185;;;;:::o;28073:174::-;28213:26;28209:1;28201:6;28197:14;28190:50;28073:174;:::o;28253:366::-;28395:3;28416:67;28480:2;28475:3;28416:67;:::i;:::-;28409:74;;28492:93;28581:3;28492:93;:::i;:::-;28610:2;28605:3;28601:12;28594:19;;28253:366;;;:::o;28625:419::-;28791:4;28829:2;28818:9;28814:18;28806:26;;28878:9;28872:4;28868:20;28864:1;28853:9;28849:17;28842:47;28906:131;29032:4;28906:131;:::i;:::-;28898:139;;28625:419;;;:::o;29050:194::-;29090:4;29110:20;29128:1;29110:20;:::i;:::-;29105:25;;29144:20;29162:1;29144:20;:::i;:::-;29139:25;;29188:1;29185;29181:9;29173:17;;29212:1;29206:4;29203:11;29200:37;;;29217:18;;:::i;:::-;29200:37;29050:194;;;;:::o;29250:179::-;29390:31;29386:1;29378:6;29374:14;29367:55;29250:179;:::o;29435:366::-;29577:3;29598:67;29662:2;29657:3;29598:67;:::i;:::-;29591:74;;29674:93;29763:3;29674:93;:::i;:::-;29792:2;29787:3;29783:12;29776:19;;29435:366;;;:::o;29807:419::-;29973:4;30011:2;30000:9;29996:18;29988:26;;30060:9;30054:4;30050:20;30046:1;30035:9;30031:17;30024:47;30088:131;30214:4;30088:131;:::i;:::-;30080:139;;29807:419;;;:::o;30232:147::-;30333:11;30370:3;30355:18;;30232:147;;;;:::o;30385:114::-;;:::o;30505:398::-;30664:3;30685:83;30766:1;30761:3;30685:83;:::i;:::-;30678:90;;30777:93;30866:3;30777:93;:::i;:::-;30895:1;30890:3;30886:11;30879:18;;30505:398;;;:::o;30909:379::-;31093:3;31115:147;31258:3;31115:147;:::i;:::-;31108:154;;31279:3;31272:10;;30909:379;;;:::o;31294:245::-;31434:34;31430:1;31422:6;31418:14;31411:58;31503:28;31498:2;31490:6;31486:15;31479:53;31294:245;:::o;31545:366::-;31687:3;31708:67;31772:2;31767:3;31708:67;:::i;:::-;31701:74;;31784:93;31873:3;31784:93;:::i;:::-;31902:2;31897:3;31893:12;31886:19;;31545:366;;;:::o;31917:419::-;32083:4;32121:2;32110:9;32106:18;32098:26;;32170:9;32164:4;32160:20;32156:1;32145:9;32141:17;32134:47;32198:131;32324:4;32198:131;:::i;:::-;32190:139;;31917:419;;;:::o;32342:224::-;32482:34;32478:1;32470:6;32466:14;32459:58;32551:7;32546:2;32538:6;32534:15;32527:32;32342:224;:::o;32572:366::-;32714:3;32735:67;32799:2;32794:3;32735:67;:::i;:::-;32728:74;;32811:93;32900:3;32811:93;:::i;:::-;32929:2;32924:3;32920:12;32913:19;;32572:366;;;:::o;32944:419::-;33110:4;33148:2;33137:9;33133:18;33125:26;;33197:9;33191:4;33187:20;33183:1;33172:9;33168:17;33161:47;33225:131;33351:4;33225:131;:::i;:::-;33217:139;;32944:419;;;:::o;33369:222::-;33509:34;33505:1;33497:6;33493:14;33486:58;33578:5;33573:2;33565:6;33561:15;33554:30;33369:222;:::o;33597:366::-;33739:3;33760:67;33824:2;33819:3;33760:67;:::i;:::-;33753:74;;33836:93;33925:3;33836:93;:::i;:::-;33954:2;33949:3;33945:12;33938:19;;33597:366;;;:::o;33969:419::-;34135:4;34173:2;34162:9;34158:18;34150:26;;34222:9;34216:4;34212:20;34208:1;34197:9;34193:17;34186:47;34250:131;34376:4;34250:131;:::i;:::-;34242:139;;33969:419;;;:::o;34394:225::-;34534:34;34530:1;34522:6;34518:14;34511:58;34603:8;34598:2;34590:6;34586:15;34579:33;34394:225;:::o;34625:366::-;34767:3;34788:67;34852:2;34847:3;34788:67;:::i;:::-;34781:74;;34864:93;34953:3;34864:93;:::i;:::-;34982:2;34977:3;34973:12;34966:19;;34625:366;;;:::o;34997:419::-;35163:4;35201:2;35190:9;35186:18;35178:26;;35250:9;35244:4;35240:20;35236:1;35225:9;35221:17;35214:47;35278:131;35404:4;35278:131;:::i;:::-;35270:139;;34997:419;;;:::o;35422:297::-;35461:7;35484:19;35501:1;35484:19;:::i;:::-;35479:24;;35517:19;35534:1;35517:19;:::i;:::-;35512:24;;35656:1;35636:18;35632:26;35629:1;35626:33;35621:1;35614:9;35607:17;35603:57;35600:83;;;35663:18;;:::i;:::-;35600:83;35711:1;35708;35704:9;35693:20;;35422:297;;;;:::o;35725:180::-;35773:77;35770:1;35763:88;35870:4;35867:1;35860:15;35894:4;35891:1;35884:15;35911:180;35959:77;35956:1;35949:88;36056:4;36053:1;36046:15;36080:4;36077:1;36070:15;36097:143;36154:5;36185:6;36179:13;36170:22;;36201:33;36228:5;36201:33;:::i;:::-;36097:143;;;;:::o;36246:351::-;36316:6;36365:2;36353:9;36344:7;36340:23;36336:32;36333:119;;;36371:79;;:::i;:::-;36333:119;36491:1;36516:64;36572:7;36563:6;36552:9;36548:22;36516:64;:::i;:::-;36506:74;;36462:128;36246:351;;;;:::o;36603:85::-;36648:7;36677:5;36666:16;;36603:85;;;:::o;36694:158::-;36752:9;36785:61;36803:42;36812:32;36838:5;36812:32;:::i;:::-;36803:42;:::i;:::-;36785:61;:::i;:::-;36772:74;;36694:158;;;:::o;36858:147::-;36953:45;36992:5;36953:45;:::i;:::-;36948:3;36941:58;36858:147;;:::o;37011:114::-;37078:6;37112:5;37106:12;37096:22;;37011:114;;;:::o;37131:184::-;37230:11;37264:6;37259:3;37252:19;37304:4;37299:3;37295:14;37280:29;;37131:184;;;;:::o;37321:132::-;37388:4;37411:3;37403:11;;37441:4;37436:3;37432:14;37424:22;;37321:132;;;:::o;37459:108::-;37536:24;37554:5;37536:24;:::i;:::-;37531:3;37524:37;37459:108;;:::o;37573:179::-;37642:10;37663:46;37705:3;37697:6;37663:46;:::i;:::-;37741:4;37736:3;37732:14;37718:28;;37573:179;;;;:::o;37758:113::-;37828:4;37860;37855:3;37851:14;37843:22;;37758:113;;;:::o;37907:732::-;38026:3;38055:54;38103:5;38055:54;:::i;:::-;38125:86;38204:6;38199:3;38125:86;:::i;:::-;38118:93;;38235:56;38285:5;38235:56;:::i;:::-;38314:7;38345:1;38330:284;38355:6;38352:1;38349:13;38330:284;;;38431:6;38425:13;38458:63;38517:3;38502:13;38458:63;:::i;:::-;38451:70;;38544:60;38597:6;38544:60;:::i;:::-;38534:70;;38390:224;38377:1;38374;38370:9;38365:14;;38330:284;;;38334:14;38630:3;38623:10;;38031:608;;;37907:732;;;;:::o;38645:831::-;38908:4;38946:3;38935:9;38931:19;38923:27;;38960:71;39028:1;39017:9;39013:17;39004:6;38960:71;:::i;:::-;39041:80;39117:2;39106:9;39102:18;39093:6;39041:80;:::i;:::-;39168:9;39162:4;39158:20;39153:2;39142:9;39138:18;39131:48;39196:108;39299:4;39290:6;39196:108;:::i;:::-;39188:116;;39314:72;39382:2;39371:9;39367:18;39358:6;39314:72;:::i;:::-;39396:73;39464:3;39453:9;39449:19;39440:6;39396:73;:::i;:::-;38645:831;;;;;;;;:::o;39482:807::-;39731:4;39769:3;39758:9;39754:19;39746:27;;39783:71;39851:1;39840:9;39836:17;39827:6;39783:71;:::i;:::-;39864:72;39932:2;39921:9;39917:18;39908:6;39864:72;:::i;:::-;39946:80;40022:2;40011:9;40007:18;39998:6;39946:80;:::i;:::-;40036;40112:2;40101:9;40097:18;40088:6;40036:80;:::i;:::-;40126:73;40194:3;40183:9;40179:19;40170:6;40126:73;:::i;:::-;40209;40277:3;40266:9;40262:19;40253:6;40209:73;:::i;:::-;39482:807;;;;;;;;;:::o;40295:143::-;40352:5;40383:6;40377:13;40368:22;;40399:33;40426:5;40399:33;:::i;:::-;40295:143;;;;:::o;40444:663::-;40532:6;40540;40548;40597:2;40585:9;40576:7;40572:23;40568:32;40565:119;;;40603:79;;:::i;:::-;40565:119;40723:1;40748:64;40804:7;40795:6;40784:9;40780:22;40748:64;:::i;:::-;40738:74;;40694:128;40861:2;40887:64;40943:7;40934:6;40923:9;40919:22;40887:64;:::i;:::-;40877:74;;40832:129;41000:2;41026:64;41082:7;41073:6;41062:9;41058:22;41026:64;:::i;:::-;41016:74;;40971:129;40444:663;;;;;:::o

Swarm Source

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