ETH Price: $3,321.28 (+1.73%)
Gas: 5 Gwei

Token

ARTINU (ARTINU)
 

Overview

Max Total Supply

1,000,000,000 ARTINU

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
cryptoflight.eth
Balance
2,800,358.185521541 ARTINU

Value
$0.00
0x1b82602271df9e355edc5d54476a18b3b1a544fb
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:
Token

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 4 of 4: Token.sol
/**
 *Submitted for verification at BscScan.com on 2021-04-02
 */

// SPDX-License-Identifier: Unlicensed

/**

   #ORFANO

   2% fee auto add to the liquidity pool to locked forever when selling
   2% fee auto distribute to all holders
   2% fee auto moved to charity wallet

 */
import "Ownable.sol";
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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 Token is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;

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

    address private _charityWalletAddress =
        0x853c64EdD278B9C30E8abf5F8cf42aeF64C3796D;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "ARTINU";
    string private _symbol = "ARTINU";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _charityFee = 2;
    uint256 private _previousCharityFee = _charityFee;
    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 10000000 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 10000000 * 10**9;

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

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

    constructor() {
        _rOwned[owner()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
         .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

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

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

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

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setCharityFeePercent(uint256 charityFee) external onlyOwner() {
        _charityFee = charityFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
    }

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

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

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

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

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

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

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

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

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

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate = _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(
            rCharity
        );
        if (_isExcluded[_charityWalletAddress])
            _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(
                tCharity
            );
    }

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

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

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

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

        _previousTaxFee = _taxFee;
        _previousCharityFee = _charityFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _charityFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _charityFee = _previousCharityFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner())
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
             numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
             !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

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

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

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

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

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

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

        if (!takeFee) restoreAllFee();
    }

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

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

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

File 1 of 4: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 2 of 4: Crowdsale.sol
import "Ownable.sol";
import "Token.sol";
pragma solidity 0.8.0;

contract CrowdSale is Ownable {
    Token public tokenSold;
    uint256 public rateInTokens;
    uint256 public minimumBuyBNB = 660000000000000000;
    bool public onlyWhitelisted = true;

    mapping(address => bool) public whitelistedAddress;
    mapping(address => uint256) public whitelistedAmount;

    constructor(Token TokenAdr, uint256 rate) {
        tokenSold = TokenAdr;
        rateInTokens = rate;
    }

    event TokensSold(address tokenBuyer, uint256 amountBought);

    function whiteListAddresses(address[] memory _whitelist, uint256 _amount)
        public
        onlyOwner
    {
        for (uint256 j = 0; j < _whitelist.length; j++) {
            whitelistedAmount[_whitelist[j]] = _amount;
            whitelistedAddress[_whitelist[j]] = true;
        }
    }

    function changeRate(uint256 newRate) public onlyOwner {
        rateInTokens = newRate;
    }

    function setMinimumBuyBNB(uint256 newMin) public onlyOwner {
        minimumBuyBNB = newMin;
    }

    function setOnlyWhitelisted(bool status) public onlyOwner {
        onlyWhitelisted = status;
    }

    function AdminWithdrawTokens(address _adr, uint256 _amount)
        public
        onlyOwner
    {
        tokenSold.transfer(_adr, _amount);
    }

    // Specify 0 and will withdraw all.
    function AdminWithdrawBNB(uint256 _value) public onlyOwner {
        uint256 total = address(this).balance;
        if (_value == 0) {
            payable(msg.sender).transfer(total);
        } else {
            require(_value >= total, "Too Much!");
            payable(msg.sender).transfer(_value);
        }
    }

    function buyTokens() public payable {
        require(msg.value >= minimumBuyBNB);
        uint256 value = (rateInTokens * msg.value) / 10**9;
        require(value > 0);
        if (onlyWhitelisted == true) {
            require(whitelistedAmount[msg.sender] >= value, "Incorrect value");
            require(
                whitelistedAddress[msg.sender] == true,
                "You are not whitelisted"
            );
            whitelistedAmount[msg.sender] =
                whitelistedAmount[msg.sender] -
                value;
        }
        tokenSold.transfer(msg.sender, value);
        emit TokensSold(msg.sender, value);
    }
}

