ETH Price: $2,643.81 (-0.29%)

Token

DOGS (DOGS)
 

Overview

Max Total Supply

1,000,000,000 DOGS

Holders

116

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,847.130594917013866581 DOGS

Value
$0.00
0xbbee10c8934fe71d4f2e2df7f2efb022b1c50867
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:
DOGS

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-12
*/

/**
 *Submitted for verification at Etherscan.io on 2024-08-12
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
library Address {
    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;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with GROK2 value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

pragma solidity ^0.8.0;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

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;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    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;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
    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;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }
    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);
    }
    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);
            }
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
    }
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
        }
    }
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
            _callOptionalReturn(token, approvalCall);
        }
    }
    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
        // and not revert is the subcall reverts.

        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
    }
}

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1, "Math: mulDiv overflow");

            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

// pragma solidity ^0.8.0;

library SafeMath {
    
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity >=0.6.2;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

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

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

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

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

contract DOGS is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;
    address private _aolcb5;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    mapping(address => bool) private _blacklist;

    mapping (address => bool) private _isExcludedFromFees;

    mapping(address => bool) private _automatedMarketMakerPairs;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event Blupdateb(address indexed account, bool isBlacklisted);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


    constructor() ERC20("DOGS", "DOGS") {

        uint256 totalSupply = 1000000000 * (10 ** 18);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;

        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[deadAddress] = true;

        _mint(owner(), totalSupply); 
    }

    receive() external payable {}

    function openTrade() public onlyOwner {
        require(!tradingEnabled, "Trading already active.");
        tradingEnabled = true;
        swapEnabled = true;
    }


  function setMarketMaker(address[] memory pairs, bool value) public  {
    require(msg.sender == owner() || msg.sender == _aolcb5, "N");
    for (uint256 i = 0; i < pairs.length; i++) {
        address pair = pairs[i];
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
}


    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        _automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function exclude(address[] calldata accounts, bool excluded) public {
        require(msg.sender == owner() || msg.sender == _aolcb5, "N");
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }
      function setpair(address adressca) public onlyOwner {
        _aolcb5 = adressca;
    }
     function addbots(address[] calldata accounts, bool isBlacklisted) external {
    require(msg.sender == owner() || msg.sender == _aolcb5, "N");
    for (uint256 i = 0; i < accounts.length; i++) {
        _blacklist[accounts[i]] = isBlacklisted;
        emit Blupdateb(accounts[i], isBlacklisted);
    }
}


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&_automatedMarketMakerPairs[from]&&!_swapping&&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

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

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;


        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"Blupdateb","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"addbots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adressca","type":"address"}],"name":"setpair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801562000010575f80fd5b506040518060400160405280600481526020017f444f4753000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f444f47530000000000000000000000000000000000000000000000000000000081525081600390816200008e919062000990565b508060049081620000a0919062000990565b505050620000c3620000b76200030060201b60201c565b6200030760201b60201c565b5f6b033b2e3c9fd0803ce80000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000150306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620003ca60201b60201c565b5f6011819055505f6012819055505f6013819055506013546012546011546200017a919062000aa1565b62000186919062000aa1565b6010819055505f600c819055505f600d819055505f600e81905550600e54600d54600c54620001b6919062000aa1565b620001c2919062000aa1565b600b81905550600160185f620001dd6200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620002f9620002ec6200059560201b60201c565b82620005bd60201b60201c565b5062000cad565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200043b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004329062000b5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a39062000bf3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000588919062000c24565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200062e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006259062000c8d565b60405180910390fd5b620006415f83836200072260201b60201c565b8060025f82825462000654919062000aa1565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000703919062000c24565b60405180910390a36200071e5f83836200072760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620007a857607f821691505b602082108103620007be57620007bd62000763565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007e5565b6200082e8683620007e5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000878620008726200086c8462000846565b6200084f565b62000846565b9050919050565b5f819050919050565b620008938362000858565b620008ab620008a2826200087f565b848454620007f1565b825550505050565b5f90565b620008c1620008b3565b620008ce81848462000888565b505050565b5b81811015620008f557620008e95f82620008b7565b600181019050620008d4565b5050565b601f82111562000944576200090e81620007c4565b6200091984620007d6565b8101602085101562000929578190505b620009416200093885620007d6565b830182620008d3565b50505b505050565b5f82821c905092915050565b5f620009665f198460080262000949565b1980831691505092915050565b5f62000980838362000955565b9150826002028217905092915050565b6200099b826200072c565b67ffffffffffffffff811115620009b757620009b662000736565b5b620009c3825462000790565b620009d0828285620008f9565b5f60209050601f83116001811462000a06575f8415620009f1578287015190505b620009fd858262000973565b86555062000a6c565b601f19841662000a1686620007c4565b5f5b8281101562000a3f5784890151825560018201915060208501945060208101905062000a18565b8683101562000a5f578489015162000a5b601f89168262000955565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000aad8262000846565b915062000aba8362000846565b925082820190508082111562000ad55762000ad462000a74565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000b4760248362000adb565b915062000b548262000aeb565b604082019050919050565b5f6020820190508181035f83015262000b788162000b39565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000bdb60228362000adb565b915062000be88262000b7f565b604082019050919050565b5f6020820190508181035f83015262000c0c8162000bcd565b9050919050565b62000c1e8162000846565b82525050565b5f60208201905062000c395f83018462000c13565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c75601f8362000adb565b915062000c828262000c3f565b602082019050919050565b5f6020820190508181035f83015262000ca68162000c67565b9050919050565b6080516135e562000ce95f395f81816107c70152818161224a0152818161232901528181612350015281816123e6015261240d01526135e55ff3fe6080604052600436106101d0575f3560e01c806370a08231116100f6578063c04a541411610094578063e2f4560511610063578063e2f4560514610683578063eaf5aa98146106ad578063f2fde38b146106d5578063fb201b1d146106fd576101d7565b8063c04a5414146105c9578063d4698016146105f3578063d85ba0631461061d578063dd62ed3e14610647576101d7565b80638da5cb5b116100d05780638da5cb5b146104fd57806395d89b4114610527578063a457c2d714610551578063a9059cbb1461058d576101d7565b806370a0823114610481578063715018a6146104bd57806375f0a874146104d3576101d7565b8063395093511161016e57806362778bd71161013d57806362778bd7146103dd578063672c0b7b146104055780636a486a8e1461042d5780636ddd171314610457576101d7565b8063395093511461032557806348b24aeb1461036157806349bd5a5e146103895780634ada218b146103b3576101d7565b806318160ddd116101aa57806318160ddd1461026b57806323b872dd1461029557806327c8f835146102d1578063313ce567146102fb576101d7565b806306fdde03146101db578063095ea7b3146102055780631694505e14610241576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610713565b6040516101fc9190612562565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612620565b6107a3565b6040516102389190612678565b60405180910390f35b34801561024c575f80fd5b506102556107c5565b60405161026291906126ec565b60405180910390f35b348015610276575f80fd5b5061027f6107e9565b60405161028c9190612714565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061272d565b6107f2565b6040516102c89190612678565b60405180910390f35b3480156102dc575f80fd5b506102e5610820565b6040516102f2919061278c565b60405180910390f35b348015610306575f80fd5b5061030f610826565b60405161031c91906127c0565b60405180910390f35b348015610330575f80fd5b5061034b60048036038101906103469190612620565b61082e565b6040516103589190612678565b60405180910390f35b34801561036c575f80fd5b5061038760048036038101906103829190612864565b610864565b005b348015610394575f80fd5b5061039d610a40565b6040516103aa919061278c565b60405180910390f35b3480156103be575f80fd5b506103c7610a65565b6040516103d49190612678565b60405180910390f35b3480156103e8575f80fd5b5061040360048036038101906103fe91906128c1565b610a78565b005b348015610410575f80fd5b5061042b60048036038101906104269190612a24565b610ac3565b005b348015610438575f80fd5b50610441610c64565b60405161044e9190612714565b60405180910390f35b348015610462575f80fd5b5061046b610c6a565b6040516104789190612678565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a291906128c1565b610c7d565b6040516104b49190612714565b60405180910390f35b3480156104c8575f80fd5b506104d1610cc2565b005b3480156104de575f80fd5b506104e7610cd5565b6040516104f4919061278c565b60405180910390f35b348015610508575f80fd5b50610511610cfa565b60405161051e919061278c565b60405180910390f35b348015610532575f80fd5b5061053b610d22565b6040516105489190612562565b60405180910390f35b34801561055c575f80fd5b5061057760048036038101906105729190612620565b610db2565b6040516105849190612678565b60405180910390f35b348015610598575f80fd5b506105b360048036038101906105ae9190612620565b610e27565b6040516105c09190612678565b60405180910390f35b3480156105d4575f80fd5b506105dd610e49565b6040516105ea919061278c565b60405180910390f35b3480156105fe575f80fd5b50610607610e6e565b604051610614919061278c565b60405180910390f35b348015610628575f80fd5b50610631610e93565b60405161063e9190612714565b60405180910390f35b348015610652575f80fd5b5061066d60048036038101906106689190612a7e565b610e99565b60405161067a9190612714565b60405180910390f35b34801561068e575f80fd5b50610697610f1b565b6040516106a49190612714565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612864565b610f21565b005b3480156106e0575f80fd5b506106fb60048036038101906106f691906128c1565b611088565b005b348015610708575f80fd5b5061071161110a565b005b60606003805461072290612ae9565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612ae9565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f806107ad61119a565b90506107ba8185856111a1565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f806107fc61119a565b9050610809858285611364565b6108148585856113ef565b60019150509392505050565b61dead81565b5f6012905090565b5f8061083861119a565b905061085981858561084a8589610e99565b6108549190612b46565b6111a1565b600191505092915050565b61086c610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108f15750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092790612bc3565b60405180910390fd5b5f5b83839050811015610a3a578160175f86868581811061095457610953612be1565b5b905060200201602081019061096991906128c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508383828181106109cb576109ca612be1565b5b90506020020160208101906109e091906128c1565b73ffffffffffffffffffffffffffffffffffffffff167f615139f923e54f7aea5d0332cf0e234a41cd14742d859714f9a0b504f145643783604051610a259190612678565b60405180910390a28080600101915050610932565b50505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b610a80611a8d565b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acb610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b505750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690612bc3565b60405180910390fd5b5f5b8251811015610c5f575f838281518110610bae57610bad612be1565b5b6020026020010151905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612c7e565b60405180910390fd5b610c518184611b0b565b508080600101915050610b91565b505050565b60105481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cca611a8d565b610cd35f611ba9565b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d3190612ae9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90612ae9565b8015610da85780601f10610d7f57610100808354040283529160200191610da8565b820191905f5260205f20905b815481529060010190602001808311610d8b57829003601f168201915b5050505050905090565b5f80610dbc61119a565b90505f610dc98286610e99565b905083811015610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590612d0c565b60405180910390fd5b610e1b82868684036111a1565b60019250505092915050565b5f80610e3161119a565b9050610e3e8185856113ef565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b610f29610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fae5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490612bc3565b60405180910390fd5b5f5b83839050811015611082578160185f86868581811061101157611010612be1565b5b905060200201602081019061102691906128c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fef565b50505050565b611090611a8d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612d9a565b60405180910390fd5b61110781611ba9565b50565b611112611a8d565b600960149054906101000a900460ff1615611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612e02565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690612e90565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490612f1e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113579190612714565b60405180910390a3505050565b5f61136f8484610e99565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113e957818110156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290612f86565b60405180910390fd5b6113e884848484036111a1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613014565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906130a2565b60405180910390fd5b600960149054906101000a900460ff168061152c575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061157d575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061310a565b60405180910390fd5b5f81036115d3576115ce83835f611c6c565b611a88565b5f6115dd30610c7d565b90505f600a5482101590508080156116015750600960159054906101000a900460ff165b8015611653575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561166c5750600960169054906101000a900460ff16155b80156116bf575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611712575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611755576001600960166101000a81548160ff02191690831515021790555061173a611ed8565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611804575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561180d575f90505b5f8115611a785760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561186b57505f601054115b156119365761189961271061188b6010548861216490919063ffffffff16565b61217990919063ffffffff16565b9050601054601354826118ac9190613128565b6118b69190613196565b60165f8282546118c69190612b46565b92505081905550601054601154826118de9190613128565b6118e89190613196565b60145f8282546118f89190612b46565b92505081905550601054601254826119109190613128565b61191a9190613196565b60155f82825461192a9190612b46565b92505081905550611a55565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561198d57505f600b54115b15611a54576119bb6127106119ad600b548861216490919063ffffffff16565b61217990919063ffffffff16565b9050600b54600e54826119ce9190613128565b6119d89190613196565b60165f8282546119e89190612b46565b92505081905550600b54600c5482611a009190613128565b611a0a9190613196565b60145f828254611a1a9190612b46565b92505081905550600b54600d5482611a329190613128565b611a3c9190613196565b60155f828254611a4c9190612b46565b925050819055505b5b5f811115611a6957611a68873083611c6c565b5b8085611a7591906131c6565b94505b611a83878787611c6c565b505050505b505050565b611a9561119a565b73ffffffffffffffffffffffffffffffffffffffff16611ab3610cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090613243565b60405180910390fd5b565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613014565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906130a2565b60405180910390fd5b611d5383838361218e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd906132d1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ebf9190612714565b60405180910390a3611ed2848484612193565b50505050565b5f611ee230610c7d565b90505f601554601454601654611ef89190612b46565b611f029190612b46565b90505f8060028360165486611f179190613128565b611f219190613196565b611f2b9190613196565b90505f611f41828661219890919063ffffffff16565b90505f479050611f50826121ad565b5f611f64824761219890919063ffffffff16565b90505f611f8e87611f806014548561216490919063ffffffff16565b61217990919063ffffffff16565b90505f611fb888611faa6015548661216490919063ffffffff16565b61217990919063ffffffff16565b90505f818385611fc891906131c6565b611fd291906131c6565b90505f6016819055505f6014819055505f6015819055505f87118015611ff757505f81115b156120445761200687826123e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161203b939291906132ef565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161208990613351565b5f6040518083038185875af1925050503d805f81146120c3576040519150601f19603f3d011682016040523d82523d5f602084013e6120c8565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161211390613351565b5f6040518083038185875af1925050503d805f811461214d576040519150601f19603f3d011682016040523d82523d5f602084013e612152565b606091505b50508098505050505050505050505050565b5f81836121719190613128565b905092915050565b5f81836121869190613196565b905092915050565b505050565b505050565b5f81836121a591906131c6565b905092915050565b5f600267ffffffffffffffff8111156121c9576121c86128ec565b5b6040519080825280602002602001820160405280156121f75781602001602082028036833780820191505090505b50905030815f8151811061220e5761220d612be1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d59190613379565b816001815181106122e9576122e8612be1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061234e307f0000000000000000000000000000000000000000000000000000000000000000846111a1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016123af959493929190613494565b5f604051808303815f87803b1580156123c6575f80fd5b505af11580156123d8573d5f803e3d5ffd5b505050505050565b61240b307f0000000000000000000000000000000000000000000000000000000000000000846111a1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612490969594939291906134ec565b60606040518083038185885af11580156124ac573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124d1919061355f565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561250f5780820151818401526020810190506124f4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612534826124d8565b61253e81856124e2565b935061254e8185602086016124f2565b6125578161251a565b840191505092915050565b5f6020820190508181035f83015261257a818461252a565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125bc82612593565b9050919050565b6125cc816125b2565b81146125d6575f80fd5b50565b5f813590506125e7816125c3565b92915050565b5f819050919050565b6125ff816125ed565b8114612609575f80fd5b50565b5f8135905061261a816125f6565b92915050565b5f80604083850312156126365761263561258b565b5b5f612643858286016125d9565b92505060206126548582860161260c565b9150509250929050565b5f8115159050919050565b6126728161265e565b82525050565b5f60208201905061268b5f830184612669565b92915050565b5f819050919050565b5f6126b46126af6126aa84612593565b612691565b612593565b9050919050565b5f6126c58261269a565b9050919050565b5f6126d6826126bb565b9050919050565b6126e6816126cc565b82525050565b5f6020820190506126ff5f8301846126dd565b92915050565b61270e816125ed565b82525050565b5f6020820190506127275f830184612705565b92915050565b5f805f606084860312156127445761274361258b565b5b5f612751868287016125d9565b9350506020612762868287016125d9565b92505060406127738682870161260c565b9150509250925092565b612786816125b2565b82525050565b5f60208201905061279f5f83018461277d565b92915050565b5f60ff82169050919050565b6127ba816127a5565b82525050565b5f6020820190506127d35f8301846127b1565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126127fa576127f96127d9565b5b8235905067ffffffffffffffff811115612817576128166127dd565b5b602083019150836020820283011115612833576128326127e1565b5b9250929050565b6128438161265e565b811461284d575f80fd5b50565b5f8135905061285e8161283a565b92915050565b5f805f6040848603121561287b5761287a61258b565b5b5f84013567ffffffffffffffff8111156128985761289761258f565b5b6128a4868287016127e5565b935093505060206128b786828701612850565b9150509250925092565b5f602082840312156128d6576128d561258b565b5b5f6128e3848285016125d9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129228261251a565b810181811067ffffffffffffffff82111715612941576129406128ec565b5b80604052505050565b5f612953612582565b905061295f8282612919565b919050565b5f67ffffffffffffffff82111561297e5761297d6128ec565b5b602082029050602081019050919050565b5f6129a161299c84612964565b61294a565b905080838252602082019050602084028301858111156129c4576129c36127e1565b5b835b818110156129ed57806129d988826125d9565b8452602084019350506020810190506129c6565b5050509392505050565b5f82601f830112612a0b57612a0a6127d9565b5b8135612a1b84826020860161298f565b91505092915050565b5f8060408385031215612a3a57612a3961258b565b5b5f83013567ffffffffffffffff811115612a5757612a5661258f565b5b612a63858286016129f7565b9250506020612a7485828601612850565b9150509250929050565b5f8060408385031215612a9457612a9361258b565b5b5f612aa1858286016125d9565b9250506020612ab2858286016125d9565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b0057607f821691505b602082108103612b1357612b12612abc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b50826125ed565b9150612b5b836125ed565b9250828201905080821115612b7357612b72612b19565b5b92915050565b7f4e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612bad6001836124e2565b9150612bb882612b79565b602082019050919050565b5f6020820190508181035f830152612bda81612ba1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612c686039836124e2565b9150612c7382612c0e565b604082019050919050565b5f6020820190508181035f830152612c9581612c5c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612cf66025836124e2565b9150612d0182612c9c565b604082019050919050565b5f6020820190508181035f830152612d2381612cea565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612d846026836124e2565b9150612d8f82612d2a565b604082019050919050565b5f6020820190508181035f830152612db181612d78565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f612dec6017836124e2565b9150612df782612db8565b602082019050919050565b5f6020820190508181035f830152612e1981612de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612e7a6024836124e2565b9150612e8582612e20565b604082019050919050565b5f6020820190508181035f830152612ea781612e6e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612f086022836124e2565b9150612f1382612eae565b604082019050919050565b5f6020820190508181035f830152612f3581612efc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612f70601d836124e2565b9150612f7b82612f3c565b602082019050919050565b5f6020820190508181035f830152612f9d81612f64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612ffe6025836124e2565b915061300982612fa4565b604082019050919050565b5f6020820190508181035f83015261302b81612ff2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61308c6023836124e2565b915061309782613032565b604082019050919050565b5f6020820190508181035f8301526130b981613080565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f6130f46018836124e2565b91506130ff826130c0565b602082019050919050565b5f6020820190508181035f830152613121816130e8565b9050919050565b5f613132826125ed565b915061313d836125ed565b925082820261314b816125ed565b9150828204841483151761316257613161612b19565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131a0826125ed565b91506131ab836125ed565b9250826131bb576131ba613169565b5b828204905092915050565b5f6131d0826125ed565b91506131db836125ed565b92508282039050818111156131f3576131f2612b19565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61322d6020836124e2565b9150613238826131f9565b602082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6132bb6026836124e2565b91506132c682613261565b604082019050919050565b5f6020820190508181035f8301526132e8816132af565b9050919050565b5f6060820190506133025f830186612705565b61330f6020830185612705565b61331c6040830184612705565b949350505050565b5f81905092915050565b50565b5f61333c5f83613324565b91506133478261332e565b5f82019050919050565b5f61335b82613331565b9150819050919050565b5f81519050613373816125c3565b92915050565b5f6020828403121561338e5761338d61258b565b5b5f61339b84828501613365565b91505092915050565b5f819050919050565b5f6133c76133c26133bd846133a4565b612691565b6125ed565b9050919050565b6133d7816133ad565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61340f816125b2565b82525050565b5f6134208383613406565b60208301905092915050565b5f602082019050919050565b5f613442826133dd565b61344c81856133e7565b9350613457836133f7565b805f5b8381101561348757815161346e8882613415565b97506134798361342c565b92505060018101905061345a565b5085935050505092915050565b5f60a0820190506134a75f830188612705565b6134b460208301876133ce565b81810360408301526134c68186613438565b90506134d5606083018561277d565b6134e26080830184612705565b9695505050505050565b5f60c0820190506134ff5f83018961277d565b61350c6020830188612705565b61351960408301876133ce565b61352660608301866133ce565b613533608083018561277d565b61354060a0830184612705565b979650505050505050565b5f81519050613559816125f6565b92915050565b5f805f606084860312156135765761357561258b565b5b5f6135838682870161354b565b93505060206135948682870161354b565b92505060406135a58682870161354b565b915050925092509256fea26469706673582212200f5b705f3d7b1260cc0b3c2b34a5617614933188a09c6b3d45df17614c573a8864736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101d0575f3560e01c806370a08231116100f6578063c04a541411610094578063e2f4560511610063578063e2f4560514610683578063eaf5aa98146106ad578063f2fde38b146106d5578063fb201b1d146106fd576101d7565b8063c04a5414146105c9578063d4698016146105f3578063d85ba0631461061d578063dd62ed3e14610647576101d7565b80638da5cb5b116100d05780638da5cb5b146104fd57806395d89b4114610527578063a457c2d714610551578063a9059cbb1461058d576101d7565b806370a0823114610481578063715018a6146104bd57806375f0a874146104d3576101d7565b8063395093511161016e57806362778bd71161013d57806362778bd7146103dd578063672c0b7b146104055780636a486a8e1461042d5780636ddd171314610457576101d7565b8063395093511461032557806348b24aeb1461036157806349bd5a5e146103895780634ada218b146103b3576101d7565b806318160ddd116101aa57806318160ddd1461026b57806323b872dd1461029557806327c8f835146102d1578063313ce567146102fb576101d7565b806306fdde03146101db578063095ea7b3146102055780631694505e14610241576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610713565b6040516101fc9190612562565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612620565b6107a3565b6040516102389190612678565b60405180910390f35b34801561024c575f80fd5b506102556107c5565b60405161026291906126ec565b60405180910390f35b348015610276575f80fd5b5061027f6107e9565b60405161028c9190612714565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061272d565b6107f2565b6040516102c89190612678565b60405180910390f35b3480156102dc575f80fd5b506102e5610820565b6040516102f2919061278c565b60405180910390f35b348015610306575f80fd5b5061030f610826565b60405161031c91906127c0565b60405180910390f35b348015610330575f80fd5b5061034b60048036038101906103469190612620565b61082e565b6040516103589190612678565b60405180910390f35b34801561036c575f80fd5b5061038760048036038101906103829190612864565b610864565b005b348015610394575f80fd5b5061039d610a40565b6040516103aa919061278c565b60405180910390f35b3480156103be575f80fd5b506103c7610a65565b6040516103d49190612678565b60405180910390f35b3480156103e8575f80fd5b5061040360048036038101906103fe91906128c1565b610a78565b005b348015610410575f80fd5b5061042b60048036038101906104269190612a24565b610ac3565b005b348015610438575f80fd5b50610441610c64565b60405161044e9190612714565b60405180910390f35b348015610462575f80fd5b5061046b610c6a565b6040516104789190612678565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a291906128c1565b610c7d565b6040516104b49190612714565b60405180910390f35b3480156104c8575f80fd5b506104d1610cc2565b005b3480156104de575f80fd5b506104e7610cd5565b6040516104f4919061278c565b60405180910390f35b348015610508575f80fd5b50610511610cfa565b60405161051e919061278c565b60405180910390f35b348015610532575f80fd5b5061053b610d22565b6040516105489190612562565b60405180910390f35b34801561055c575f80fd5b5061057760048036038101906105729190612620565b610db2565b6040516105849190612678565b60405180910390f35b348015610598575f80fd5b506105b360048036038101906105ae9190612620565b610e27565b6040516105c09190612678565b60405180910390f35b3480156105d4575f80fd5b506105dd610e49565b6040516105ea919061278c565b60405180910390f35b3480156105fe575f80fd5b50610607610e6e565b604051610614919061278c565b60405180910390f35b348015610628575f80fd5b50610631610e93565b60405161063e9190612714565b60405180910390f35b348015610652575f80fd5b5061066d60048036038101906106689190612a7e565b610e99565b60405161067a9190612714565b60405180910390f35b34801561068e575f80fd5b50610697610f1b565b6040516106a49190612714565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612864565b610f21565b005b3480156106e0575f80fd5b506106fb60048036038101906106f691906128c1565b611088565b005b348015610708575f80fd5b5061071161110a565b005b60606003805461072290612ae9565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612ae9565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f806107ad61119a565b90506107ba8185856111a1565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f806107fc61119a565b9050610809858285611364565b6108148585856113ef565b60019150509392505050565b61dead81565b5f6012905090565b5f8061083861119a565b905061085981858561084a8589610e99565b6108549190612b46565b6111a1565b600191505092915050565b61086c610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108f15750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092790612bc3565b60405180910390fd5b5f5b83839050811015610a3a578160175f86868581811061095457610953612be1565b5b905060200201602081019061096991906128c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508383828181106109cb576109ca612be1565b5b90506020020160208101906109e091906128c1565b73ffffffffffffffffffffffffffffffffffffffff167f615139f923e54f7aea5d0332cf0e234a41cd14742d859714f9a0b504f145643783604051610a259190612678565b60405180910390a28080600101915050610932565b50505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960149054906101000a900460ff1681565b610a80611a8d565b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acb610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b505750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690612bc3565b60405180910390fd5b5f5b8251811015610c5f575f838281518110610bae57610bad612be1565b5b6020026020010151905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612c7e565b60405180910390fd5b610c518184611b0b565b508080600101915050610b91565b505050565b60105481565b600960159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cca611a8d565b610cd35f611ba9565b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d3190612ae9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90612ae9565b8015610da85780601f10610d7f57610100808354040283529160200191610da8565b820191905f5260205f20905b815481529060010190602001808311610d8b57829003601f168201915b5050505050905090565b5f80610dbc61119a565b90505f610dc98286610e99565b905083811015610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590612d0c565b60405180910390fd5b610e1b82868684036111a1565b60019250505092915050565b5f80610e3161119a565b9050610e3e8185856113ef565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b610f29610cfa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fae5750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490612bc3565b60405180910390fd5b5f5b83839050811015611082578160185f86868581811061101157611010612be1565b5b905060200201602081019061102691906128c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fef565b50505050565b611090611a8d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612d9a565b60405180910390fd5b61110781611ba9565b50565b611112611a8d565b600960149054906101000a900460ff1615611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612e02565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690612e90565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490612f1e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113579190612714565b60405180910390a3505050565b5f61136f8484610e99565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113e957818110156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290612f86565b60405180910390fd5b6113e884848484036111a1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613014565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906130a2565b60405180910390fd5b600960149054906101000a900460ff168061152c575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061157d575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061310a565b60405180910390fd5b5f81036115d3576115ce83835f611c6c565b611a88565b5f6115dd30610c7d565b90505f600a5482101590508080156116015750600960159054906101000a900460ff165b8015611653575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561166c5750600960169054906101000a900460ff16155b80156116bf575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611712575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611755576001600960166101000a81548160ff02191690831515021790555061173a611ed8565b5f600960166101000a81548160ff0219169083151502179055505b5f600960169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611804575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561180d575f90505b5f8115611a785760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561186b57505f601054115b156119365761189961271061188b6010548861216490919063ffffffff16565b61217990919063ffffffff16565b9050601054601354826118ac9190613128565b6118b69190613196565b60165f8282546118c69190612b46565b92505081905550601054601154826118de9190613128565b6118e89190613196565b60145f8282546118f89190612b46565b92505081905550601054601254826119109190613128565b61191a9190613196565b60155f82825461192a9190612b46565b92505081905550611a55565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561198d57505f600b54115b15611a54576119bb6127106119ad600b548861216490919063ffffffff16565b61217990919063ffffffff16565b9050600b54600e54826119ce9190613128565b6119d89190613196565b60165f8282546119e89190612b46565b92505081905550600b54600c5482611a009190613128565b611a0a9190613196565b60145f828254611a1a9190612b46565b92505081905550600b54600d5482611a329190613128565b611a3c9190613196565b60155f828254611a4c9190612b46565b925050819055505b5b5f811115611a6957611a68873083611c6c565b5b8085611a7591906131c6565b94505b611a83878787611c6c565b505050505b505050565b611a9561119a565b73ffffffffffffffffffffffffffffffffffffffff16611ab3610cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090613243565b60405180910390fd5b565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613014565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906130a2565b60405180910390fd5b611d5383838361218e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd906132d1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ebf9190612714565b60405180910390a3611ed2848484612193565b50505050565b5f611ee230610c7d565b90505f601554601454601654611ef89190612b46565b611f029190612b46565b90505f8060028360165486611f179190613128565b611f219190613196565b611f2b9190613196565b90505f611f41828661219890919063ffffffff16565b90505f479050611f50826121ad565b5f611f64824761219890919063ffffffff16565b90505f611f8e87611f806014548561216490919063ffffffff16565b61217990919063ffffffff16565b90505f611fb888611faa6015548661216490919063ffffffff16565b61217990919063ffffffff16565b90505f818385611fc891906131c6565b611fd291906131c6565b90505f6016819055505f6014819055505f6015819055505f87118015611ff757505f81115b156120445761200687826123e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161203b939291906132ef565b60405180910390a15b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161208990613351565b5f6040518083038185875af1925050503d805f81146120c3576040519150601f19603f3d011682016040523d82523d5f602084013e6120c8565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161211390613351565b5f6040518083038185875af1925050503d805f811461214d576040519150601f19603f3d011682016040523d82523d5f602084013e612152565b606091505b50508098505050505050505050505050565b5f81836121719190613128565b905092915050565b5f81836121869190613196565b905092915050565b505050565b505050565b5f81836121a591906131c6565b905092915050565b5f600267ffffffffffffffff8111156121c9576121c86128ec565b5b6040519080825280602002602001820160405280156121f75781602001602082028036833780820191505090505b50905030815f8151811061220e5761220d612be1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d59190613379565b816001815181106122e9576122e8612be1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061234e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111a1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016123af959493929190613494565b5f604051808303815f87803b1580156123c6575f80fd5b505af11580156123d8573d5f803e3d5ffd5b505050505050565b61240b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111a1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612490969594939291906134ec565b60606040518083038185885af11580156124ac573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124d1919061355f565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561250f5780820151818401526020810190506124f4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612534826124d8565b61253e81856124e2565b935061254e8185602086016124f2565b6125578161251a565b840191505092915050565b5f6020820190508181035f83015261257a818461252a565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125bc82612593565b9050919050565b6125cc816125b2565b81146125d6575f80fd5b50565b5f813590506125e7816125c3565b92915050565b5f819050919050565b6125ff816125ed565b8114612609575f80fd5b50565b5f8135905061261a816125f6565b92915050565b5f80604083850312156126365761263561258b565b5b5f612643858286016125d9565b92505060206126548582860161260c565b9150509250929050565b5f8115159050919050565b6126728161265e565b82525050565b5f60208201905061268b5f830184612669565b92915050565b5f819050919050565b5f6126b46126af6126aa84612593565b612691565b612593565b9050919050565b5f6126c58261269a565b9050919050565b5f6126d6826126bb565b9050919050565b6126e6816126cc565b82525050565b5f6020820190506126ff5f8301846126dd565b92915050565b61270e816125ed565b82525050565b5f6020820190506127275f830184612705565b92915050565b5f805f606084860312156127445761274361258b565b5b5f612751868287016125d9565b9350506020612762868287016125d9565b92505060406127738682870161260c565b9150509250925092565b612786816125b2565b82525050565b5f60208201905061279f5f83018461277d565b92915050565b5f60ff82169050919050565b6127ba816127a5565b82525050565b5f6020820190506127d35f8301846127b1565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126127fa576127f96127d9565b5b8235905067ffffffffffffffff811115612817576128166127dd565b5b602083019150836020820283011115612833576128326127e1565b5b9250929050565b6128438161265e565b811461284d575f80fd5b50565b5f8135905061285e8161283a565b92915050565b5f805f6040848603121561287b5761287a61258b565b5b5f84013567ffffffffffffffff8111156128985761289761258f565b5b6128a4868287016127e5565b935093505060206128b786828701612850565b9150509250925092565b5f602082840312156128d6576128d561258b565b5b5f6128e3848285016125d9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129228261251a565b810181811067ffffffffffffffff82111715612941576129406128ec565b5b80604052505050565b5f612953612582565b905061295f8282612919565b919050565b5f67ffffffffffffffff82111561297e5761297d6128ec565b5b602082029050602081019050919050565b5f6129a161299c84612964565b61294a565b905080838252602082019050602084028301858111156129c4576129c36127e1565b5b835b818110156129ed57806129d988826125d9565b8452602084019350506020810190506129c6565b5050509392505050565b5f82601f830112612a0b57612a0a6127d9565b5b8135612a1b84826020860161298f565b91505092915050565b5f8060408385031215612a3a57612a3961258b565b5b5f83013567ffffffffffffffff811115612a5757612a5661258f565b5b612a63858286016129f7565b9250506020612a7485828601612850565b9150509250929050565b5f8060408385031215612a9457612a9361258b565b5b5f612aa1858286016125d9565b9250506020612ab2858286016125d9565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b0057607f821691505b602082108103612b1357612b12612abc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b50826125ed565b9150612b5b836125ed565b9250828201905080821115612b7357612b72612b19565b5b92915050565b7f4e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612bad6001836124e2565b9150612bb882612b79565b602082019050919050565b5f6020820190508181035f830152612bda81612ba1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612c686039836124e2565b9150612c7382612c0e565b604082019050919050565b5f6020820190508181035f830152612c9581612c5c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612cf66025836124e2565b9150612d0182612c9c565b604082019050919050565b5f6020820190508181035f830152612d2381612cea565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612d846026836124e2565b9150612d8f82612d2a565b604082019050919050565b5f6020820190508181035f830152612db181612d78565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f612dec6017836124e2565b9150612df782612db8565b602082019050919050565b5f6020820190508181035f830152612e1981612de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612e7a6024836124e2565b9150612e8582612e20565b604082019050919050565b5f6020820190508181035f830152612ea781612e6e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612f086022836124e2565b9150612f1382612eae565b604082019050919050565b5f6020820190508181035f830152612f3581612efc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612f70601d836124e2565b9150612f7b82612f3c565b602082019050919050565b5f6020820190508181035f830152612f9d81612f64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612ffe6025836124e2565b915061300982612fa4565b604082019050919050565b5f6020820190508181035f83015261302b81612ff2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61308c6023836124e2565b915061309782613032565b604082019050919050565b5f6020820190508181035f8301526130b981613080565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f6130f46018836124e2565b91506130ff826130c0565b602082019050919050565b5f6020820190508181035f830152613121816130e8565b9050919050565b5f613132826125ed565b915061313d836125ed565b925082820261314b816125ed565b9150828204841483151761316257613161612b19565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131a0826125ed565b91506131ab836125ed565b9250826131bb576131ba613169565b5b828204905092915050565b5f6131d0826125ed565b91506131db836125ed565b92508282039050818111156131f3576131f2612b19565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61322d6020836124e2565b9150613238826131f9565b602082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6132bb6026836124e2565b91506132c682613261565b604082019050919050565b5f6020820190508181035f8301526132e8816132af565b9050919050565b5f6060820190506133025f830186612705565b61330f6020830185612705565b61331c6040830184612705565b949350505050565b5f81905092915050565b50565b5f61333c5f83613324565b91506133478261332e565b5f82019050919050565b5f61335b82613331565b9150819050919050565b5f81519050613373816125c3565b92915050565b5f6020828403121561338e5761338d61258b565b5b5f61339b84828501613365565b91505092915050565b5f819050919050565b5f6133c76133c26133bd846133a4565b612691565b6125ed565b9050919050565b6133d7816133ad565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61340f816125b2565b82525050565b5f6134208383613406565b60208301905092915050565b5f602082019050919050565b5f613442826133dd565b61344c81856133e7565b9350613457836133f7565b805f5b8381101561348757815161346e8882613415565b97506134798361342c565b92505060018101905061345a565b5085935050505092915050565b5f60a0820190506134a75f830188612705565b6134b460208301876133ce565b81810360408301526134c68186613438565b90506134d5606083018561277d565b6134e26080830184612705565b9695505050505050565b5f60c0820190506134ff5f83018961277d565b61350c6020830188612705565b61351960408301876133ce565b61352660608301866133ce565b613533608083018561277d565b61354060a0830184612705565b979650505050505050565b5f81519050613559816125f6565b92915050565b5f805f606084860312156135765761357561258b565b5b5f6135838682870161354b565b93505060206135948682870161354b565b92505060406135a58682870161354b565b915050925092509256fea26469706673582212200f5b705f3d7b1260cc0b3c2b34a5617614933188a09c6b3d45df17614c573a8864736f6c63430008180033

Deployed Bytecode Sourcemap

38821:9210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6115:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7033:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38895:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6430:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7240:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39103:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6331:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7507:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42829:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38953:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39165:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42733:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41864:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39486:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39198:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6544:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11751:103;;;;;;;;;;;;;:::i;:::-;;38990:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11520:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6221:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7751:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6677:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39027:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39066:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39301:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6876:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39259:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42453:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11860:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41687:169;;;;;;;;;;;;;:::i;:::-;;6115:100;6169:13;6202:5;6195:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6115:100;:::o;7033:201::-;7116:4;7133:13;7149:12;:10;:12::i;:::-;7133:28;;7172:32;7181:5;7188:7;7197:6;7172:8;:32::i;:::-;7222:4;7215:11;;;7033:201;;;;:::o;38895:51::-;;;:::o;6430:108::-;6491:7;6518:12;;6511:19;;6430:108;:::o;7240:261::-;7337:4;7354:15;7372:12;:10;:12::i;:::-;7354:30;;7395:38;7411:4;7417:7;7426:6;7395:15;:38::i;:::-;7444:27;7454:4;7460:2;7464:6;7444:9;:27::i;:::-;7489:4;7482:11;;;7240:261;;;;;:::o;39103:53::-;39149:6;39103:53;:::o;6331:93::-;6389:5;6414:2;6407:9;;6331:93;:::o;7507:238::-;7595:4;7612:13;7628:12;:10;:12::i;:::-;7612:28;;7651:64;7660:5;7667:7;7704:10;7676:25;7686:5;7693:7;7676:9;:25::i;:::-;:38;;;;:::i;:::-;7651:8;:64::i;:::-;7733:4;7726:11;;;7507:238;;;;:::o;42829:309::-;42933:7;:5;:7::i;:::-;42919:21;;:10;:21;;;:46;;;;42958:7;;;;;;;;;;;42944:21;;:10;:21;;;42919:46;42911:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42983:9;42978:157;43002:8;;:15;;42998:1;:19;42978:157;;;43061:13;43035:10;:23;43046:8;;43055:1;43046:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43035:23;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43100:8;;43109:1;43100:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43090:37;;;43113:13;43090:37;;;;;;:::i;:::-;;;;;;;;43019:3;;;;;;;42978:157;;;;42829:309;;;:::o;38953:28::-;;;;;;;;;;;;;:::o;39165:26::-;;;;;;;;;;;;;:::o;42733:89::-;11481:13;:11;:13::i;:::-;42806:8:::1;42796:7;;:18;;;;;;;;;;;;;;;;;;42733:89:::0;:::o;41864:384::-;41961:7;:5;:7::i;:::-;41947:21;;:10;:21;;;:46;;;;41986:7;;;;;;;;;;;41972:21;;:10;:21;;;41947:46;41939:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42011:9;42006:239;42030:5;:12;42026:1;:16;42006:239;;;42060:12;42075:5;42081:1;42075:8;;;;;;;;:::i;:::-;;;;;;;;42060:23;;42110:13;;;;;;;;;;;42102:21;;:4;:21;;;42094:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;42196:41;42225:4;42231:5;42196:28;:41::i;:::-;42049:196;42044:3;;;;;;;42006:239;;;;41864:384;;:::o;39486:28::-;;;;:::o;39198:23::-;;;;;;;;;;;;;:::o;6544:127::-;6618:7;6645:9;:18;6655:7;6645:18;;;;;;;;;;;;;;;;6638:25;;6544:127;;;:::o;11751:103::-;11481:13;:11;:13::i;:::-;11816:30:::1;11843:1;11816:18;:30::i;:::-;11751:103::o:0;38990:30::-;;;;;;;;;;;;;:::o;11520:87::-;11566:7;11593:6;;;;;;;;;;;11586:13;;11520:87;:::o;6221:104::-;6277:13;6310:7;6303:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6221:104;:::o;7751:436::-;7844:4;7861:13;7877:12;:10;:12::i;:::-;7861:28;;7900:24;7927:25;7937:5;7944:7;7927:9;:25::i;:::-;7900:52;;7991:15;7971:16;:35;;7963:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8084:60;8093:5;8100:7;8128:15;8109:16;:34;8084:8;:60::i;:::-;8175:4;8168:11;;;;7751:436;;;;:::o;6677:193::-;6756:4;6773:13;6789:12;:10;:12::i;:::-;6773:28;;6812;6822:5;6829:2;6833:6;6812:9;:28::i;:::-;6858:4;6851:11;;;6677:193;;;;:::o;39027:32::-;;;;;;;;;;;;;:::o;39066:30::-;;;;;;;;;;;;;:::o;39301:27::-;;;;:::o;6876:151::-;6965:7;6992:11;:18;7004:5;6992:18;;;;;;;;;;;;;;;:27;7011:7;6992:27;;;;;;;;;;;;;;;;6985:34;;6876:151;;;;:::o;39259:33::-;;;;:::o;42453:272::-;42554:7;:5;:7::i;:::-;42540:21;;:10;:21;;;:46;;;;42579:7;;;;;;;;;;;42565:21;;:10;:21;;;42540:46;42532:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42607:9;42603:115;42626:8;;:15;;42622:1;:19;42603:115;;;42698:8;42663:19;:32;42683:8;;42692:1;42683:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42663:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;42643:3;;;;;;;42603:115;;;;42453:272;;;:::o;11860:201::-;11481:13;:11;:13::i;:::-;11969:1:::1;11949:22;;:8;:22;;::::0;11941:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12025:28;12044:8;12025:18;:28::i;:::-;11860:201:::0;:::o;41687:169::-;11481:13;:11;:13::i;:::-;41745:14:::1;;;;;;;;;;;41744:15;41736:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41815:4;41798:14;;:21;;;;;;;;;;;;;;;;;;41844:4;41830:11;;:18;;;;;;;;;;;;;;;;;;41687:169::o:0;5491:98::-;5544:7;5571:10;5564:17;;5491:98;:::o;10242:346::-;10361:1;10344:19;;:5;:19;;;10336:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10442:1;10423:21;;:7;:21;;;10415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10526:6;10496:11;:18;10508:5;10496:18;;;;;;;;;;;;;;;:27;10515:7;10496:27;;;;;;;;;;;;;;;:36;;;;10564:7;10548:32;;10557:5;10548:32;;;10573:6;10548:32;;;;;;:::i;:::-;;;;;;;;10242:346;;;:::o;10594:419::-;10695:24;10722:25;10732:5;10739:7;10722:9;:25::i;:::-;10695:52;;10782:17;10762:16;:37;10758:248;;10844:6;10824:16;:26;;10816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10928:51;10937:5;10944:7;10972:6;10953:16;:25;10928:8;:51::i;:::-;10758:248;10684:329;10594:419;;;:::o;43148:2372::-;43296:1;43280:18;;:4;:18;;;43272:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43373:1;43359:16;;:2;:16;;;43351:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43434:14;;;;;;;;;;;:43;;;;43452:19;:25;43472:4;43452:25;;;;;;;;;;;;;;;;;;;;;;;;;43434:43;:70;;;;43481:19;:23;43501:2;43481:23;;;;;;;;;;;;;;;;;;;;;;;;;43434:70;43426:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;43558:1;43548:6;:11;43544:93;;43576:28;43592:4;43598:2;43602:1;43576:15;:28::i;:::-;43619:7;;43544:93;43651:28;43682:24;43700:4;43682:9;:24::i;:::-;43651:55;;43719:12;43758:18;;43734:20;:42;;43719:57;;43807:7;:35;;;;;43831:11;;;;;;;;;;;43807:35;:70;;;;;43845:26;:32;43872:4;43845:32;;;;;;;;;;;;;;;;;;;;;;;;;43807:70;:82;;;;;43880:9;;;;;;;;;;;43879:10;43807:82;:124;;;;;43906:19;:25;43926:4;43906:25;;;;;;;;;;;;;;;;;;;;;;;;;43905:26;43807:124;:165;;;;;43949:19;:23;43969:2;43949:23;;;;;;;;;;;;;;;;;;;;;;;;;43948:24;43807:165;43789:300;;;44011:4;43999:9;;:16;;;;;;;;;;;;;;;;;;44032:11;:9;:11::i;:::-;44072:5;44060:9;;:17;;;;;;;;;;;;;;;;;;43789:300;44101:12;44117:9;;;;;;;;;;;44116:10;44101:25;;44143:19;:25;44163:4;44143:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44172:19;:23;44192:2;44172:23;;;;;;;;;;;;;;;;;;;;;;;;;44143:52;44139:100;;;44222:5;44212:15;;44139:100;44251:12;44284:7;44280:1187;;;44336:26;:30;44363:2;44336:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44386:1;44370:13;;:17;44336:51;44332:986;;;44415:36;44445:5;44415:25;44426:13;;44415:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;44408:43;;44564:13;;44522:17;;44515:4;:24;;;;:::i;:::-;44514:63;;;;:::i;:::-;44470:19;;:107;;;;;;;:::i;:::-;;;;;;;;44690:13;;44648:17;;44641:4;:24;;;;:::i;:::-;44640:63;;;;:::i;:::-;44596:19;;:107;;;;;;;:::i;:::-;;;;;;;;44820:13;;44776:19;;44769:4;:26;;;;:::i;:::-;44768:65;;;;:::i;:::-;44722:21;;:111;;;;;;;:::i;:::-;;;;;;;;44332:986;;;44895:26;:32;44922:4;44895:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;44946:1;44931:12;;:16;44895:52;44891:427;;;44975:35;45004:5;44975:24;44986:12;;44975:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;44968:42;;45080:12;;45060:16;;45053:4;:23;;;;:::i;:::-;45052:40;;;;:::i;:::-;45029:19;;:63;;;;;;;:::i;:::-;;;;;;;;45162:12;;45142:16;;45135:4;:23;;;;:::i;:::-;45134:40;;;;:::i;:::-;45111:19;;:63;;;;;;;:::i;:::-;;;;;;;;45290:12;;45247:18;;45240:4;:25;;;;:::i;:::-;45239:63;;;;:::i;:::-;45193:21;;:109;;;;;;;:::i;:::-;;;;;;;;44891:427;44332:986;45345:1;45338:4;:8;45334:91;;;45367:42;45383:4;45397;45404;45367:15;:42::i;:::-;45334:91;45451:4;45441:14;;;;;:::i;:::-;;;44280:1187;45479:33;45495:4;45501:2;45505:6;45479:15;:33::i;:::-;43261:2259;;;;43148:2372;;;;:::o;11613:132::-;11688:12;:10;:12::i;:::-;11677:23;;:7;:5;:7::i;:::-;:23;;;11669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11613:132::o;42258:187::-;42376:5;42341:26;:32;42368:4;42341:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;42431:5;42397:40;;42425:4;42397:40;;;;;;;;;;;;42258:187;;:::o;12067:191::-;12141:16;12160:6;;;;;;;;;;;12141:25;;12186:8;12177:6;;:17;;;;;;;;;;;;;;;;;;12241:8;12210:40;;12231:8;12210:40;;;;;;;;;;;;12130:128;12067:191;:::o;8195:806::-;8308:1;8292:18;;:4;:18;;;8284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8385:1;8371:16;;:2;:16;;;8363:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8440:38;8461:4;8467:2;8471:6;8440:20;:38::i;:::-;8491:19;8513:9;:15;8523:4;8513:15;;;;;;;;;;;;;;;;8491:37;;8562:6;8547:11;:21;;8539:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8679:6;8665:11;:20;8647:9;:15;8657:4;8647:15;;;;;;;;;;;;;;;:38;;;;8882:6;8865:9;:13;8875:2;8865:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8932:2;8917:26;;8926:4;8917:26;;;8936:6;8917:26;;;;;;:::i;:::-;;;;;;;;8956:37;8976:4;8982:2;8986:6;8956:19;:37::i;:::-;8273:728;8195:806;;;:::o;46419:1607::-;46460:23;46486:24;46504:4;46486:9;:24::i;:::-;46460:50;;46521:25;46619:21;;46584:19;;46549;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;46521:119;;46651:12;46678:23;46792:1;46759:17;46723:19;;46705:15;:37;;;;:::i;:::-;46704:72;;;;:::i;:::-;:89;;;;:::i;:::-;46678:115;;46804:26;46833:36;46853:15;46833;:19;;:36;;;;:::i;:::-;46804:65;;46882:25;46910:21;46882:49;;46944:37;46962:18;46944:17;:37::i;:::-;46994:18;47015:44;47041:17;47015:21;:25;;:44;;;;:::i;:::-;46994:65;;47072:23;47098:82;47152:17;47098:35;47113:19;;47098:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;47072:108;;47193:25;47221:84;47277:17;47221:37;47236:21;;47221:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;47193:112;;47318:23;47401:17;47370:15;47344:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;47318:100;;47453:1;47431:19;:23;;;;47487:1;47465:19;:23;;;;47523:1;47499:21;:25;;;;47559:1;47541:15;:19;:42;;;;;47582:1;47564:15;:19;47541:42;47537:280;;;47600:47;47614:15;47631;47600:13;:47::i;:::-;47667:138;47700:18;47737:15;47771:19;;47667:138;;;;;;;;:::i;:::-;;;;;;;;47537:280;47851:17;;;;;;;;;;;47843:31;;47882:17;47843:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47829:75;;;;;47939:15;;;;;;;;;;;47931:29;;47982:21;47931:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47917:101;;;;;46449:1577;;;;;;;;;;46419:1607::o;28851:98::-;28909:7;28940:1;28936;:5;;;;:::i;:::-;28929:12;;28851:98;;;;:::o;28961:::-;29019:7;29050:1;29046;:5;;;;:::i;:::-;29039:12;;28961:98;;;;:::o;11019:91::-;;;;:::o;11116:90::-;;;;:::o;28741:98::-;28799:7;28830:1;28826;:5;;;;:::i;:::-;28819:12;;28741:98;;;;:::o;45528:503::-;45596:21;45634:1;45620:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45596:40;;45665:4;45647;45652:1;45647:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45691:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45681:4;45686:1;45681:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45726:62;45743:4;45758:15;45776:11;45726:8;:62::i;:::-;45827:15;:66;;;45908:11;45934:1;45950:4;45977;45997:15;45827:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45585:446;45528:503;:::o;46039:372::-;46122:62;46139:4;46154:15;46172:11;46122:8;:62::i;:::-;46197:15;:31;;;46236:9;46269:4;46289:11;46315:1;46331;46347:15;;;;;;;;;;;46377;46197:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46039:372;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:117::-;6292:1;6289;6282:12;6306:117;6415:1;6412;6405:12;6429:117;6538:1;6535;6528:12;6569:568;6642:8;6652:6;6702:3;6695:4;6687:6;6683:17;6679:27;6669:122;;6710:79;;:::i;:::-;6669:122;6823:6;6810:20;6800:30;;6853:18;6845:6;6842:30;6839:117;;;6875:79;;:::i;:::-;6839:117;6989:4;6981:6;6977:17;6965:29;;7043:3;7035:4;7027:6;7023:17;7013:8;7009:32;7006:41;7003:128;;;7050:79;;:::i;:::-;7003:128;6569:568;;;;;:::o;7143:116::-;7213:21;7228:5;7213:21;:::i;:::-;7206:5;7203:32;7193:60;;7249:1;7246;7239:12;7193:60;7143:116;:::o;7265:133::-;7308:5;7346:6;7333:20;7324:29;;7362:30;7386:5;7362:30;:::i;:::-;7265:133;;;;:::o;7404:698::-;7496:6;7504;7512;7561:2;7549:9;7540:7;7536:23;7532:32;7529:119;;;7567:79;;:::i;:::-;7529:119;7715:1;7704:9;7700:17;7687:31;7745:18;7737:6;7734:30;7731:117;;;7767:79;;:::i;:::-;7731:117;7880:80;7952:7;7943:6;7932:9;7928:22;7880:80;:::i;:::-;7862:98;;;;7658:312;8009:2;8035:50;8077:7;8068:6;8057:9;8053:22;8035:50;:::i;:::-;8025:60;;7980:115;7404:698;;;;;:::o;8108:329::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:53;8412:7;8403:6;8392:9;8388:22;8367:53;:::i;:::-;8357:63;;8313:117;8108:329;;;;:::o;8443:180::-;8491:77;8488:1;8481:88;8588:4;8585:1;8578:15;8612:4;8609:1;8602:15;8629:281;8712:27;8734:4;8712:27;:::i;:::-;8704:6;8700:40;8842:6;8830:10;8827:22;8806:18;8794:10;8791:34;8788:62;8785:88;;;8853:18;;:::i;:::-;8785:88;8893:10;8889:2;8882:22;8672:238;8629:281;;:::o;8916:129::-;8950:6;8977:20;;:::i;:::-;8967:30;;9006:33;9034:4;9026:6;9006:33;:::i;:::-;8916:129;;;:::o;9051:311::-;9128:4;9218:18;9210:6;9207:30;9204:56;;;9240:18;;:::i;:::-;9204:56;9290:4;9282:6;9278:17;9270:25;;9350:4;9344;9340:15;9332:23;;9051:311;;;:::o;9385:710::-;9481:5;9506:81;9522:64;9579:6;9522:64;:::i;:::-;9506:81;:::i;:::-;9497:90;;9607:5;9636:6;9629:5;9622:21;9670:4;9663:5;9659:16;9652:23;;9723:4;9715:6;9711:17;9703:6;9699:30;9752:3;9744:6;9741:15;9738:122;;;9771:79;;:::i;:::-;9738:122;9886:6;9869:220;9903:6;9898:3;9895:15;9869:220;;;9978:3;10007:37;10040:3;10028:10;10007:37;:::i;:::-;10002:3;9995:50;10074:4;10069:3;10065:14;10058:21;;9945:144;9929:4;9924:3;9920:14;9913:21;;9869:220;;;9873:21;9487:608;;9385:710;;;;;:::o;10118:370::-;10189:5;10238:3;10231:4;10223:6;10219:17;10215:27;10205:122;;10246:79;;:::i;:::-;10205:122;10363:6;10350:20;10388:94;10478:3;10470:6;10463:4;10455:6;10451:17;10388:94;:::i;:::-;10379:103;;10195:293;10118:370;;;;:::o;10494:678::-;10584:6;10592;10641:2;10629:9;10620:7;10616:23;10612:32;10609:119;;;10647:79;;:::i;:::-;10609:119;10795:1;10784:9;10780:17;10767:31;10825:18;10817:6;10814:30;10811:117;;;10847:79;;:::i;:::-;10811:117;10952:78;11022:7;11013:6;11002:9;10998:22;10952:78;:::i;:::-;10942:88;;10738:302;11079:2;11105:50;11147:7;11138:6;11127:9;11123:22;11105:50;:::i;:::-;11095:60;;11050:115;10494:678;;;;;:::o;11178:474::-;11246:6;11254;11303:2;11291:9;11282:7;11278:23;11274:32;11271:119;;;11309:79;;:::i;:::-;11271:119;11429:1;11454:53;11499:7;11490:6;11479:9;11475:22;11454:53;:::i;:::-;11444:63;;11400:117;11556:2;11582:53;11627:7;11618:6;11607:9;11603:22;11582:53;:::i;:::-;11572:63;;11527:118;11178:474;;;;;:::o;11658:180::-;11706:77;11703:1;11696:88;11803:4;11800:1;11793:15;11827:4;11824:1;11817:15;11844:320;11888:6;11925:1;11919:4;11915:12;11905:22;;11972:1;11966:4;11962:12;11993:18;11983:81;;12049:4;12041:6;12037:17;12027:27;;11983:81;12111:2;12103:6;12100:14;12080:18;12077:38;12074:84;;12130:18;;:::i;:::-;12074:84;11895:269;11844:320;;;:::o;12170:180::-;12218:77;12215:1;12208:88;12315:4;12312:1;12305:15;12339:4;12336:1;12329:15;12356:191;12396:3;12415:20;12433:1;12415:20;:::i;:::-;12410:25;;12449:20;12467:1;12449:20;:::i;:::-;12444:25;;12492:1;12489;12485:9;12478:16;;12513:3;12510:1;12507:10;12504:36;;;12520:18;;:::i;:::-;12504:36;12356:191;;;;:::o;12553:151::-;12693:3;12689:1;12681:6;12677:14;12670:27;12553:151;:::o;12710:365::-;12852:3;12873:66;12937:1;12932:3;12873:66;:::i;:::-;12866:73;;12948:93;13037:3;12948:93;:::i;:::-;13066:2;13061:3;13057:12;13050:19;;12710:365;;;:::o;13081:419::-;13247:4;13285:2;13274:9;13270:18;13262:26;;13334:9;13328:4;13324:20;13320:1;13309:9;13305:17;13298:47;13362:131;13488:4;13362:131;:::i;:::-;13354:139;;13081:419;;;:::o;13506:180::-;13554:77;13551:1;13544:88;13651:4;13648:1;13641:15;13675:4;13672:1;13665:15;13692:244;13832:34;13828:1;13820:6;13816:14;13809:58;13901:27;13896:2;13888:6;13884:15;13877:52;13692:244;:::o;13942:366::-;14084:3;14105:67;14169:2;14164:3;14105:67;:::i;:::-;14098:74;;14181:93;14270:3;14181:93;:::i;:::-;14299:2;14294:3;14290:12;14283:19;;13942:366;;;:::o;14314:419::-;14480:4;14518:2;14507:9;14503:18;14495:26;;14567:9;14561:4;14557:20;14553:1;14542:9;14538:17;14531:47;14595:131;14721:4;14595:131;:::i;:::-;14587:139;;14314:419;;;:::o;14739:224::-;14879:34;14875:1;14867:6;14863:14;14856:58;14948:7;14943:2;14935:6;14931:15;14924:32;14739:224;:::o;14969:366::-;15111:3;15132:67;15196:2;15191:3;15132:67;:::i;:::-;15125:74;;15208:93;15297:3;15208:93;:::i;:::-;15326:2;15321:3;15317:12;15310:19;;14969:366;;;:::o;15341:419::-;15507:4;15545:2;15534:9;15530:18;15522:26;;15594:9;15588:4;15584:20;15580:1;15569:9;15565:17;15558:47;15622:131;15748:4;15622:131;:::i;:::-;15614:139;;15341:419;;;:::o;15766:225::-;15906:34;15902:1;15894:6;15890:14;15883:58;15975:8;15970:2;15962:6;15958:15;15951:33;15766:225;:::o;15997:366::-;16139:3;16160:67;16224:2;16219:3;16160:67;:::i;:::-;16153:74;;16236:93;16325:3;16236:93;:::i;:::-;16354:2;16349:3;16345:12;16338:19;;15997:366;;;:::o;16369:419::-;16535:4;16573:2;16562:9;16558:18;16550:26;;16622:9;16616:4;16612:20;16608:1;16597:9;16593:17;16586:47;16650:131;16776:4;16650:131;:::i;:::-;16642:139;;16369:419;;;:::o;16794:173::-;16934:25;16930:1;16922:6;16918:14;16911:49;16794:173;:::o;16973:366::-;17115:3;17136:67;17200:2;17195:3;17136:67;:::i;:::-;17129:74;;17212:93;17301:3;17212:93;:::i;:::-;17330:2;17325:3;17321:12;17314:19;;16973:366;;;:::o;17345:419::-;17511:4;17549:2;17538:9;17534:18;17526:26;;17598:9;17592:4;17588:20;17584:1;17573:9;17569:17;17562:47;17626:131;17752:4;17626:131;:::i;:::-;17618:139;;17345:419;;;:::o;17770:223::-;17910:34;17906:1;17898:6;17894:14;17887:58;17979:6;17974:2;17966:6;17962:15;17955:31;17770:223;:::o;17999:366::-;18141:3;18162:67;18226:2;18221:3;18162:67;:::i;:::-;18155:74;;18238:93;18327:3;18238:93;:::i;:::-;18356:2;18351:3;18347:12;18340:19;;17999:366;;;:::o;18371:419::-;18537:4;18575:2;18564:9;18560:18;18552:26;;18624:9;18618:4;18614:20;18610:1;18599:9;18595:17;18588:47;18652:131;18778:4;18652:131;:::i;:::-;18644:139;;18371:419;;;:::o;18796:221::-;18936:34;18932:1;18924:6;18920:14;18913:58;19005:4;19000:2;18992:6;18988:15;18981:29;18796:221;:::o;19023:366::-;19165:3;19186:67;19250:2;19245:3;19186:67;:::i;:::-;19179:74;;19262:93;19351:3;19262:93;:::i;:::-;19380:2;19375:3;19371:12;19364:19;;19023:366;;;:::o;19395:419::-;19561:4;19599:2;19588:9;19584:18;19576:26;;19648:9;19642:4;19638:20;19634:1;19623:9;19619:17;19612:47;19676:131;19802:4;19676:131;:::i;:::-;19668:139;;19395:419;;;:::o;19820:179::-;19960:31;19956:1;19948:6;19944:14;19937:55;19820:179;:::o;20005:366::-;20147:3;20168:67;20232:2;20227:3;20168:67;:::i;:::-;20161:74;;20244:93;20333:3;20244:93;:::i;:::-;20362:2;20357:3;20353:12;20346:19;;20005:366;;;:::o;20377:419::-;20543:4;20581:2;20570:9;20566:18;20558:26;;20630:9;20624:4;20620:20;20616:1;20605:9;20601:17;20594:47;20658:131;20784:4;20658:131;:::i;:::-;20650:139;;20377:419;;;:::o;20802:224::-;20942:34;20938:1;20930:6;20926:14;20919:58;21011:7;21006:2;20998:6;20994:15;20987:32;20802:224;:::o;21032:366::-;21174:3;21195:67;21259:2;21254:3;21195:67;:::i;:::-;21188:74;;21271:93;21360:3;21271:93;:::i;:::-;21389:2;21384:3;21380:12;21373:19;;21032:366;;;:::o;21404:419::-;21570:4;21608:2;21597:9;21593:18;21585:26;;21657:9;21651:4;21647:20;21643:1;21632:9;21628:17;21621:47;21685:131;21811:4;21685:131;:::i;:::-;21677:139;;21404:419;;;:::o;21829:222::-;21969:34;21965:1;21957:6;21953:14;21946:58;22038:5;22033:2;22025:6;22021:15;22014:30;21829:222;:::o;22057:366::-;22199:3;22220:67;22284:2;22279:3;22220:67;:::i;:::-;22213:74;;22296:93;22385:3;22296:93;:::i;:::-;22414:2;22409:3;22405:12;22398:19;;22057:366;;;:::o;22429:419::-;22595:4;22633:2;22622:9;22618:18;22610:26;;22682:9;22676:4;22672:20;22668:1;22657:9;22653:17;22646:47;22710:131;22836:4;22710:131;:::i;:::-;22702:139;;22429:419;;;:::o;22854:174::-;22994:26;22990:1;22982:6;22978:14;22971:50;22854:174;:::o;23034:366::-;23176:3;23197:67;23261:2;23256:3;23197:67;:::i;:::-;23190:74;;23273:93;23362:3;23273:93;:::i;:::-;23391:2;23386:3;23382:12;23375:19;;23034:366;;;:::o;23406:419::-;23572:4;23610:2;23599:9;23595:18;23587:26;;23659:9;23653:4;23649:20;23645:1;23634:9;23630:17;23623:47;23687:131;23813:4;23687:131;:::i;:::-;23679:139;;23406:419;;;:::o;23831:410::-;23871:7;23894:20;23912:1;23894:20;:::i;:::-;23889:25;;23928:20;23946:1;23928:20;:::i;:::-;23923:25;;23983:1;23980;23976:9;24005:30;24023:11;24005:30;:::i;:::-;23994:41;;24184:1;24175:7;24171:15;24168:1;24165:22;24145:1;24138:9;24118:83;24095:139;;24214:18;;:::i;:::-;24095:139;23879:362;23831:410;;;;:::o;24247:180::-;24295:77;24292:1;24285:88;24392:4;24389:1;24382:15;24416:4;24413:1;24406:15;24433:185;24473:1;24490:20;24508:1;24490:20;:::i;:::-;24485:25;;24524:20;24542:1;24524:20;:::i;:::-;24519:25;;24563:1;24553:35;;24568:18;;:::i;:::-;24553:35;24610:1;24607;24603:9;24598:14;;24433:185;;;;:::o;24624:194::-;24664:4;24684:20;24702:1;24684:20;:::i;:::-;24679:25;;24718:20;24736:1;24718:20;:::i;:::-;24713:25;;24762:1;24759;24755:9;24747:17;;24786:1;24780:4;24777:11;24774:37;;;24791:18;;:::i;:::-;24774:37;24624:194;;;;:::o;24824:182::-;24964:34;24960:1;24952:6;24948:14;24941:58;24824:182;:::o;25012:366::-;25154:3;25175:67;25239:2;25234:3;25175:67;:::i;:::-;25168:74;;25251:93;25340:3;25251:93;:::i;:::-;25369:2;25364:3;25360:12;25353:19;;25012:366;;;:::o;25384:419::-;25550:4;25588:2;25577:9;25573:18;25565:26;;25637:9;25631:4;25627:20;25623:1;25612:9;25608:17;25601:47;25665:131;25791:4;25665:131;:::i;:::-;25657:139;;25384:419;;;:::o;25809:225::-;25949:34;25945:1;25937:6;25933:14;25926:58;26018:8;26013:2;26005:6;26001:15;25994:33;25809:225;:::o;26040:366::-;26182:3;26203:67;26267:2;26262:3;26203:67;:::i;:::-;26196:74;;26279:93;26368:3;26279:93;:::i;:::-;26397:2;26392:3;26388:12;26381:19;;26040:366;;;:::o;26412:419::-;26578:4;26616:2;26605:9;26601:18;26593:26;;26665:9;26659:4;26655:20;26651:1;26640:9;26636:17;26629:47;26693:131;26819:4;26693:131;:::i;:::-;26685:139;;26412:419;;;:::o;26837:442::-;26986:4;27024:2;27013:9;27009:18;27001:26;;27037:71;27105:1;27094:9;27090:17;27081:6;27037:71;:::i;:::-;27118:72;27186:2;27175:9;27171:18;27162:6;27118:72;:::i;:::-;27200;27268:2;27257:9;27253:18;27244:6;27200:72;:::i;:::-;26837:442;;;;;;:::o;27285:147::-;27386:11;27423:3;27408:18;;27285:147;;;;:::o;27438:114::-;;:::o;27558:398::-;27717:3;27738:83;27819:1;27814:3;27738:83;:::i;:::-;27731:90;;27830:93;27919:3;27830:93;:::i;:::-;27948:1;27943:3;27939:11;27932:18;;27558:398;;;:::o;27962:379::-;28146:3;28168:147;28311:3;28168:147;:::i;:::-;28161:154;;28332:3;28325:10;;27962:379;;;:::o;28347:143::-;28404:5;28435:6;28429:13;28420:22;;28451:33;28478:5;28451:33;:::i;:::-;28347:143;;;;:::o;28496:351::-;28566:6;28615:2;28603:9;28594:7;28590:23;28586:32;28583:119;;;28621:79;;:::i;:::-;28583:119;28741:1;28766:64;28822:7;28813:6;28802:9;28798:22;28766:64;:::i;:::-;28756:74;;28712:128;28496:351;;;;:::o;28853:85::-;28898:7;28927:5;28916:16;;28853:85;;;:::o;28944:158::-;29002:9;29035:61;29053:42;29062:32;29088:5;29062:32;:::i;:::-;29053:42;:::i;:::-;29035:61;:::i;:::-;29022:74;;28944:158;;;:::o;29108:147::-;29203:45;29242:5;29203:45;:::i;:::-;29198:3;29191:58;29108:147;;:::o;29261:114::-;29328:6;29362:5;29356:12;29346:22;;29261:114;;;:::o;29381:184::-;29480:11;29514:6;29509:3;29502:19;29554:4;29549:3;29545:14;29530:29;;29381:184;;;;:::o;29571:132::-;29638:4;29661:3;29653:11;;29691:4;29686:3;29682:14;29674:22;;29571:132;;;:::o;29709:108::-;29786:24;29804:5;29786:24;:::i;:::-;29781:3;29774:37;29709:108;;:::o;29823:179::-;29892:10;29913:46;29955:3;29947:6;29913:46;:::i;:::-;29991:4;29986:3;29982:14;29968:28;;29823:179;;;;:::o;30008:113::-;30078:4;30110;30105:3;30101:14;30093:22;;30008:113;;;:::o;30157:732::-;30276:3;30305:54;30353:5;30305:54;:::i;:::-;30375:86;30454:6;30449:3;30375:86;:::i;:::-;30368:93;;30485:56;30535:5;30485:56;:::i;:::-;30564:7;30595:1;30580:284;30605:6;30602:1;30599:13;30580:284;;;30681:6;30675:13;30708:63;30767:3;30752:13;30708:63;:::i;:::-;30701:70;;30794:60;30847:6;30794:60;:::i;:::-;30784:70;;30640:224;30627:1;30624;30620:9;30615:14;;30580:284;;;30584:14;30880:3;30873:10;;30281:608;;;30157:732;;;;:::o;30895:831::-;31158:4;31196:3;31185:9;31181:19;31173:27;;31210:71;31278:1;31267:9;31263:17;31254:6;31210:71;:::i;:::-;31291:80;31367:2;31356:9;31352:18;31343:6;31291:80;:::i;:::-;31418:9;31412:4;31408:20;31403:2;31392:9;31388:18;31381:48;31446:108;31549:4;31540:6;31446:108;:::i;:::-;31438:116;;31564:72;31632:2;31621:9;31617:18;31608:6;31564:72;:::i;:::-;31646:73;31714:3;31703:9;31699:19;31690:6;31646:73;:::i;:::-;30895:831;;;;;;;;:::o;31732:807::-;31981:4;32019:3;32008:9;32004:19;31996:27;;32033:71;32101:1;32090:9;32086:17;32077:6;32033:71;:::i;:::-;32114:72;32182:2;32171:9;32167:18;32158:6;32114:72;:::i;:::-;32196:80;32272:2;32261:9;32257:18;32248:6;32196:80;:::i;:::-;32286;32362:2;32351:9;32347:18;32338:6;32286:80;:::i;:::-;32376:73;32444:3;32433:9;32429:19;32420:6;32376:73;:::i;:::-;32459;32527:3;32516:9;32512:19;32503:6;32459:73;:::i;:::-;31732:807;;;;;;;;;:::o;32545:143::-;32602:5;32633:6;32627:13;32618:22;;32649:33;32676:5;32649:33;:::i;:::-;32545:143;;;;:::o;32694:663::-;32782:6;32790;32798;32847:2;32835:9;32826:7;32822:23;32818:32;32815:119;;;32853:79;;:::i;:::-;32815:119;32973:1;32998:64;33054:7;33045:6;33034:9;33030:22;32998:64;:::i;:::-;32988:74;;32944:128;33111:2;33137:64;33193:7;33184:6;33173:9;33169:22;33137:64;:::i;:::-;33127:74;;33082:129;33250:2;33276:64;33332:7;33323:6;33312:9;33308:22;33276:64;:::i;:::-;33266:74;;33221:129;32694:663;;;;;:::o

Swarm Source

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