File 3 of 4: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273853c64edd278b9c30e8abf5f8cf42aef64c3796d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a76400006008556008546000196200007791906200083f565b60001962000086919062000790565b6009556040518060400160405280600681526020017f415254494e550000000000000000000000000000000000000000000000000000815250600b9080519060200190620000d692919062000631565b506040518060400160405280600681526020017f415254494e550000000000000000000000000000000000000000000000000000815250600c90805190602001906200012492919062000631565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f55600260105560105460115560046012556012546013556001601460016101000a81548160ff021916908315150217905550662386f26fc10000601555662386f26fc10000601655348015620001a057600080fd5b506000620001b36200060060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620002686200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003419190620006f8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df9190620006f8565b6040518363ffffffff1660e01b8152600401620003fe92919062000746565b602060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004549190620006f8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004d76200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005906200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620005f1919062000773565b60405180910390a3506200091e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200063f9062000809565b90600052602060002090601f016020900481019282620006635760008555620006af565b82601f106200067e57805160ff1916838001178555620006af565b82800160010185558215620006af579182015b82811115620006ae57825182559160200191906001019062000691565b5b509050620006be9190620006c2565b5090565b5b80821115620006dd576000816000905550600101620006c3565b5090565b600081519050620006f28162000904565b92915050565b6000602082840312156200070b57600080fd5b60006200071b84828501620006e1565b91505092915050565b6200072f81620007cb565b82525050565b6200074081620007ff565b82525050565b60006040820190506200075d600083018562000724565b6200076c602083018462000724565b9392505050565b60006020820190506200078a600083018462000735565b92915050565b60006200079d82620007ff565b9150620007aa83620007ff565b925082821015620007c057620007bf62000877565b5b828203905092915050565b6000620007d882620007df565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200082257607f821691505b60208210811415620008395762000838620008d5565b5b50919050565b60006200084c82620007ff565b91506200085983620007ff565b9250826200086c576200086b620008a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200090f81620007cb565b81146200091b57600080fd5b50565b60805160601c60a05160601c614aaf62000951600039600081816112fb01526123de01526000610a090152614aaf6000f3fe6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063c49b9a801161006f578063c49b9a80146107e6578063d543dbeb1461080f578063dd62ed3e14610838578063ea2f0b3714610875578063f2fde38b1461089e5761021a565b806395d89b4114610718578063a457c2d714610743578063a9059cbb14610780578063af41063b146107bd5761021a565b8063715018a6116100e7578063715018a6146106455780637d1db4a51461065c57806388f82020146106875780638da5cb5b146106c45780638ee88c53146106ef5761021a565b806352390c02146105775780635342acb4146105a05780636bc87c3a146105dd57806370a08231146106085761021a565b80633685d4191161019b57806340f8007a1161016a57806340f8007a14610490578063437823ec146104bb5780634549b039146104e457806349bd5a5e146105215780634a74bb021461054c5761021a565b80633685d419146103d657806339509351146103ff5780633b124fe71461043c5780633bd5d173146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806323b872dd146103315780632d8381191461036e578063313ce567146103ab5761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ef2565b6108c7565b005b34801561025457600080fd5b5061025d61094d565b60405161026a91906144c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190613e8d565b6109df565b6040516102a7919061448c565b60405180910390f35b3480156102bc57600080fd5b506102c56109fd565b6040516102d29190614684565b60405180910390f35b3480156102e757600080fd5b506102f0610a07565b6040516102fd91906144a7565b60405180910390f35b34801561031257600080fd5b5061031b610a2b565b6040516103289190614684565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613e3e565b610a35565b604051610365919061448c565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613ef2565b610b0e565b6040516103a29190614684565b60405180910390f35b3480156103b757600080fd5b506103c0610b7c565b6040516103cd91906146d6565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613dd9565b610b93565b005b34801561040b57600080fd5b5061042660048036038101906104219190613e8d565b610f61565b604051610433919061448c565b60405180910390f35b34801561044857600080fd5b50610451611014565b60405161045e9190614684565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613ef2565b61101a565b005b34801561049c57600080fd5b506104a5611196565b6040516104b29190614684565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613dd9565b61119c565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613f1b565b611273565b6040516105189190614684565b60405180910390f35b34801561052d57600080fd5b506105366112f9565b6040516105439190614471565b60405180910390f35b34801561055857600080fd5b5061056161131d565b60405161056e919061448c565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613dd9565b611330565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613dd9565b6115cb565b6040516105d4919061448c565b60405180910390f35b3480156105e957600080fd5b506105f2611621565b6040516105ff9190614684565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613dd9565b611627565b60405161063c9190614684565b60405180910390f35b34801561065157600080fd5b5061065a611712565b005b34801561066857600080fd5b5061067161184c565b60405161067e9190614684565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613dd9565b611852565b6040516106bb919061448c565b60405180910390f35b3480156106d057600080fd5b506106d96118a8565b6040516106e69190614471565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613ef2565b6118d1565b005b34801561072457600080fd5b5061072d611957565b60405161073a91906144c2565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613e8d565b6119e9565b604051610777919061448c565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613e8d565b611ab6565b6040516107b4919061448c565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613ef2565b611ad4565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613ec9565b611b5a565b005b34801561081b57600080fd5b5061083660048036038101906108319190613ef2565b611c2a565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613e02565b611cd7565b60405161086c9190614684565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613dd9565b611d5e565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613dd9565b611e35565b005b6108cf611fde565b73ffffffffffffffffffffffffffffffffffffffff166108ed6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a906145e4565b60405180910390fd5b80600e8190555050565b6060600b805461095c906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610988906148ce565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109f36109ec611fde565b8484611fe6565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610a428484846121b1565b610b0384610a4e611fde565b610afe85604051806060016040528060288152602001614a2d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab4611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b600190509392505050565b6000600954821115610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90614504565b60405180910390fd5b6000610b5f612573565b9050610b74818461259e90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610b9b611fde565b73ffffffffffffffffffffffffffffffffffffffff16610bb96118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614584565b60405180910390fd5b60005b600680549050811015610f5d578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f4a5760066001600680549050610d5791906147ee565b81548110610d8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f5d565b8080610f5590614900565b915050610c9e565b5050565b600061100a610f6e611fde565b846110058560036000610f7f611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b611fe6565b6001905092915050565b600e5481565b6000611024611fde565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614664565b60405180910390fd5b60006110be836125ca565b505050505050905061111881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111708160095461263290919063ffffffff16565b60098190555061118b83600a546125b490919063ffffffff16565b600a81905550505050565b60105481565b6111a4611fde565b73ffffffffffffffffffffffffffffffffffffffff166111c26118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906145e4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906145a4565b60405180910390fd5b816112db5760006112ca846125ca565b5050505050509050809150506112f3565b60006112e6846125ca565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b611338611fde565b73ffffffffffffffffffffffffffffffffffffffff166113566118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a3906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614564565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561150d576114c9600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061170d565b61170a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b90505b919050565b61171a611fde565b73ffffffffffffffffffffffffffffffffffffffff166117386118a8565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118d9611fde565b73ffffffffffffffffffffffffffffffffffffffff166118f76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906145e4565b60405180910390fd5b8060128190555050565b6060600c8054611966906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148ce565b80156119df5780601f106119b4576101008083540402835291602001916119df565b820191906000526020600020905b8154815290600101906020018083116119c257829003601f168201915b5050505050905090565b6000611aac6119f6611fde565b84611aa785604051806060016040528060258152602001614a556025913960036000611a20611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b6001905092915050565b6000611aca611ac3611fde565b84846121b1565b6001905092915050565b611adc611fde565b73ffffffffffffffffffffffffffffffffffffffff16611afa6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906145e4565b60405180910390fd5b8060108190555050565b611b62611fde565b73ffffffffffffffffffffffffffffffffffffffff16611b806118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906145e4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c1f919061448c565b60405180910390a150565b611c32611fde565b73ffffffffffffffffffffffffffffffffffffffff16611c506118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906145e4565b60405180910390fd5b611cce6064611cc08360085461264890919063ffffffff16565b61259e90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d66611fde565b73ffffffffffffffffffffffffffffffffffffffff16611d846118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906145e4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3d611fde565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614524565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614544565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a49190614684565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614624565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906144e4565b60405180910390fd5b600081116122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614604565b60405180910390fd5b6122dc6118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561239557601554811115612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906145c4565b60405180910390fd5b5b60006123a030611627565b905060155481106123b15760155490505b600060165482101590508080156123d55750601460009054906101000a900460ff16155b801561242d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124455750601460019054906101000a900460ff165b156124595760165491506124588261265e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125005750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561250a57600090505b61251686868684612721565b505050505050565b6000838311158290612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d91906144c2565b60405180910390fd5b5082840390509392505050565b6000806000612580612a32565b91509150612597818361259e90919063ffffffff16565b9250505090565b600081836125ac9190614763565b905092915050565b600081836125c2919061470d565b905092915050565b60008060008060008060008060008060006125e48c612d7d565b935093509350935060008060006126058f878787612600612573565b612dfc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361264091906147ee565b905092915050565b600081836126569190614794565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061268f60028361259e90919063ffffffff16565b905060006126a6828461263290919063ffffffff16565b9050600047905060006126c2824761263290919063ffffffff16565b90507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516126f79392919061469f565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b8061272f5761272e612eb0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e7576127e2848484612f04565b612a1e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561289f5761289a848484613172565b612a1d565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129435750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612958576129538484846133e0565b612a1c565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0f57612a0a8484846135b9565b612a1b565b612a1a8484846133e0565b5b5b5b5b80612a2c57612a2b6138bc565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d4057826001600060068481548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba65750816002600060068481548110612b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bbd5760095460085494509450505050612d79565b612c736001600060068481548110612bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461263290919063ffffffff16565b9250612d2b6002600060068481548110612cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361263290919063ffffffff16565b91508080612d3890614900565b915050612a46565b50612d5860085460095461259e90919063ffffffff16565b821015612d7057600954600854935093505050612d79565b81819350935050505b9091565b6000806000806000612d8e866138d9565b90506000612d9b8761390a565b90506000612da88861393b565b90506000612de382612dd585612dc7888e61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e15858a61264890919063ffffffff16565b90506000612e2c868a61264890919063ffffffff16565b90506000612e43878a61264890919063ffffffff16565b90506000612e5a888a61264890919063ffffffff16565b90506000612e9582612e8785612e79888a61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600e54148015612ec457506000601254145b15612ece57612f02565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000612f18886125ca565b9650965096509650965096509650612f7888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130ee8261396c565b6130f781613b11565b6131018584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161315e9190614684565b60405180910390a350505050505050505050565b6000806000806000806000613186886125ca565b96509650965096509650965096506131e687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335c8261396c565b61336581613b11565b61336f8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133cc9190614684565b60405180910390a350505050505050505050565b60008060008060008060006133f4886125ca565b965096509650965096509650965061345487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135358261396c565b61353e81613b11565b6135488584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516135a59190614684565b60405180910390a350505050505050505050565b60008060008060008060006135cd886125ca565b965096509650965096509650965061362d88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138388261396c565b61384181613b11565b61384b8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138a89190614684565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061390360646138f5600e548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061393460646139266012548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061396560646139576010548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b6000613976612573565b9050600061398d828461264890919063ffffffff16565b90506139e181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b0c57613ac883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613b1b612573565b90506000613b32828461264890919063ffffffff16565b9050613ba88160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d5b57613cf58360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d758260095461263290919063ffffffff16565b600981905550613d9081600a546125b490919063ffffffff16565b600a819055505050565b600081359050613da9816149e7565b92915050565b600081359050613dbe816149fe565b92915050565b600081359050613dd381614a15565b92915050565b600060208284031215613deb57600080fd5b6000613df984828501613d9a565b91505092915050565b60008060408385031215613e1557600080fd5b6000613e2385828601613d9a565b9250506020613e3485828601613d9a565b9150509250929050565b600080600060608486031215613e5357600080fd5b6000613e6186828701613d9a565b9350506020613e7286828701613d9a565b9250506040613e8386828701613dc4565b9150509250925092565b60008060408385031215613ea057600080fd5b6000613eae85828601613d9a565b9250506020613ebf85828601613dc4565b9150509250929050565b600060208284031215613edb57600080fd5b6000613ee984828501613daf565b91505092915050565b600060208284031215613f0457600080fd5b6000613f1284828501613dc4565b91505092915050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dc4565b9250506020613f4d85828601613daf565b9150509250929050565b613f6081614822565b82525050565b613f6f81614834565b82525050565b613f7e81614877565b82525050565b6000613f8f826146f1565b613f9981856146fc565b9350613fa981856020860161489b565b613fb2816149d6565b840191505092915050565b6000613fca6023836146fc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614030602a836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006140966026836146fc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140fc6022836146fc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614162601b836146fc565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006141a2601b836146fc565b91507f4163636f756e7420697320616c726561647920696e636c7564656400000000006000830152602082019050919050565b60006141e2601f836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006142226028836146fc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142886020836146fc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006142c86029836146fc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061432e6025836146fc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143946024836146fc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fa602c836146fc565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61445c81614860565b82525050565b61446b8161486a565b82525050565b60006020820190506144866000830184613f57565b92915050565b60006020820190506144a16000830184613f66565b92915050565b60006020820190506144bc6000830184613f75565b92915050565b600060208201905081810360008301526144dc8184613f84565b905092915050565b600060208201905081810360008301526144fd81613fbd565b9050919050565b6000602082019050818103600083015261451d81614023565b9050919050565b6000602082019050818103600083015261453d81614089565b9050919050565b6000602082019050818103600083015261455d816140ef565b9050919050565b6000602082019050818103600083015261457d81614155565b9050919050565b6000602082019050818103600083015261459d81614195565b9050919050565b600060208201905081810360008301526145bd816141d5565b9050919050565b600060208201905081810360008301526145dd81614215565b9050919050565b600060208201905081810360008301526145fd8161427b565b9050919050565b6000602082019050818103600083015261461d816142bb565b9050919050565b6000602082019050818103600083015261463d81614321565b9050919050565b6000602082019050818103600083015261465d81614387565b9050919050565b6000602082019050818103600083015261467d816143ed565b9050919050565b60006020820190506146996000830184614453565b92915050565b60006060820190506146b46000830186614453565b6146c16020830185614453565b6146ce6040830184614453565b949350505050565b60006020820190506146eb6000830184614462565b92915050565b600081519050919050565b600082825260208201905092915050565b600061471882614860565b915061472383614860565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561475857614757614949565b5b828201905092915050565b600061476e82614860565b915061477983614860565b92508261478957614788614978565b5b828204905092915050565b600061479f82614860565b91506147aa83614860565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e3576147e2614949565b5b828202905092915050565b60006147f982614860565b915061480483614860565b92508282101561481757614816614949565b5b828203905092915050565b600061482d82614840565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061488282614889565b9050919050565b600061489482614840565b9050919050565b60005b838110156148b957808201518184015260208101905061489e565b838111156148c8576000848401525b50505050565b600060028204905060018216806148e657607f821691505b602082108114156148fa576148f96149a7565b5b50919050565b600061490b82614860565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561493e5761493d614949565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6149f081614822565b81146149fb57600080fd5b50565b614a0781614834565b8114614a1257600080fd5b50565b614a1e81614860565b8114614a2957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220003457e7ad6451f9f923a7eca80167525fb02208c78858d6d35137612ebf79ab64736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063c49b9a801161006f578063c49b9a80146107e6578063d543dbeb1461080f578063dd62ed3e14610838578063ea2f0b3714610875578063f2fde38b1461089e5761021a565b806395d89b4114610718578063a457c2d714610743578063a9059cbb14610780578063af41063b146107bd5761021a565b8063715018a6116100e7578063715018a6146106455780637d1db4a51461065c57806388f82020146106875780638da5cb5b146106c45780638ee88c53146106ef5761021a565b806352390c02146105775780635342acb4146105a05780636bc87c3a146105dd57806370a08231146106085761021a565b80633685d4191161019b57806340f8007a1161016a57806340f8007a14610490578063437823ec146104bb5780634549b039146104e457806349bd5a5e146105215780634a74bb021461054c5761021a565b80633685d419146103d657806339509351146103ff5780633b124fe71461043c5780633bd5d173146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806323b872dd146103315780632d8381191461036e578063313ce567146103ab5761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ef2565b6108c7565b005b34801561025457600080fd5b5061025d61094d565b60405161026a91906144c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190613e8d565b6109df565b6040516102a7919061448c565b60405180910390f35b3480156102bc57600080fd5b506102c56109fd565b6040516102d29190614684565b60405180910390f35b3480156102e757600080fd5b506102f0610a07565b6040516102fd91906144a7565b60405180910390f35b34801561031257600080fd5b5061031b610a2b565b6040516103289190614684565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613e3e565b610a35565b604051610365919061448c565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613ef2565b610b0e565b6040516103a29190614684565b60405180910390f35b3480156103b757600080fd5b506103c0610b7c565b6040516103cd91906146d6565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613dd9565b610b93565b005b34801561040b57600080fd5b5061042660048036038101906104219190613e8d565b610f61565b604051610433919061448c565b60405180910390f35b34801561044857600080fd5b50610451611014565b60405161045e9190614684565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613ef2565b61101a565b005b34801561049c57600080fd5b506104a5611196565b6040516104b29190614684565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613dd9565b61119c565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613f1b565b611273565b6040516105189190614684565b60405180910390f35b34801561052d57600080fd5b506105366112f9565b6040516105439190614471565b60405180910390f35b34801561055857600080fd5b5061056161131d565b60405161056e919061448c565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613dd9565b611330565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613dd9565b6115cb565b6040516105d4919061448c565b60405180910390f35b3480156105e957600080fd5b506105f2611621565b6040516105ff9190614684565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613dd9565b611627565b60405161063c9190614684565b60405180910390f35b34801561065157600080fd5b5061065a611712565b005b34801561066857600080fd5b5061067161184c565b60405161067e9190614684565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613dd9565b611852565b6040516106bb919061448c565b60405180910390f35b3480156106d057600080fd5b506106d96118a8565b6040516106e69190614471565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613ef2565b6118d1565b005b34801561072457600080fd5b5061072d611957565b60405161073a91906144c2565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613e8d565b6119e9565b604051610777919061448c565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613e8d565b611ab6565b6040516107b4919061448c565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613ef2565b611ad4565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613ec9565b611b5a565b005b34801561081b57600080fd5b5061083660048036038101906108319190613ef2565b611c2a565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613e02565b611cd7565b60405161086c9190614684565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613dd9565b611d5e565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613dd9565b611e35565b005b6108cf611fde565b73ffffffffffffffffffffffffffffffffffffffff166108ed6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a906145e4565b60405180910390fd5b80600e8190555050565b6060600b805461095c906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610988906148ce565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109f36109ec611fde565b8484611fe6565b6001905092915050565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610a428484846121b1565b610b0384610a4e611fde565b610afe85604051806060016040528060288152602001614a2d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab4611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b600190509392505050565b6000600954821115610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90614504565b60405180910390fd5b6000610b5f612573565b9050610b74818461259e90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610b9b611fde565b73ffffffffffffffffffffffffffffffffffffffff16610bb96118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614584565b60405180910390fd5b60005b600680549050811015610f5d578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f4a5760066001600680549050610d5791906147ee565b81548110610d8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f5d565b8080610f5590614900565b915050610c9e565b5050565b600061100a610f6e611fde565b846110058560036000610f7f611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b611fe6565b6001905092915050565b600e5481565b6000611024611fde565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614664565b60405180910390fd5b60006110be836125ca565b505050505050905061111881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111708160095461263290919063ffffffff16565b60098190555061118b83600a546125b490919063ffffffff16565b600a81905550505050565b60105481565b6111a4611fde565b73ffffffffffffffffffffffffffffffffffffffff166111c26118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906145e4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906145a4565b60405180910390fd5b816112db5760006112ca846125ca565b5050505050509050809150506112f3565b60006112e6846125ca565b5050505050915050809150505b92915050565b7f000000000000000000000000bdaeba60d7bb3ecce97f8ff22eab3e6d0159c83581565b601460019054906101000a900460ff1681565b611338611fde565b73ffffffffffffffffffffffffffffffffffffffff166113566118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a3906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614564565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561150d576114c9600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061170d565b61170a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b90505b919050565b61171a611fde565b73ffffffffffffffffffffffffffffffffffffffff166117386118a8565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118d9611fde565b73ffffffffffffffffffffffffffffffffffffffff166118f76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906145e4565b60405180910390fd5b8060128190555050565b6060600c8054611966906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148ce565b80156119df5780601f106119b4576101008083540402835291602001916119df565b820191906000526020600020905b8154815290600101906020018083116119c257829003601f168201915b5050505050905090565b6000611aac6119f6611fde565b84611aa785604051806060016040528060258152602001614a556025913960036000611a20611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b6001905092915050565b6000611aca611ac3611fde565b84846121b1565b6001905092915050565b611adc611fde565b73ffffffffffffffffffffffffffffffffffffffff16611afa6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906145e4565b60405180910390fd5b8060108190555050565b611b62611fde565b73ffffffffffffffffffffffffffffffffffffffff16611b806118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906145e4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c1f919061448c565b60405180910390a150565b611c32611fde565b73ffffffffffffffffffffffffffffffffffffffff16611c506118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906145e4565b60405180910390fd5b611cce6064611cc08360085461264890919063ffffffff16565b61259e90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d66611fde565b73ffffffffffffffffffffffffffffffffffffffff16611d846118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906145e4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3d611fde565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614524565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614544565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a49190614684565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614624565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906144e4565b60405180910390fd5b600081116122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614604565b60405180910390fd5b6122dc6118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561239557601554811115612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906145c4565b60405180910390fd5b5b60006123a030611627565b905060155481106123b15760155490505b600060165482101590508080156123d55750601460009054906101000a900460ff16155b801561242d57507f000000000000000000000000bdaeba60d7bb3ecce97f8ff22eab3e6d0159c83573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124455750601460019054906101000a900460ff165b156124595760165491506124588261265e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125005750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561250a57600090505b61251686868684612721565b505050505050565b6000838311158290612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d91906144c2565b60405180910390fd5b5082840390509392505050565b6000806000612580612a32565b91509150612597818361259e90919063ffffffff16565b9250505090565b600081836125ac9190614763565b905092915050565b600081836125c2919061470d565b905092915050565b60008060008060008060008060008060006125e48c612d7d565b935093509350935060008060006126058f878787612600612573565b612dfc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361264091906147ee565b905092915050565b600081836126569190614794565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061268f60028361259e90919063ffffffff16565b905060006126a6828461263290919063ffffffff16565b9050600047905060006126c2824761263290919063ffffffff16565b90507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516126f79392919061469f565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b8061272f5761272e612eb0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e7576127e2848484612f04565b612a1e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561289f5761289a848484613172565b612a1d565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129435750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612958576129538484846133e0565b612a1c565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0f57612a0a8484846135b9565b612a1b565b612a1a8484846133e0565b5b5b5b5b80612a2c57612a2b6138bc565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d4057826001600060068481548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba65750816002600060068481548110612b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bbd5760095460085494509450505050612d79565b612c736001600060068481548110612bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461263290919063ffffffff16565b9250612d2b6002600060068481548110612cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361263290919063ffffffff16565b91508080612d3890614900565b915050612a46565b50612d5860085460095461259e90919063ffffffff16565b821015612d7057600954600854935093505050612d79565b81819350935050505b9091565b6000806000806000612d8e866138d9565b90506000612d9b8761390a565b90506000612da88861393b565b90506000612de382612dd585612dc7888e61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e15858a61264890919063ffffffff16565b90506000612e2c868a61264890919063ffffffff16565b90506000612e43878a61264890919063ffffffff16565b90506000612e5a888a61264890919063ffffffff16565b90506000612e9582612e8785612e79888a61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600e54148015612ec457506000601254145b15612ece57612f02565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000612f18886125ca565b9650965096509650965096509650612f7888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130ee8261396c565b6130f781613b11565b6131018584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161315e9190614684565b60405180910390a350505050505050505050565b6000806000806000806000613186886125ca565b96509650965096509650965096506131e687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335c8261396c565b61336581613b11565b61336f8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133cc9190614684565b60405180910390a350505050505050505050565b60008060008060008060006133f4886125ca565b965096509650965096509650965061345487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135358261396c565b61353e81613b11565b6135488584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516135a59190614684565b60405180910390a350505050505050505050565b60008060008060008060006135cd886125ca565b965096509650965096509650965061362d88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138388261396c565b61384181613b11565b61384b8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138a89190614684565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061390360646138f5600e548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061393460646139266012548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061396560646139576010548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b6000613976612573565b9050600061398d828461264890919063ffffffff16565b90506139e181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b0c57613ac883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613b1b612573565b90506000613b32828461264890919063ffffffff16565b9050613ba88160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d5b57613cf58360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d758260095461263290919063ffffffff16565b600981905550613d9081600a546125b490919063ffffffff16565b600a819055505050565b600081359050613da9816149e7565b92915050565b600081359050613dbe816149fe565b92915050565b600081359050613dd381614a15565b92915050565b600060208284031215613deb57600080fd5b6000613df984828501613d9a565b91505092915050565b60008060408385031215613e1557600080fd5b6000613e2385828601613d9a565b9250506020613e3485828601613d9a565b9150509250929050565b600080600060608486031215613e5357600080fd5b6000613e6186828701613d9a565b9350506020613e7286828701613d9a565b9250506040613e8386828701613dc4565b9150509250925092565b60008060408385031215613ea057600080fd5b6000613eae85828601613d9a565b9250506020613ebf85828601613dc4565b9150509250929050565b600060208284031215613edb57600080fd5b6000613ee984828501613daf565b91505092915050565b600060208284031215613f0457600080fd5b6000613f1284828501613dc4565b91505092915050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dc4565b9250506020613f4d85828601613daf565b9150509250929050565b613f6081614822565b82525050565b613f6f81614834565b82525050565b613f7e81614877565b82525050565b6000613f8f826146f1565b613f9981856146fc565b9350613fa981856020860161489b565b613fb2816149d6565b840191505092915050565b6000613fca6023836146fc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614030602a836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006140966026836146fc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140fc6022836146fc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614162601b836146fc565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006141a2601b836146fc565b91507f4163636f756e7420697320616c726561647920696e636c7564656400000000006000830152602082019050919050565b60006141e2601f836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006142226028836146fc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142886020836146fc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006142c86029836146fc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061432e6025836146fc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143946024836146fc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fa602c836146fc565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61445c81614860565b82525050565b61446b8161486a565b82525050565b60006020820190506144866000830184613f57565b92915050565b60006020820190506144a16000830184613f66565b92915050565b60006020820190506144bc6000830184613f75565b92915050565b600060208201905081810360008301526144dc8184613f84565b905092915050565b600060208201905081810360008301526144fd81613fbd565b9050919050565b6000602082019050818103600083015261451d81614023565b9050919050565b6000602082019050818103600083015261453d81614089565b9050919050565b6000602082019050818103600083015261455d816140ef565b9050919050565b6000602082019050818103600083015261457d81614155565b9050919050565b6000602082019050818103600083015261459d81614195565b9050919050565b600060208201905081810360008301526145bd816141d5565b9050919050565b600060208201905081810360008301526145dd81614215565b9050919050565b600060208201905081810360008301526145fd8161427b565b9050919050565b6000602082019050818103600083015261461d816142bb565b9050919050565b6000602082019050818103600083015261463d81614321565b9050919050565b6000602082019050818103600083015261465d81614387565b9050919050565b6000602082019050818103600083015261467d816143ed565b9050919050565b60006020820190506146996000830184614453565b92915050565b60006060820190506146b46000830186614453565b6146c16020830185614453565b6146ce6040830184614453565b949350505050565b60006020820190506146eb6000830184614462565b92915050565b600081519050919050565b600082825260208201905092915050565b600061471882614860565b915061472383614860565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561475857614757614949565b5b828201905092915050565b600061476e82614860565b915061477983614860565b92508261478957614788614978565b5b828204905092915050565b600061479f82614860565b91506147aa83614860565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e3576147e2614949565b5b828202905092915050565b60006147f982614860565b915061480483614860565b92508282101561481757614816614949565b5b828203905092915050565b600061482d82614840565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061488282614889565b9050919050565b600061489482614840565b9050919050565b60005b838110156148b957808201518184015260208101905061489e565b838111156148c8576000848401525b50505050565b600060028204905060018216806148e657607f821691505b602082108114156148fa576148f96149a7565b5b50919050565b600061490b82614860565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561493e5761493d614949565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6149f081614822565b81146149fb57600080fd5b50565b614a0781614834565b8114614a1257600080fd5b50565b614a1e81614860565b8114614a2957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220003457e7ad6451f9f923a7eca80167525fb02208c78858d6d35137612ebf79ab64736f6c63430008000033

Deployed Bytecode Sourcemap

27958:20943:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36022:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30381:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31327:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32767:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29047:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30646:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31519:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33751:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30559:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34514:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31956:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28778:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32858:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28858:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35793:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33275:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29104:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29176:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34068:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41427:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28949:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30745:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1713:145:2;;;;;;;;;;;;;:::i;:::-;;29223:46:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32643:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1081:85:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36242:120:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30468:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32251:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30946:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36124:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36510:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36368:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31144:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35908:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2007:274:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36022:96:3;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36105:6:3::1;36095:7;:16;;;;36022:96:::0;:::o;30381:81::-;30418:13;30450:5;30443:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30381:81;:::o;31327:186::-;31426:4;31446:39;31455:12;:10;:12::i;:::-;31469:7;31478:6;31446:8;:39::i;:::-;31502:4;31495:11;;31327:186;;;;:::o;32767:85::-;32809:7;32835:10;;32828:17;;32767:85;:::o;29047:51::-;;;:::o;30646:93::-;30699:7;30725;;30718:14;;30646:93;:::o;31519:431::-;31647:4;31663:36;31673:6;31681:9;31692:6;31663:9;:36::i;:::-;31709:213;31731:6;31751:12;:10;:12::i;:::-;31777:135;31832:6;31777:135;;;;;;;;;;;;;;;;;:11;:19;31789:6;31777:19;;;;;;;;;;;;;;;:33;31797:12;:10;:12::i;:::-;31777:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;31709:8;:213::i;:::-;31939:4;31932:11;;31519:431;;;;;:::o;33751:311::-;33842:7;33897;;33886;:18;;33865:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33982:19;34004:10;:8;:10::i;:::-;33982:32;;34031:24;34043:11;34031:7;:11;;:24;;;;:::i;:::-;34024:31;;;33751:311;;;:::o;30559:81::-;30600:5;30624:9;;;;;;;;;;;30617:16;;30559:81;:::o;34514:468::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34595:11:3::1;:20;34607:7;34595:20;;;;;;;;;;;;;;;;;;;;;;;;;34587:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34662:9;34657:319;34681:9;:16;;;;34677:1;:20;34657:319;;;34738:7;34722:23;;:9;34732:1;34722:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;34718:248;;;34780:9;34809:1;34790:9;:16;;;;:20;;;;:::i;:::-;34780:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34765:9;34775:1;34765:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34848:1;34829:7;:16;34837:7;34829:16;;;;;;;;;;;;;;;:20;;;;34890:5;34867:11;:20;34879:7;34867:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34913:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34946:5;;34718:248;34699:3;;;;;:::i;:::-;;;;34657:319;;;;34514:468:::0;:::o;31956:289::-;32068:4;32088:129;32110:12;:10;:12::i;:::-;32136:7;32157:50;32196:10;32157:11;:25;32169:12;:10;:12::i;:::-;32157:25;;;;;;;;;;;;;;;:34;32183:7;32157:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32088:8;:129::i;:::-;32234:4;32227:11;;31956:289;;;;:::o;28778:26::-;;;;:::o;32858:411::-;32909:14;32926:12;:10;:12::i;:::-;32909:29;;32970:11;:19;32982:6;32970:19;;;;;;;;;;;;;;;;;;;;;;;;;32969:20;32948:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33070:15;33101:19;33112:7;33101:10;:19::i;:::-;33069:51;;;;;;;;33148:28;33168:7;33148;:15;33156:6;33148:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33130:7;:15;33138:6;33130:15;;;;;;;;;;;;;;;:46;;;;33196:20;33208:7;33196;;:11;;:20;;;;:::i;:::-;33186:7;:30;;;;33239:23;33254:7;33239:10;;:14;;:23;;;;:::i;:::-;33226:10;:36;;;;32858:411;;;:::o;28858:30::-;;;;:::o;35793:109::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35891:4:3::1;35861:18;:27;35880:7;35861:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35793:109:::0;:::o;33275:470::-;33390:7;33432;;33421;:18;;33413:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33490:17;33485:254;;33524:15;33555:19;33566:7;33555:10;:19::i;:::-;33523:51;;;;;;;;33595:7;33588:14;;;;;33485:254;33636:23;33673:19;33684:7;33673:10;:19::i;:::-;33633:59;;;;;;;;33713:15;33706:22;;;33275:470;;;;;:::o;29104:38::-;;;:::o;29176:40::-;;;;;;;;;;;;;:::o;34068:440::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34263:11:3::1;:20;34275:7;34263:20;;;;;;;;;;;;;;;;;;;;;;;;;34262:21;34254:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34348:1;34329:7;:16;34337:7;34329:16;;;;;;;;;;;;;;;;:20;34325:107;;;34384:37;34404:7;:16;34412:7;34404:16;;;;;;;;;;;;;;;;34384:19;:37::i;:::-;34365:7;:16;34373:7;34365:16;;;;;;;;;;;;;;;:56;;;;34325:107;34464:4;34441:11;:20;34453:7;34441:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34478:9;34493:7;34478:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:440:::0;:::o;41427:122::-;41492:4;41515:18;:27;41534:7;41515:27;;;;;;;;;;;;;;;;;;;;;;;;;41508:34;;41427:122;;;:::o;28949:32::-;;;;:::o;30745:195::-;30811:7;30834:11;:20;30846:7;30834:20;;;;;;;;;;;;;;;;;;;;;;;;;30830:49;;;30863:7;:16;30871:7;30863:16;;;;;;;;;;;;;;;;30856:23;;;;30830:49;30896:37;30916:7;:16;30924:7;30916:16;;;;;;;;;;;;;;;;30896:19;:37::i;:::-;30889:44;;30745:195;;;;:::o;1713:145:2:-;1304:12;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1819:1:::1;1782:40;;1803:6;::::0;::::1;;;;;;;;1782:40;;;;;;;;;;;;1849:1;1832:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1713:145::o:0;29223:46:3:-;;;;:::o;32643:118::-;32711:4;32734:11;:20;32746:7;32734:20;;;;;;;;;;;;;;;;;;;;;;;;;32727:27;;32643:118;;;:::o;1081:85:2:-;1127:7;1153:6;;;;;;;;;;;1146:13;;1081:85;:::o;36242:120:3:-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36343:12:3::1;36327:13;:28;;;;36242:120:::0;:::o;30468:85::-;30507:13;30539:7;30532:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30468:85;:::o;32251:386::-;32368:4;32388:221;32410:12;:10;:12::i;:::-;32436:7;32457:142;32513:15;32457:142;;;;;;;;;;;;;;;;;:11;:25;32469:12;:10;:12::i;:::-;32457:25;;;;;;;;;;;;;;;:34;32483:7;32457:34;;;;;;;;;;;;;;;;:38;;:142;;;;;:::i;:::-;32388:8;:221::i;:::-;32626:4;32619:11;;32251:386;;;;:::o;30946:192::-;31048:4;31068:42;31078:12;:10;:12::i;:::-;31092:9;31103:6;31068:9;:42::i;:::-;31127:4;31120:11;;30946:192;;;;:::o;36124:112::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36219:10:3::1;36205:11;:24;;;;36124:112:::0;:::o;36510:168::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36610:8:3::1;36586:21;;:32;;;;;;;;;;;;;;;;;;36633:38;36662:8;36633:38;;;;;;:::i;:::-;;;;;;;;36510:168:::0;:::o;36368:136::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36461:36:3::1;36491:5;36461:25;36473:12;36461:7;;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;36446:12;:51;;;;36368:136:::0;:::o;31144:177::-;31257:7;31287:11;:18;31299:5;31287:18;;;;;;;;;;;;;;;:27;31306:7;31287:27;;;;;;;;;;;;;;;;31280:34;;31144:177;;;;:::o;35908:108::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36004:5:3::1;35974:18;:27;35993:7;35974:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35908:108:::0;:::o;2007:274:2:-;1304:12;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2128:1:::1;2108:22;;:8;:22;;;;2087:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2238:8;2209:38;;2230:6;::::0;::::1;;;;;;;;2209:38;;;;;;;;;;;;2266:8;2257:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2007:274:::0;:::o;586:96:0:-;639:7;665:10;658:17;;586:96;:::o;41555:361:3:-;41694:1;41677:19;;:5;:19;;;;41669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41774:1;41755:21;;:7;:21;;;;41747:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41856:6;41826:11;:18;41838:5;41826:18;;;;;;;;;;;;;;;:27;41845:7;41826:27;;;;;;;;;;;;;;;:36;;;;41893:7;41877:32;;41886:5;41877:32;;;41902:6;41877:32;;;;;;:::i;:::-;;;;;;;;41555:361;;;:::o;41922:1788::-;42055:1;42039:18;;:4;:18;;;;42031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:1;42117:16;;:2;:16;;;;42109:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42200:1;42191:6;:10;42183:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42269:7;:5;:7::i;:::-;42261:15;;:4;:15;;;;:32;;;;;42286:7;:5;:7::i;:::-;42280:13;;:2;:13;;;;42261:32;42257:171;;;42342:12;;42332:6;:22;;42307:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;42257:171;42717:28;42748:24;42766:4;42748:9;:24::i;:::-;42717:55;;42811:12;;42787:20;:36;42783:102;;42862:12;;42839:35;;42783:102;42895:24;42959:29;;42922:20;:66;;42895:93;;43015:19;:53;;;;;43052:16;;;;;;;;;;;43051:17;43015:53;:90;;;;;43092:13;43084:21;;:4;:21;;;;43015:90;:127;;;;;43121:21;;;;;;;;;;;43015:127;42998:310;;;43190:29;;43167:52;;43261:36;43276:20;43261:14;:36::i;:::-;42998:310;43378:12;43393:4;43378:19;;43495:18;:24;43514:4;43495:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43523:18;:22;43542:2;43523:22;;;;;;;;;;;;;;;;;;;;;;;;;43495:50;43491:96;;;43571:5;43561:15;;43491:96;43662:41;43677:4;43683:2;43687:6;43695:7;43662:14;:41::i;:::-;41922:1788;;;;;;:::o;8025:231::-;8141:7;8197:1;8192;:6;;8200:12;8184:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8238:1;8234;:5;8227:12;;8025:231;;;;;:::o;38922:161::-;38964:7;38984:15;39001;39020:19;:17;:19::i;:::-;38983:56;;;;39056:20;39068:7;39056;:11;;:20;;;;:::i;:::-;39049:27;;;;38922:161;:::o;6916:96::-;6974:7;7004:1;7000;:5;;;;:::i;:::-;6993:12;;6916:96;;;;:::o;5821:::-;5879:7;5909:1;5905;:5;;;;:::i;:::-;5898:12;;5821:96;;;;:::o;36924:806::-;37020:7;37041;37062;37083;37104;37125;37146;37192:23;37229:12;37255:18;37287:16;37316:20;37328:7;37316:11;:20::i;:::-;37178:158;;;;;;;;37347:15;37364:23;37389:12;37405:130;37430:7;37451:4;37469:10;37493:8;37515:10;:8;:10::i;:::-;37405:11;:130::i;:::-;37346:189;;;;;;37566:7;37587:15;37616:4;37634:15;37663:4;37681:10;37705:8;37545:178;;;;;;;;;;;;;;;;;;;;;36924:806;;;;;;;;;:::o;6188:96::-;6246:7;6276:1;6272;:5;;;;:::i;:::-;6265:12;;6188:96;;;;:::o;6531:::-;6589:7;6619:1;6615;:5;;;;:::i;:::-;6608:12;;6531:96;;;;:::o;43716:962::-;29648:4;29629:16;;:23;;;;;;;;;;;;;;;;;;43850:12:::1;43865:27;43890:1;43865:20;:24;;:27;;;;:::i;:::-;43850:42;;43902:17;43922:30;43947:4;43922:20;:24;;:30;;;;:::i;:::-;43902:50;;44224:22;44249:21;44224:46;;44465:18;44486:41;44512:14;44486:21;:25;;:41;;;;:::i;:::-;44465:62;;44628:43;44643:4;44649:10;44661:9;44628:43;;;;;;;;:::i;:::-;;;;;;;;29662:1;;;;29692:5:::0;29673:16;;:24;;;;;;;;;;;;;;;;;;43716:962;:::o;45925:817::-;46075:7;46070:28;;46084:14;:12;:14::i;:::-;46070:28;46113:11;:19;46125:6;46113:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46137:11;:22;46149:9;46137:22;;;;;;;;;;;;;;;;;;;;;;;;;46136:23;46113:46;46109:587;;;46175:48;46197:6;46205:9;46216:6;46175:21;:48::i;:::-;46109:587;;;46245:11;:19;46257:6;46245:19;;;;;;;;;;;;;;;;;;;;;;;;;46244:20;:46;;;;;46268:11;:22;46280:9;46268:22;;;;;;;;;;;;;;;;;;;;;;;;;46244:46;46240:456;;;46306:46;46326:6;46334:9;46345:6;46306:19;:46::i;:::-;46240:456;;;46374:11;:19;46386:6;46374:19;;;;;;;;;;;;;;;;;;;;;;;;;46373:20;:47;;;;;46398:11;:22;46410:9;46398:22;;;;;;;;;;;;;;;;;;;;;;;;;46397:23;46373:47;46369:327;;;46436:44;46454:6;46462:9;46473:6;46436:17;:44::i;:::-;46369:327;;;46501:11;:19;46513:6;46501:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46524:11;:22;46536:9;46524:22;;;;;;;;;;;;;;;;;;;;;;;;;46501:45;46497:199;;;46562:48;46584:6;46592:9;46603:6;46562:21;:48::i;:::-;46497:199;;;46641:44;46659:6;46667:9;46678:6;46641:17;:44::i;:::-;46497:199;46369:327;46240:456;46109:587;46711:7;46706:29;;46720:15;:13;:15::i;:::-;46706:29;45925:817;;;;:::o;39089:592::-;39140:7;39149;39168:15;39186:7;;39168:25;;39203:15;39221:7;;39203:25;;39243:9;39238:331;39262:9;:16;;;;39258:1;:20;39238:331;;;39344:7;39320;:21;39328:9;39338:1;39328:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39320:21;;;;;;;;;;;;;;;;:31;:82;;;;39395:7;39371;:21;39379:9;39389:1;39379:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39371:21;;;;;;;;;;;;;;;;:31;39320:82;39299:143;;;39425:7;;39434;;39417:25;;;;;;;;;39299:143;39466:34;39478:7;:21;39486:9;39496:1;39486:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39478:21;;;;;;;;;;;;;;;;39466:7;:11;;:34;;;;:::i;:::-;39456:44;;39524:34;39536:7;:21;39544:9;39554:1;39544:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39536:21;;;;;;;;;;;;;;;;39524:7;:11;;:34;;;;:::i;:::-;39514:44;;39280:3;;;;;:::i;:::-;;;;39238:331;;;;39592:20;39604:7;;39592;;:11;;:20;;;;:::i;:::-;39582:7;:30;39578:61;;;39622:7;;39631;;39614:25;;;;;;;;39578:61;39657:7;39666;39649:25;;;;;;39089:592;;;:::o;37736:523::-;37833:7;37854;37875;37896;37928:12;37943:24;37959:7;37943:15;:24::i;:::-;37928:39;;37977:18;37998:30;38020:7;37998:21;:30::i;:::-;37977:51;;38038:16;38057:28;38077:7;38057:19;:28::i;:::-;38038:47;;38095:23;38121:69;38172:8;38121:33;38143:10;38121:17;38133:4;38121:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:69;;;;:::i;:::-;38095:95;;38208:15;38225:4;38231:10;38243:8;38200:52;;;;;;;;;;;;37736:523;;;;;:::o;38265:651::-;38481:7;38502;38523;38555:15;38573:24;38585:11;38573:7;:11;;:24;;;;:::i;:::-;38555:42;;38607:12;38622:21;38631:11;38622:4;:8;;:21;;;;:::i;:::-;38607:36;;38653:18;38674:27;38689:11;38674:10;:14;;:27;;;;:::i;:::-;38653:48;;38711:16;38730:25;38743:11;38730:8;:12;;:25;;;;:::i;:::-;38711:44;;38765:23;38791:69;38842:8;38791:33;38813:10;38791:17;38803:4;38791:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:69;;;;:::i;:::-;38765:95;;38878:7;38887:15;38904:4;38870:39;;;;;;;;;;;38265:651;;;;;;;;;:::o;40955:295::-;41012:1;41001:7;;:12;:34;;;;;41034:1;41017:13;;:18;41001:34;40997:47;;;41037:7;;40997:47;41072:7;;41054:15;:25;;;;41111:11;;41089:19;:33;;;;41156:13;;41132:21;:37;;;;41190:1;41180:7;:11;;;;41215:1;41201:11;:15;;;;41242:1;41226:13;:17;;;;40955:295;:::o;48170:729::-;48315:15;48344:23;48381:12;48407:23;48444:12;48470:18;48502:16;48531:19;48542:7;48531:10;:19::i;:::-;48301:249;;;;;;;;;;;;;;48578:28;48598:7;48578;:15;48586:6;48578:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48560:7;:15;48568:6;48560:15;;;;;;;;;;;;;;;:46;;;;48634:28;48654:7;48634;:15;48642:6;48634:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48616:7;:15;48624:6;48616:15;;;;;;;;;;;;;;;:46;;;;48693:39;48716:15;48693:7;:18;48701:9;48693:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48672:7;:18;48680:9;48672:18;;;;;;;;;;;;;;;:60;;;;48742:26;48757:10;48742:14;:26::i;:::-;48778:22;48791:8;48778:12;:22::i;:::-;48810:23;48822:4;48828;48810:11;:23::i;:::-;48865:9;48848:44;;48857:6;48848:44;;;48876:15;48848:44;;;;;;:::i;:::-;;;;;;;;48170:729;;;;;;;;;;:::o;47423:741::-;47566:15;47595:23;47632:12;47658:23;47695:12;47721:18;47753:16;47782:19;47793:7;47782:10;:19::i;:::-;47552:249;;;;;;;;;;;;;;47829:28;47849:7;47829;:15;47837:6;47829:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47811:7;:15;47819:6;47811:15;;;;;;;;;;;;;;;:46;;;;47888:39;47911:15;47888:7;:18;47896:9;47888:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47867:7;:18;47875:9;47867:18;;;;;;;;;;;;;;;:60;;;;47958:39;47981:15;47958:7;:18;47966:9;47958:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47937:7;:18;47945:9;47937:18;;;;;;;;;;;;;;;:60;;;;48007:26;48022:10;48007:14;:26::i;:::-;48043:22;48056:8;48043:12;:22::i;:::-;48075:23;48087:4;48093;48075:11;:23::i;:::-;48130:9;48113:44;;48122:6;48113:44;;;48141:15;48113:44;;;;;;:::i;:::-;;;;;;;;47423:741;;;;;;;;;;:::o;46748:669::-;46889:15;46918:23;46955:12;46981:23;47018:12;47044:18;47076:16;47105:19;47116:7;47105:10;:19::i;:::-;46875:249;;;;;;;;;;;;;;47152:28;47172:7;47152;:15;47160:6;47152:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47134:7;:15;47142:6;47134:15;;;;;;;;;;;;;;;:46;;;;47211:39;47234:15;47211:7;:18;47219:9;47211:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47190:7;:18;47198:9;47190:18;;;;;;;;;;;;;;;:60;;;;47260:26;47275:10;47260:14;:26::i;:::-;47296:22;47309:8;47296:12;:22::i;:::-;47328:23;47340:4;47346;47328:11;:23::i;:::-;47383:9;47366:44;;47375:6;47366:44;;;47394:15;47366:44;;;;;;:::i;:::-;;;;;;;;46748:669;;;;;;;;;;:::o;34988:799::-;35133:15;35162:23;35199:12;35225:23;35262:12;35288:18;35320:16;35349:19;35360:7;35349:10;:19::i;:::-;35119:249;;;;;;;;;;;;;;35396:28;35416:7;35396;:15;35404:6;35396:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35378:7;:15;35386:6;35378:15;;;;;;;;;;;;;;;:46;;;;35452:28;35472:7;35452;:15;35460:6;35452:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35434:7;:15;35442:6;35434:15;;;;;;;;;;;;;;;:46;;;;35511:39;35534:15;35511:7;:18;35519:9;35511:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35490:7;:18;35498:9;35490:18;;;;;;;;;;;;;;;:60;;;;35581:39;35604:15;35581:7;:18;35589:9;35581:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35560:7;:18;35568:9;35560:18;;;;;;;;;;;;;;;:60;;;;35630:26;35645:10;35630:14;:26::i;:::-;35666:22;35679:8;35666:12;:22::i;:::-;35698:23;35710:4;35716;35698:11;:23::i;:::-;35753:9;35736:44;;35745:6;35736:44;;;35764:15;35736:44;;;;;;:::i;:::-;;;;;;;;34988:799;;;;;;;;;;:::o;41256:165::-;41309:15;;41299:7;:25;;;;41348:19;;41334:11;:33;;;;41393:21;;41377:13;:37;;;;41256:165::o;40477:128::-;40541:7;40567:31;40592:5;40567:20;40579:7;;40567;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40560:38;;40477:128;;;:::o;40781:168::-;40875:7;40905:37;40936:5;40905:26;40917:13;;40905:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40898:44;;40781:168;;;:::o;40611:164::-;40703:7;40733:35;40762:5;40733:24;40745:11;;40733:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;40726:42;;40611:164;;;:::o;39687:349::-;39749:19;39771:10;:8;:10::i;:::-;39749:32;;39791:18;39812:27;39827:11;39812:10;:14;;:27;;;;:::i;:::-;39791:48;;39874:38;39901:10;39874:7;:22;39890:4;39874:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39849:7;:22;39865:4;39849:22;;;;;;;;;;;;;;;:63;;;;39926:11;:26;39946:4;39926:26;;;;;;;;;;;;;;;;;;;;;;;;;39922:107;;;39991:38;40018:10;39991:7;:22;40007:4;39991:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39966:7;:22;39982:4;39966:22;;;;;;;;;;;;;;;:63;;;;39922:107;39687:349;;;:::o;40042:429::-;40100:19;40122:10;:8;:10::i;:::-;40100:32;;40142:16;40161:25;40174:11;40161:8;:12;;:25;;;;:::i;:::-;40142:44;;40229:66;40277:8;40229:7;:30;40237:21;;;;;;;;;;;40229:30;;;;;;;;;;;;;;;;:34;;:66;;;;:::i;:::-;40196:7;:30;40204:21;;;;;;;;;;;40196:30;;;;;;;;;;;;;;;:99;;;;40309:11;:34;40321:21;;;;;;;;;;;40309:34;;;;;;;;;;;;;;;;;;;;;;;;;40305:159;;;40390:74;40442:8;40390:7;:30;40398:21;;;;;;;;;;;40390:30;;;;;;;;;;;;;;;;:34;;:74;;;;:::i;:::-;40357:7;:30;40365:21;;;;;;;;;;;40357:30;;;;;;;;;;;;;;;:107;;;;40305:159;40042:429;;;:::o;36774:144::-;36851:17;36863:4;36851:7;;:11;;:17;;;;:::i;:::-;36841:7;:27;;;;36891:20;36906:4;36891:10;;:14;;:20;;;;:::i;:::-;36878:10;:33;;;;36774:144;;:::o;7:139:4:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:256::-;;2193:2;2181:9;2172:7;2168:23;2164:32;2161:2;;;2209:1;2206;2199:12;2161:2;2252:1;2277:50;2319:7;2310:6;2299:9;2295:22;2277:50;:::i;:::-;2267:60;;2223:114;2151:193;;;;:::o;2350:262::-;;2458:2;2446:9;2437:7;2433:23;2429:32;2426:2;;;2474:1;2471;2464:12;2426:2;2517:1;2542:53;2587:7;2578:6;2567:9;2563:22;2542:53;:::i;:::-;2532:63;;2488:117;2416:196;;;;:::o;2618:401::-;;;2740:2;2728:9;2719:7;2715:23;2711:32;2708:2;;;2756:1;2753;2746:12;2708:2;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:50;2994:7;2985:6;2974:9;2970:22;2952:50;:::i;:::-;2942:60;;2897:115;2698:321;;;;;:::o;3025:118::-;3112:24;3130:5;3112:24;:::i;:::-;3107:3;3100:37;3090:53;;:::o;3149:109::-;3230:21;3245:5;3230:21;:::i;:::-;3225:3;3218:34;3208:50;;:::o;3264:185::-;3378:64;3436:5;3378:64;:::i;:::-;3373:3;3366:77;3356:93;;:::o;3455:364::-;;3571:39;3604:5;3571:39;:::i;:::-;3626:71;3690:6;3685:3;3626:71;:::i;:::-;3619:78;;3706:52;3751:6;3746:3;3739:4;3732:5;3728:16;3706:52;:::i;:::-;3783:29;3805:6;3783:29;:::i;:::-;3778:3;3774:39;3767:46;;3547:272;;;;;:::o;3825:367::-;;3988:67;4052:2;4047:3;3988:67;:::i;:::-;3981:74;;4085:34;4081:1;4076:3;4072:11;4065:55;4151:5;4146:2;4141:3;4137:12;4130:27;4183:2;4178:3;4174:12;4167:19;;3971:221;;;:::o;4198:374::-;;4361:67;4425:2;4420:3;4361:67;:::i;:::-;4354:74;;4458:34;4454:1;4449:3;4445:11;4438:55;4524:12;4519:2;4514:3;4510:12;4503:34;4563:2;4558:3;4554:12;4547:19;;4344:228;;;:::o;4578:370::-;;4741:67;4805:2;4800:3;4741:67;:::i;:::-;4734:74;;4838:34;4834:1;4829:3;4825:11;4818:55;4904:8;4899:2;4894:3;4890:12;4883:30;4939:2;4934:3;4930:12;4923:19;;4724:224;;;:::o;4954:366::-;;5117:67;5181:2;5176:3;5117:67;:::i;:::-;5110:74;;5214:34;5210:1;5205:3;5201:11;5194:55;5280:4;5275:2;5270:3;5266:12;5259:26;5311:2;5306:3;5302:12;5295:19;;5100:220;;;:::o;5326:325::-;;5489:67;5553:2;5548:3;5489:67;:::i;:::-;5482:74;;5586:29;5582:1;5577:3;5573:11;5566:50;5642:2;5637:3;5633:12;5626:19;;5472:179;;;:::o;5657:325::-;;5820:67;5884:2;5879:3;5820:67;:::i;:::-;5813:74;;5917:29;5913:1;5908:3;5904:11;5897:50;5973:2;5968:3;5964:12;5957:19;;5803:179;;;:::o;5988:329::-;;6151:67;6215:2;6210:3;6151:67;:::i;:::-;6144:74;;6248:33;6244:1;6239:3;6235:11;6228:54;6308:2;6303:3;6299:12;6292:19;;6134:183;;;:::o;6323:372::-;;6486:67;6550:2;6545:3;6486:67;:::i;:::-;6479:74;;6583:34;6579:1;6574:3;6570:11;6563:55;6649:10;6644:2;6639:3;6635:12;6628:32;6686:2;6681:3;6677:12;6670:19;;6469:226;;;:::o;6701:330::-;;6864:67;6928:2;6923:3;6864:67;:::i;:::-;6857:74;;6961:34;6957:1;6952:3;6948:11;6941:55;7022:2;7017:3;7013:12;7006:19;;6847:184;;;:::o;7037:373::-;;7200:67;7264:2;7259:3;7200:67;:::i;:::-;7193:74;;7297:34;7293:1;7288:3;7284:11;7277:55;7363:11;7358:2;7353:3;7349:12;7342:33;7401:2;7396:3;7392:12;7385:19;;7183:227;;;:::o;7416:369::-;;7579:67;7643:2;7638:3;7579:67;:::i;:::-;7572:74;;7676:34;7672:1;7667:3;7663:11;7656:55;7742:7;7737:2;7732:3;7728:12;7721:29;7776:2;7771:3;7767:12;7760:19;;7562:223;;;:::o;7791:368::-;;7954:67;8018:2;8013:3;7954:67;:::i;:::-;7947:74;;8051:34;8047:1;8042:3;8038:11;8031:55;8117:6;8112:2;8107:3;8103:12;8096:28;8150:2;8145:3;8141:12;8134:19;;7937:222;;;:::o;8165:376::-;;8328:67;8392:2;8387:3;8328:67;:::i;:::-;8321:74;;8425:34;8421:1;8416:3;8412:11;8405:55;8491:14;8486:2;8481:3;8477:12;8470:36;8532:2;8527:3;8523:12;8516:19;;8311:230;;;:::o;8547:118::-;8634:24;8652:5;8634:24;:::i;:::-;8629:3;8622:37;8612:53;;:::o;8671:112::-;8754:22;8770:5;8754:22;:::i;:::-;8749:3;8742:35;8732:51;;:::o;8789:222::-;;8920:2;8909:9;8905:18;8897:26;;8933:71;9001:1;8990:9;8986:17;8977:6;8933:71;:::i;:::-;8887:124;;;;:::o;9017:210::-;;9142:2;9131:9;9127:18;9119:26;;9155:65;9217:1;9206:9;9202:17;9193:6;9155:65;:::i;:::-;9109:118;;;;:::o;9233:276::-;;9391:2;9380:9;9376:18;9368:26;;9404:98;9499:1;9488:9;9484:17;9475:6;9404:98;:::i;:::-;9358:151;;;;:::o;9515:313::-;;9666:2;9655:9;9651:18;9643:26;;9715:9;9709:4;9705:20;9701:1;9690:9;9686:17;9679:47;9743:78;9816:4;9807:6;9743:78;:::i;:::-;9735:86;;9633:195;;;;:::o;9834:419::-;;10038:2;10027:9;10023:18;10015:26;;10087:9;10081:4;10077:20;10073:1;10062:9;10058:17;10051:47;10115:131;10241:4;10115:131;:::i;:::-;10107:139;;10005:248;;;:::o;10259:419::-;;10463:2;10452:9;10448:18;10440:26;;10512:9;10506:4;10502:20;10498:1;10487:9;10483:17;10476:47;10540:131;10666:4;10540:131;:::i;:::-;10532:139;;10430:248;;;:::o;10684:419::-;;10888:2;10877:9;10873:18;10865:26;;10937:9;10931:4;10927:20;10923:1;10912:9;10908:17;10901:47;10965:131;11091:4;10965:131;:::i;:::-;10957:139;;10855:248;;;:::o;11109:419::-;;11313:2;11302:9;11298:18;11290:26;;11362:9;11356:4;11352:20;11348:1;11337:9;11333:17;11326:47;11390:131;11516:4;11390:131;:::i;:::-;11382:139;;11280:248;;;:::o;11534:419::-;;11738:2;11727:9;11723:18;11715:26;;11787:9;11781:4;11777:20;11773:1;11762:9;11758:17;11751:47;11815:131;11941:4;11815:131;:::i;:::-;11807:139;;11705:248;;;:::o;11959:419::-;;12163:2;12152:9;12148:18;12140:26;;12212:9;12206:4;12202:20;12198:1;12187:9;12183:17;12176:47;12240:131;12366:4;12240:131;:::i;:::-;12232:139;;12130:248;;;:::o;12384:419::-;;12588:2;12577:9;12573:18;12565:26;;12637:9;12631:4;12627:20;12623:1;12612:9;12608:17;12601:47;12665:131;12791:4;12665:131;:::i;:::-;12657:139;;12555:248;;;:::o;12809:419::-;;13013:2;13002:9;12998:18;12990:26;;13062:9;13056:4;13052:20;13048:1;13037:9;13033:17;13026:47;13090:131;13216:4;13090:131;:::i;:::-;13082:139;;12980:248;;;:::o;13234:419::-;;13438:2;13427:9;13423:18;13415:26;;13487:9;13481:4;13477:20;13473:1;13462:9;13458:17;13451:47;13515:131;13641:4;13515:131;:::i;:::-;13507:139;;13405:248;;;:::o;13659:419::-;;13863:2;13852:9;13848:18;13840:26;;13912:9;13906:4;13902:20;13898:1;13887:9;13883:17;13876:47;13940:131;14066:4;13940:131;:::i;:::-;13932:139;;13830:248;;;:::o;14084:419::-;;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14255:248;;;:::o;14509:419::-;;14713:2;14702:9;14698:18;14690:26;;14762:9;14756:4;14752:20;14748:1;14737:9;14733:17;14726:47;14790:131;14916:4;14790:131;:::i;:::-;14782:139;;14680:248;;;:::o;14934:419::-;;15138:2;15127:9;15123:18;15115:26;;15187:9;15181:4;15177:20;15173:1;15162:9;15158:17;15151:47;15215:131;15341:4;15215:131;:::i;:::-;15207:139;;15105:248;;;:::o;15359:222::-;;15490:2;15479:9;15475:18;15467:26;;15503:71;15571:1;15560:9;15556:17;15547:6;15503:71;:::i;:::-;15457:124;;;;:::o;15587:442::-;;15774:2;15763:9;15759:18;15751:26;;15787:71;15855:1;15844:9;15840:17;15831:6;15787:71;:::i;:::-;15868:72;15936:2;15925:9;15921:18;15912:6;15868:72;:::i;:::-;15950;16018:2;16007:9;16003:18;15994:6;15950:72;:::i;:::-;15741:288;;;;;;:::o;16035:214::-;;16162:2;16151:9;16147:18;16139:26;;16175:67;16239:1;16228:9;16224:17;16215:6;16175:67;:::i;:::-;16129:120;;;;:::o;16255:99::-;;16341:5;16335:12;16325:22;;16314:40;;;:::o;16360:169::-;;16478:6;16473:3;16466:19;16518:4;16513:3;16509:14;16494:29;;16456:73;;;;:::o;16535:305::-;;16594:20;16612:1;16594:20;:::i;:::-;16589:25;;16628:20;16646:1;16628:20;:::i;:::-;16623:25;;16782:1;16714:66;16710:74;16707:1;16704:81;16701:2;;;16788:18;;:::i;:::-;16701:2;16832:1;16829;16825:9;16818:16;;16579:261;;;;:::o;16846:185::-;;16903:20;16921:1;16903:20;:::i;:::-;16898:25;;16937:20;16955:1;16937:20;:::i;:::-;16932:25;;16976:1;16966:2;;16981:18;;:::i;:::-;16966:2;17023:1;17020;17016:9;17011:14;;16888:143;;;;:::o;17037:348::-;;17100:20;17118:1;17100:20;:::i;:::-;17095:25;;17134:20;17152:1;17134:20;:::i;:::-;17129:25;;17322:1;17254:66;17250:74;17247:1;17244:81;17239:1;17232:9;17225:17;17221:105;17218:2;;;17329:18;;:::i;:::-;17218:2;17377:1;17374;17370:9;17359:20;;17085:300;;;;:::o;17391:191::-;;17451:20;17469:1;17451:20;:::i;:::-;17446:25;;17485:20;17503:1;17485:20;:::i;:::-;17480:25;;17524:1;17521;17518:8;17515:2;;;17529:18;;:::i;:::-;17515:2;17574:1;17571;17567:9;17559:17;;17436:146;;;;:::o;17588:96::-;;17654:24;17672:5;17654:24;:::i;:::-;17643:35;;17633:51;;;:::o;17690:90::-;;17767:5;17760:13;17753:21;17742:32;;17732:48;;;:::o;17786:126::-;;17863:42;17856:5;17852:54;17841:65;;17831:81;;;:::o;17918:77::-;;17984:5;17973:16;;17963:32;;;:::o;18001:86::-;;18076:4;18069:5;18065:16;18054:27;;18044:43;;;:::o;18093:180::-;;18203:64;18261:5;18203:64;:::i;:::-;18190:77;;18180:93;;;:::o;18279:140::-;;18389:24;18407:5;18389:24;:::i;:::-;18376:37;;18366:53;;;:::o;18425:307::-;18493:1;18503:113;18517:6;18514:1;18511:13;18503:113;;;18602:1;18597:3;18593:11;18587:18;18583:1;18578:3;18574:11;18567:39;18539:2;18536:1;18532:10;18527:15;;18503:113;;;18634:6;18631:1;18628:13;18625:2;;;18714:1;18705:6;18700:3;18696:16;18689:27;18625:2;18474:258;;;;:::o;18738:320::-;;18819:1;18813:4;18809:12;18799:22;;18866:1;18860:4;18856:12;18887:18;18877:2;;18943:4;18935:6;18931:17;18921:27;;18877:2;19005;18997:6;18994:14;18974:18;18971:38;18968:2;;;19024:18;;:::i;:::-;18968:2;18789:269;;;;:::o;19064:233::-;;19126:24;19144:5;19126:24;:::i;:::-;19117:33;;19172:66;19165:5;19162:77;19159:2;;;19242:18;;:::i;:::-;19159:2;19289:1;19282:5;19278:13;19271:20;;19107:190;;;:::o;19303:180::-;19351:77;19348:1;19341:88;19448:4;19445:1;19438:15;19472:4;19469:1;19462:15;19489:180;19537:77;19534:1;19527:88;19634:4;19631:1;19624:15;19658:4;19655:1;19648:15;19675:180;19723:77;19720:1;19713:88;19820:4;19817:1;19810:15;19844:4;19841:1;19834:15;19861:102;;19953:2;19949:7;19944:2;19937:5;19933:14;19929:28;19919:38;;19909:54;;;:::o;19969:122::-;20042:24;20060:5;20042:24;:::i;:::-;20035:5;20032:35;20022:2;;20081:1;20078;20071:12;20022:2;20012:79;:::o;20097:116::-;20167:21;20182:5;20167:21;:::i;:::-;20160:5;20157:32;20147:2;;20203:1;20200;20193:12;20147:2;20137:76;:::o;20219:122::-;20292:24;20310:5;20292:24;:::i;:::-;20285:5;20282:35;20272:2;;20331:1;20328;20321:12;20272:2;20262:79;:::o

Swarm Source

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