Token PANDA FINANCE

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,000,000,000 PANDA

Holders:
3 addresses

Transfers:
-

Contract:
0x51b0234A9caEb213AD22ae64A6a700Dd1781a87c0x51b0234A9caEb213AD22ae64A6a700Dd1781a87c

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PANDAFI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 10: PANDAFI.sol
// SPDX-License-Identifier: MIT


pragma solidity ^0.8.7;
pragma experimental ABIEncoderV2;

import "./IERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
import "./Address.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Router02.sol";

contract PANDAFI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    address public router;
    address public basePair;

    uint256 public prevDevFee;

    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromDevFee;
    mapping(address => bool) private _isExcludedFromMaxAmount;
    mapping(address => bool) private _isDevWallet;

    address[] private _excluded;
    address public _devWalletAddress;

    uint256 private _tTotal;
    uint256 public _devFee;
    uint256 private _previousDevFee = _devFee;

    uint256 public _maxTxAmount;
    uint256 public _maxHeldAmount;

    IUniswapV2Router02 public uniswapV2Router;
    IUniswapV2Pair public uniswapV2Pair;

    constructor(
        address tokenOwner,
        address devWalletAddress_,
        address _router,
        address _basePair
    ) {
        _name = "PANDA FINANCE";
        _symbol = "PANDA";
        _decimals = 18;
        _tTotal = 1000000000 * 10**_decimals;
        _tOwned[tokenOwner] = _tTotal;

        _devFee = 4;
        _previousDevFee = _devFee;
        _devWalletAddress = devWalletAddress_;

        _maxHeldAmount = _tTotal;
        _maxTxAmount = _maxHeldAmount;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Pair(
            IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _basePair
            )
        );

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

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

        //set wallet provided to true
        _isDevWallet[_devWalletAddress] = true;

        emit Transfer(address(0), tokenOwner, _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() external view override returns (uint256) { return _tTotal.sub(balanceOf(DEAD)); }

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

    function getBasePairAddr() public view returns (address) {
        return basePair;
    }

    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 excludeFromFee(address account) public onlyOwner {
        require(!_isExcludedFromDevFee[account], "Account is already excluded");
        _isExcludedFromDevFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        require(_isExcludedFromDevFee[account], "Account is already included");
        _isExcludedFromDevFee[account] = false;
    }

    function excludeFromMaxAmount(address account) public onlyOwner {
        require(
            !_isExcludedFromMaxAmount[account],
            "Account is already excluded"
        );
        _isExcludedFromMaxAmount[account] = true;
    }

    function includeInMaxAmount(address account) public onlyOwner {
        require(
            _isExcludedFromMaxAmount[account],
            "Account is already included"
        );
        _isExcludedFromMaxAmount[account] = false;
    }

    function setDevFeePercent(uint256 devFee) external onlyOwner {
        require(devFee <= 4, "teamFee out of range");
        _devFee = devFee;
    }


    function setDevWalletAddress(address _addr) public onlyOwner {
        require(!_isDevWallet[_addr], "Wallet address already set");
        if (!_isExcludedFromDevFee[_addr]) {
            excludeFromFee(_addr);
        }
        _isDevWallet[_addr] = true;
        _devWalletAddress = _addr;
    }

    function replaceDevWalletAddress(address _addr, address _newAddr)
        external
        onlyOwner
    {
        require(_isDevWallet[_addr], "Wallet address not set previously");
        if (_isExcludedFromDevFee[_addr]) {
            includeInFee(_addr);
        }
        _isDevWallet[_addr] = false;
        if (_devWalletAddress == _addr) {
            setDevWalletAddress(_newAddr);
        }
    }

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

    function _getValues(uint256 tAmount)
        private
        view
        returns (uint256, uint256)
    {
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tDev);
        return (tTransferAmount, tDev);
    }

    function _takeDev(uint256 tDev) private {
        _tOwned[_devWalletAddress] = _tOwned[_devWalletAddress].add(tDev);
    }

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

    function removeAllFee() private {
        if (_devFee == 0) return;
        _previousDevFee = _devFee;
        _devFee = 0;
    }

    function restoreAllFee() private {
        _devFee = _previousDevFee;
    }

    function enablemaxamount() public {
        _maxHeldAmount = _tTotal.mul(40).div(1000); // 4%
        _maxTxAmount = _maxHeldAmount;
    }

    function Disablemaxamount() public {
        _maxHeldAmount = _tTotal;
        _maxTxAmount = _maxHeldAmount;
    }

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

    function isExcludedFromMaxAmount(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxAmount[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");

        // Only limit max TX for swaps, not for standard transactions
        if (
            from == address(uniswapV2Router) || to == address(uniswapV2Router)
        ) {
            if (
                !_isExcludedFromMaxAmount[from] && !_isExcludedFromMaxAmount[to]
            )
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
        }

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

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

        if (!_isExcludedFromMaxAmount[to]) {
            require(
                _tOwned[to].add(amount) <= _maxHeldAmount,
                "Recipient already owns maximum amount of tokens."
            );
        }

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

        //reset tax fees
        restoreAllFee();
    }

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

        _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
            DEAD,
            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();

        (uint256 tTransferAmount, uint256 tDev) = _getValues(amount);
        _tOwned[sender] = _tOwned[sender].sub(amount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _takeDev(tDev);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function disableFees() public onlyOwner {
        removeAllFee();
    }

    function enableFees() public onlyOwner {
        restoreAllFee();
    }
}

File 1 of 10: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

File 2 of 10: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 4 of 10: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 5 of 10: IUniswapV2Pair.sol
pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 6 of 10: IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 7 of 10: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 8 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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

File 10 of 10: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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. 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;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"devWalletAddress_","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_basePair","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Disablemaxamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxHeldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"basePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablemaxamount","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":"excludeFromMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBasePairAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxAmount","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":"isExcludedFromMaxAmount","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":[],"name":"prevDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_newAddr","type":"address"}],"name":"replaceDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"contract IUniswapV2Pair","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"}]

6080604052600e54600f553480156200001757600080fd5b5060405162003ef038038062003ef083398181016040528101906200003d919062000820565b6200005d62000051620006c160201b60201c565b620006c960201b60201c565b6040518060400160405280600d81526020017f50414e44412046494e414e43450000000000000000000000000000000000000081525060019081620000a3919062000b0c565b506040518060400160405280600581526020017f50414e444100000000000000000000000000000000000000000000000000000081525060029081620000ea919062000b0c565b506012600360006101000a81548160ff021916908360ff160217905550600360009054906101000a900460ff16600a62000125919062000d83565b633b9aca0062000136919062000dd4565b600d81905550600d54600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004600e81905550600e54600f8190555082600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d5460118190555060115460108190555060008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d919062000e1f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b81526004016200029992919062000e62565b6020604051808303816000875af1158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df919062000e1f565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620003766200078d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620004af6200078d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d54604051620006ae919062000ea0565b60405180910390a3505050505062000ebd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007e882620007bb565b9050919050565b620007fa81620007db565b81146200080657600080fd5b50565b6000815190506200081a81620007ef565b92915050565b600080600080608085870312156200083d576200083c620007b6565b5b60006200084d8782880162000809565b9450506020620008608782880162000809565b9350506040620008738782880162000809565b9250506060620008868782880162000809565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200091457607f821691505b6020821081036200092a5762000929620008cc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000955565b620009a0868362000955565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009ed620009e7620009e184620009b8565b620009c2565b620009b8565b9050919050565b6000819050919050565b62000a0983620009cc565b62000a2162000a1882620009f4565b84845462000962565b825550505050565b600090565b62000a3862000a29565b62000a45818484620009fe565b505050565b5b8181101562000a6d5762000a6160008262000a2e565b60018101905062000a4b565b5050565b601f82111562000abc5762000a868162000930565b62000a918462000945565b8101602085101562000aa1578190505b62000ab962000ab08562000945565b83018262000a4a565b50505b505050565b600082821c905092915050565b600062000ae16000198460080262000ac1565b1980831691505092915050565b600062000afc838362000ace565b9150826002028217905092915050565b62000b178262000892565b67ffffffffffffffff81111562000b335762000b326200089d565b5b62000b3f8254620008fb565b62000b4c82828562000a71565b600060209050601f83116001811462000b84576000841562000b6f578287015190505b62000b7b858262000aee565b86555062000beb565b601f19841662000b948662000930565b60005b8281101562000bbe5784890151825560018201915060208501945060208101905062000b97565b8683101562000bde578489015162000bda601f89168262000ace565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c815780860481111562000c595762000c5862000bf3565b5b600185161562000c695780820291505b808102905062000c798562000c22565b945062000c39565b94509492505050565b60008262000c9c576001905062000d6f565b8162000cac576000905062000d6f565b816001811462000cc5576002811462000cd05762000d06565b600191505062000d6f565b60ff84111562000ce55762000ce462000bf3565b5b8360020a91508482111562000cff5762000cfe62000bf3565b5b5062000d6f565b5060208310610133831016604e8410600b841016171562000d405782820a90508381111562000d3a5762000d3962000bf3565b5b62000d6f565b62000d4f848484600162000c2f565b9250905081840481111562000d695762000d6862000bf3565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d9082620009b8565b915062000d9d8362000d76565b925062000dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c8a565b905092915050565b600062000de182620009b8565b915062000dee83620009b8565b925082820262000dfe81620009b8565b9150828204841483151762000e185762000e1762000bf3565b5b5092915050565b60006020828403121562000e385762000e37620007b6565b5b600062000e488482850162000809565b91505092915050565b62000e5c81620007db565b82525050565b600060408201905062000e79600083018562000e51565b62000e88602083018462000e51565b9392505050565b62000e9a81620009b8565b82525050565b600060208201905062000eb7600083018462000e8f565b92915050565b6130238062000ecd6000396000f3fe60806040526004361061021e5760003560e01c806370a0823111610123578063b0dee101116100ab578063dd62ed3e1161006f578063dd62ed3e146107aa578063ddf47a32146107e7578063ea2f0b3714610812578063f2fde38b1461083b578063f887ea401461086457610225565b8063b0dee101146106e9578063b425bac314610714578063bf2e2c521461073f578063ce404b231461076a578063d7034bd61461078157610225565b80638da5cb5b116100f25780638da5cb5b146105ee57806395d89b4114610619578063a457c2d714610644578063a9059cbb14610681578063aa45026b146106be57610225565b806370a0823114610546578063715018a6146105835780637d1db4a51461059a57806383bbe74b146105c557610225565b80633825f71b116101a657806349bd5a5e1161017557806349bd5a5e1461044d5780634ab76827146104785780634d77e91d146104a15780635342acb4146104de5780635930919b1461051b57610225565b80633825f71b146103b957806339509351146103d0578063437823ec1461040d57806346fcec941461043657610225565b806318160ddd116101ed57806318160ddd146102e657806323b872dd14610311578063313ce5671461034e578063368f5bd514610379578063379e29191461039057610225565b806306fdde031461022a578063095ea7b314610255578063120a0612146102925780631694505e146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f61088f565b60405161024c919061236a565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612425565b610921565b6040516102899190612480565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061249b565b61093f565b005b3480156102c757600080fd5b506102d0610acb565b6040516102dd9190612527565b60405180910390f35b3480156102f257600080fd5b506102fb610af1565b6040516103089190612551565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061256c565b610b17565b6040516103459190612480565b60405180910390f35b34801561035a57600080fd5b50610363610bf0565b60405161037091906125db565b60405180910390f35b34801561038557600080fd5b5061038e610c07565b005b34801561039c57600080fd5b506103b760048036038101906103b291906125f6565b610c19565b005b3480156103c557600080fd5b506103ce610c6f565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612425565b610c83565b6040516104049190612480565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061249b565b610d36565b005b34801561044257600080fd5b5061044b610e26565b005b34801561045957600080fd5b50610462610e61565b60405161046f9190612644565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061249b565b610e87565b005b3480156104ad57600080fd5b506104c860048036038101906104c3919061249b565b610f77565b6040516104d59190612480565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061249b565b610fcd565b6040516105129190612480565b60405180910390f35b34801561052757600080fd5b50610530611023565b60405161053d919061266e565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061249b565b611049565b60405161057a9190612551565b60405180910390f35b34801561058f57600080fd5b50610598611092565b005b3480156105a657600080fd5b506105af6110a6565b6040516105bc9190612551565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061249b565b6110ac565b005b3480156105fa57600080fd5b5061060361119b565b604051610610919061266e565b60405180910390f35b34801561062557600080fd5b5061062e6111c4565b60405161063b919061236a565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612425565b611256565b6040516106789190612480565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190612425565b611323565b6040516106b59190612480565b60405180910390f35b3480156106ca57600080fd5b506106d3611341565b6040516106e09190612551565b60405180910390f35b3480156106f557600080fd5b506106fe611347565b60405161070b9190612551565b60405180910390f35b34801561072057600080fd5b5061072961134d565b604051610736919061266e565b60405180910390f35b34801561074b57600080fd5b50610754611373565b6040516107619190612551565b60405180910390f35b34801561077657600080fd5b5061077f611379565b005b34801561078d57600080fd5b506107a860048036038101906107a39190612689565b61138b565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190612689565b611536565b6040516107de9190612551565b60405180910390f35b3480156107f357600080fd5b506107fc6115bd565b604051610809919061266e565b60405180910390f35b34801561081e57600080fd5b506108396004803603810190610834919061249b565b6115e7565b005b34801561084757600080fd5b50610862600480360381019061085d919061249b565b6116d6565b005b34801561087057600080fd5b50610879611759565b604051610886919061266e565b60405180910390f35b60606001805461089e906126f8565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca906126f8565b80156109175780601f106108ec57610100808354040283529160200191610917565b820191906000526020600020905b8154815290600101906020018083116108fa57829003601f168201915b5050505050905090565b600061093561092e61177f565b8484611787565b6001905092915050565b610947611950565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90612775565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a2f57610a2e81610d36565b5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b12610b0161dead611049565b600d546119ce90919063ffffffff16565b905090565b6000610b248484846119e4565b610be584610b3061177f565b610be085604051806060016040528060288152602001612fa160289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b9661177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e569092919063ffffffff16565b611787565b600190509392505050565b6000600360009054906101000a900460ff16905090565b610c0f611950565b610c17611eab565b565b610c21611950565b6004811115610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906127e1565b60405180910390fd5b80600e8190555050565b600d54601181905550601154601081905550565b6000610d2c610c9061177f565b84610d278560076000610ca161177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b611787565b6001905092915050565b610d3e611950565b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061284d565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e506103e8610e426028600d54611ecc90919063ffffffff16565b611ee290919063ffffffff16565b601181905550601154601081905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e8f611950565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061284d565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109a611950565b6110a46000611ef8565b565b60105481565b6110b4611950565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906128b9565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111d3906126f8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ff906126f8565b801561124c5780601f106112215761010080835404028352916020019161124c565b820191906000526020600020905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b600061131961126361177f565b8461131485604051806060016040528060258152602001612fc9602591396007600061128d61177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e569092919063ffffffff16565b611787565b6001905092915050565b600061133761133061177f565b84846119e4565b6001905092915050565b600e5481565b60115481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b611381611950565b611389611fbc565b565b611393611950565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061294b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561147b5761147a826115e7565b5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611532576115318161093f565b5b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ef611950565b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906128b9565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116de611950565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611744906129dd565b60405180910390fd5b61175681611ef8565b50565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90612a6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90612b01565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119439190612551565b60405180910390a3505050565b61195861177f565b73ffffffffffffffffffffffffffffffffffffffff1661197661119b565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612b6d565b60405180910390fd5b565b600081836119dc9190612bbc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90612c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612cf4565b60405180910390fd5b60008111611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612d86565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611bae5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611ca357600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c575750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257601054811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890612e18565b60405180910390fd5b5b5b600060019050600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d4a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d5457600090505b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e3c57601154611dfa83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b1115611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612eaa565b60405180910390fd5b5b611e4884848484611fdb565b611e50611eab565b50505050565b6000838311158290611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e95919061236a565b60405180910390fd5b5082840390509392505050565b600f54600e81905550565b60008183611ec49190612eca565b905092915050565b60008183611eda9190612efe565b905092915050565b60008183611ef09190612f6f565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600e540315611fd957600e54600f819055506000600e819055505b565b80611fe957611fe8611fbc565b5b600080611ff584612199565b9150915061204b84600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ce90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120e082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061212c816121cd565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121899190612551565b60405180910390a3505050505050565b60008060006121a7846122a9565b905060006121be82866119ce90919063ffffffff16565b90508082935093505050915091565b6122418160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b60066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006122d360646122c5600e5485611ecc90919063ffffffff16565b611ee290919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123145780820151818401526020810190506122f9565b60008484015250505050565b6000601f19601f8301169050919050565b600061233c826122da565b61234681856122e5565b93506123568185602086016122f6565b61235f81612320565b840191505092915050565b600060208201905081810360008301526123848184612331565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123bc82612391565b9050919050565b6123cc816123b1565b81146123d757600080fd5b50565b6000813590506123e9816123c3565b92915050565b6000819050919050565b612402816123ef565b811461240d57600080fd5b50565b60008135905061241f816123f9565b92915050565b6000806040838503121561243c5761243b61238c565b5b600061244a858286016123da565b925050602061245b85828601612410565b9150509250929050565b60008115159050919050565b61247a81612465565b82525050565b60006020820190506124956000830184612471565b92915050565b6000602082840312156124b1576124b061238c565b5b60006124bf848285016123da565b91505092915050565b6000819050919050565b60006124ed6124e86124e384612391565b6124c8565b612391565b9050919050565b60006124ff826124d2565b9050919050565b6000612511826124f4565b9050919050565b61252181612506565b82525050565b600060208201905061253c6000830184612518565b92915050565b61254b816123ef565b82525050565b60006020820190506125666000830184612542565b92915050565b6000806000606084860312156125855761258461238c565b5b6000612593868287016123da565b93505060206125a4868287016123da565b92505060406125b586828701612410565b9150509250925092565b600060ff82169050919050565b6125d5816125bf565b82525050565b60006020820190506125f060008301846125cc565b92915050565b60006020828403121561260c5761260b61238c565b5b600061261a84828501612410565b91505092915050565b600061262e826124f4565b9050919050565b61263e81612623565b82525050565b60006020820190506126596000830184612635565b92915050565b612668816123b1565b82525050565b6000602082019050612683600083018461265f565b92915050565b600080604083850312156126a05761269f61238c565b5b60006126ae858286016123da565b92505060206126bf858286016123da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061271057607f821691505b602082108103612723576127226126c9565b5b50919050565b7f57616c6c6574206164647265737320616c726561647920736574000000000000600082015250565b600061275f601a836122e5565b915061276a82612729565b602082019050919050565b6000602082019050818103600083015261278e81612752565b9050919050565b7f7465616d466565206f7574206f662072616e6765000000000000000000000000600082015250565b60006127cb6014836122e5565b91506127d682612795565b602082019050919050565b600060208201905081810360008301526127fa816127be565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000612837601b836122e5565b915061284282612801565b602082019050919050565b600060208201905081810360008301526128668161282a565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b60006128a3601b836122e5565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f57616c6c65742061646472657373206e6f74207365742070726576696f75736c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b60006129356021836122e5565b9150612940826128d9565b604082019050919050565b6000602082019050818103600083015261296481612928565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129c76026836122e5565b91506129d28261296b565b604082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a596024836122e5565b9150612a64826129fd565b604082019050919050565b60006020820190508181036000830152612a8881612a4c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612aeb6022836122e5565b9150612af682612a8f565b604082019050919050565b60006020820190508181036000830152612b1a81612ade565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b576020836122e5565b9150612b6282612b21565b602082019050919050565b60006020820190508181036000830152612b8681612b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bc7826123ef565b9150612bd2836123ef565b9250828203905081811115612bea57612be9612b8d565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c4c6025836122e5565b9150612c5782612bf0565b604082019050919050565b60006020820190508181036000830152612c7b81612c3f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cde6023836122e5565b9150612ce982612c82565b604082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612d706029836122e5565b9150612d7b82612d14565b604082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612e026028836122e5565b9150612e0d82612da6565b604082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f526563697069656e7420616c7265616479206f776e73206d6178696d756d206160008201527f6d6f756e74206f6620746f6b656e732e00000000000000000000000000000000602082015250565b6000612e946030836122e5565b9150612e9f82612e38565b604082019050919050565b60006020820190508181036000830152612ec381612e87565b9050919050565b6000612ed5826123ef565b9150612ee0836123ef565b9250828201905080821115612ef857612ef7612b8d565b5b92915050565b6000612f09826123ef565b9150612f14836123ef565b9250828202612f22816123ef565b91508282048414831517612f3957612f38612b8d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f7a826123ef565b9150612f85836123ef565b925082612f9557612f94612f40565b5b82820490509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029ea95dda0b03c496151cdb7ba94864e5ee2ed63f947a3c013b7dcd6fabb812764736f6c63430008120033000000000000000000000000aadafdf820a64c21d1b8c2bc6ddde3cb280fc6940000000000000000000000005c3b2fdfd66c3e9ad4ff2ef9882c994905733f450000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

Deployed Bytecode

0x60806040526004361061021e5760003560e01c806370a0823111610123578063b0dee101116100ab578063dd62ed3e1161006f578063dd62ed3e146107aa578063ddf47a32146107e7578063ea2f0b3714610812578063f2fde38b1461083b578063f887ea401461086457610225565b8063b0dee101146106e9578063b425bac314610714578063bf2e2c521461073f578063ce404b231461076a578063d7034bd61461078157610225565b80638da5cb5b116100f25780638da5cb5b146105ee57806395d89b4114610619578063a457c2d714610644578063a9059cbb14610681578063aa45026b146106be57610225565b806370a0823114610546578063715018a6146105835780637d1db4a51461059a57806383bbe74b146105c557610225565b80633825f71b116101a657806349bd5a5e1161017557806349bd5a5e1461044d5780634ab76827146104785780634d77e91d146104a15780635342acb4146104de5780635930919b1461051b57610225565b80633825f71b146103b957806339509351146103d0578063437823ec1461040d57806346fcec941461043657610225565b806318160ddd116101ed57806318160ddd146102e657806323b872dd14610311578063313ce5671461034e578063368f5bd514610379578063379e29191461039057610225565b806306fdde031461022a578063095ea7b314610255578063120a0612146102925780631694505e146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f61088f565b60405161024c919061236a565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612425565b610921565b6040516102899190612480565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061249b565b61093f565b005b3480156102c757600080fd5b506102d0610acb565b6040516102dd9190612527565b60405180910390f35b3480156102f257600080fd5b506102fb610af1565b6040516103089190612551565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061256c565b610b17565b6040516103459190612480565b60405180910390f35b34801561035a57600080fd5b50610363610bf0565b60405161037091906125db565b60405180910390f35b34801561038557600080fd5b5061038e610c07565b005b34801561039c57600080fd5b506103b760048036038101906103b291906125f6565b610c19565b005b3480156103c557600080fd5b506103ce610c6f565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612425565b610c83565b6040516104049190612480565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061249b565b610d36565b005b34801561044257600080fd5b5061044b610e26565b005b34801561045957600080fd5b50610462610e61565b60405161046f9190612644565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061249b565b610e87565b005b3480156104ad57600080fd5b506104c860048036038101906104c3919061249b565b610f77565b6040516104d59190612480565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061249b565b610fcd565b6040516105129190612480565b60405180910390f35b34801561052757600080fd5b50610530611023565b60405161053d919061266e565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061249b565b611049565b60405161057a9190612551565b60405180910390f35b34801561058f57600080fd5b50610598611092565b005b3480156105a657600080fd5b506105af6110a6565b6040516105bc9190612551565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061249b565b6110ac565b005b3480156105fa57600080fd5b5061060361119b565b604051610610919061266e565b60405180910390f35b34801561062557600080fd5b5061062e6111c4565b60405161063b919061236a565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612425565b611256565b6040516106789190612480565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190612425565b611323565b6040516106b59190612480565b60405180910390f35b3480156106ca57600080fd5b506106d3611341565b6040516106e09190612551565b60405180910390f35b3480156106f557600080fd5b506106fe611347565b60405161070b9190612551565b60405180910390f35b34801561072057600080fd5b5061072961134d565b604051610736919061266e565b60405180910390f35b34801561074b57600080fd5b50610754611373565b6040516107619190612551565b60405180910390f35b34801561077657600080fd5b5061077f611379565b005b34801561078d57600080fd5b506107a860048036038101906107a39190612689565b61138b565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190612689565b611536565b6040516107de9190612551565b60405180910390f35b3480156107f357600080fd5b506107fc6115bd565b604051610809919061266e565b60405180910390f35b34801561081e57600080fd5b506108396004803603810190610834919061249b565b6115e7565b005b34801561084757600080fd5b50610862600480360381019061085d919061249b565b6116d6565b005b34801561087057600080fd5b50610879611759565b604051610886919061266e565b60405180910390f35b60606001805461089e906126f8565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca906126f8565b80156109175780601f106108ec57610100808354040283529160200191610917565b820191906000526020600020905b8154815290600101906020018083116108fa57829003601f168201915b5050505050905090565b600061093561092e61177f565b8484611787565b6001905092915050565b610947611950565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90612775565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a2f57610a2e81610d36565b5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b12610b0161dead611049565b600d546119ce90919063ffffffff16565b905090565b6000610b248484846119e4565b610be584610b3061177f565b610be085604051806060016040528060288152602001612fa160289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b9661177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e569092919063ffffffff16565b611787565b600190509392505050565b6000600360009054906101000a900460ff16905090565b610c0f611950565b610c17611eab565b565b610c21611950565b6004811115610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c906127e1565b60405180910390fd5b80600e8190555050565b600d54601181905550601154601081905550565b6000610d2c610c9061177f565b84610d278560076000610ca161177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b611787565b6001905092915050565b610d3e611950565b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061284d565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e506103e8610e426028600d54611ecc90919063ffffffff16565b611ee290919063ffffffff16565b601181905550601154601081905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e8f611950565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061284d565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109a611950565b6110a46000611ef8565b565b60105481565b6110b4611950565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611137906128b9565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111d3906126f8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ff906126f8565b801561124c5780601f106112215761010080835404028352916020019161124c565b820191906000526020600020905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b600061131961126361177f565b8461131485604051806060016040528060258152602001612fc9602591396007600061128d61177f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e569092919063ffffffff16565b611787565b6001905092915050565b600061133761133061177f565b84846119e4565b6001905092915050565b600e5481565b60115481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b611381611950565b611389611fbc565b565b611393611950565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061294b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561147b5761147a826115e7565b5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611532576115318161093f565b5b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ef611950565b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906128b9565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116de611950565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611744906129dd565b60405180910390fd5b61175681611ef8565b50565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90612a6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90612b01565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119439190612551565b60405180910390a3505050565b61195861177f565b73ffffffffffffffffffffffffffffffffffffffff1661197661119b565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612b6d565b60405180910390fd5b565b600081836119dc9190612bbc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90612c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612cf4565b60405180910390fd5b60008111611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612d86565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611bae5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611ca357600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c575750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257601054811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890612e18565b60405180910390fd5b5b5b600060019050600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d4a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d5457600090505b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e3c57601154611dfa83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b1115611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612eaa565b60405180910390fd5b5b611e4884848484611fdb565b611e50611eab565b50505050565b6000838311158290611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e95919061236a565b60405180910390fd5b5082840390509392505050565b600f54600e81905550565b60008183611ec49190612eca565b905092915050565b60008183611eda9190612efe565b905092915050565b60008183611ef09190612f6f565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600e540315611fd957600e54600f819055506000600e819055505b565b80611fe957611fe8611fbc565b5b600080611ff584612199565b9150915061204b84600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ce90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120e082600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061212c816121cd565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121899190612551565b60405180910390a3505050505050565b60008060006121a7846122a9565b905060006121be82866119ce90919063ffffffff16565b90508082935093505050915091565b6122418160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb690919063ffffffff16565b60066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006122d360646122c5600e5485611ecc90919063ffffffff16565b611ee290919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123145780820151818401526020810190506122f9565b60008484015250505050565b6000601f19601f8301169050919050565b600061233c826122da565b61234681856122e5565b93506123568185602086016122f6565b61235f81612320565b840191505092915050565b600060208201905081810360008301526123848184612331565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123bc82612391565b9050919050565b6123cc816123b1565b81146123d757600080fd5b50565b6000813590506123e9816123c3565b92915050565b6000819050919050565b612402816123ef565b811461240d57600080fd5b50565b60008135905061241f816123f9565b92915050565b6000806040838503121561243c5761243b61238c565b5b600061244a858286016123da565b925050602061245b85828601612410565b9150509250929050565b60008115159050919050565b61247a81612465565b82525050565b60006020820190506124956000830184612471565b92915050565b6000602082840312156124b1576124b061238c565b5b60006124bf848285016123da565b91505092915050565b6000819050919050565b60006124ed6124e86124e384612391565b6124c8565b612391565b9050919050565b60006124ff826124d2565b9050919050565b6000612511826124f4565b9050919050565b61252181612506565b82525050565b600060208201905061253c6000830184612518565b92915050565b61254b816123ef565b82525050565b60006020820190506125666000830184612542565b92915050565b6000806000606084860312156125855761258461238c565b5b6000612593868287016123da565b93505060206125a4868287016123da565b92505060406125b586828701612410565b9150509250925092565b600060ff82169050919050565b6125d5816125bf565b82525050565b60006020820190506125f060008301846125cc565b92915050565b60006020828403121561260c5761260b61238c565b5b600061261a84828501612410565b91505092915050565b600061262e826124f4565b9050919050565b61263e81612623565b82525050565b60006020820190506126596000830184612635565b92915050565b612668816123b1565b82525050565b6000602082019050612683600083018461265f565b92915050565b600080604083850312156126a05761269f61238c565b5b60006126ae858286016123da565b92505060206126bf858286016123da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061271057607f821691505b602082108103612723576127226126c9565b5b50919050565b7f57616c6c6574206164647265737320616c726561647920736574000000000000600082015250565b600061275f601a836122e5565b915061276a82612729565b602082019050919050565b6000602082019050818103600083015261278e81612752565b9050919050565b7f7465616d466565206f7574206f662072616e6765000000000000000000000000600082015250565b60006127cb6014836122e5565b91506127d682612795565b602082019050919050565b600060208201905081810360008301526127fa816127be565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000612837601b836122e5565b915061284282612801565b602082019050919050565b600060208201905081810360008301526128668161282a565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b60006128a3601b836122e5565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f57616c6c65742061646472657373206e6f74207365742070726576696f75736c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b60006129356021836122e5565b9150612940826128d9565b604082019050919050565b6000602082019050818103600083015261296481612928565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129c76026836122e5565b91506129d28261296b565b604082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a596024836122e5565b9150612a64826129fd565b604082019050919050565b60006020820190508181036000830152612a8881612a4c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612aeb6022836122e5565b9150612af682612a8f565b604082019050919050565b60006020820190508181036000830152612b1a81612ade565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b576020836122e5565b9150612b6282612b21565b602082019050919050565b60006020820190508181036000830152612b8681612b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bc7826123ef565b9150612bd2836123ef565b9250828203905081811115612bea57612be9612b8d565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c4c6025836122e5565b9150612c5782612bf0565b604082019050919050565b60006020820190508181036000830152612c7b81612c3f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cde6023836122e5565b9150612ce982612c82565b604082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612d706029836122e5565b9150612d7b82612d14565b604082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612e026028836122e5565b9150612e0d82612da6565b604082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f526563697069656e7420616c7265616479206f776e73206d6178696d756d206160008201527f6d6f756e74206f6620746f6b656e732e00000000000000000000000000000000602082015250565b6000612e946030836122e5565b9150612e9f82612e38565b604082019050919050565b60006020820190508181036000830152612ec381612e87565b9050919050565b6000612ed5826123ef565b9150612ee0836123ef565b9250828201905080821115612ef857612ef7612b8d565b5b92915050565b6000612f09826123ef565b9150612f14836123ef565b9250828202612f22816123ef565b91508282048414831517612f3957612f38612b8d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f7a826123ef565b9150612f85836123ef565b925082612f9557612f94612f40565b5b82820490509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029ea95dda0b03c496151cdb7ba94864e5ee2ed63f947a3c013b7dcd6fabb812764736f6c63430008120033

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

000000000000000000000000aadafdf820a64c21d1b8c2bc6ddde3cb280fc6940000000000000000000000005c3b2fdfd66c3e9ad4ff2ef9882c994905733f450000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

-----Decoded View---------------
Arg [0] : tokenOwner (address): 0xAaDAfdF820A64C21D1b8c2BC6dDDE3CB280Fc694
Arg [1] : devWalletAddress_ (address): 0x5C3b2fdFD66C3e9aD4Ff2ef9882c994905733f45
Arg [2] : _router (address): 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
Arg [3] : _basePair (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000aadafdf820a64c21d1b8c2bc6ddde3cb280fc694
Arg [1] : 0000000000000000000000005c3b2fdfd66c3e9ad4ff2ef9882c994905733f45
Arg [2] : 0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [3] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1


Deployed ByteCode Sourcemap

304:11851:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2811:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3825:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6267:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1247:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3088:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4026:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2997:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12079:73;;;;;;;;;;;;;:::i;:::-;;6106:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8014:118;;;;;;;;;;;;;:::i;:::-;;4480:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5196:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7865:141;;;;;;;;;;;;;:::i;:::-;;1295:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5602:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8275:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8140:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;622:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3200:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1824:101:7;;;;;;;;;;;;;:::i;:::-;;1175:27:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5855:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1194:85:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2902:87:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4788:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3424:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1096:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1209:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1025:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;654:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11998:73;;;;;;;;;;;;;:::i;:::-;;6580:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3631:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3325:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5400:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:198:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;594:21:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2811:83;2848:13;2881:5;2874:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2811:83;:::o;3825:193::-;3927:4;3949:39;3958:12;:10;:12::i;:::-;3972:7;3981:6;3949:8;:39::i;:::-;4006:4;3999:11;;3825:193;;;;:::o;6267:305::-;1087:13:7;:11;:13::i;:::-;6348:12:8::1;:19;6361:5;6348:19;;;;;;;;;;;;;;;;;;;;;;;;;6347:20;6339:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;6414:21;:28;6436:5;6414:28;;;;;;;;;;;;;;;;;;;;;;;;;6409:83;;6459:21;6474:5;6459:14;:21::i;:::-;6409:83;6524:4;6502:12;:19;6515:5;6502:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;6559:5;6539:17;;:25;;;;;;;;;;;;;;;;;;6267:305:::0;:::o;1247:41::-;;;;;;;;;;;;;:::o;3088:104::-;3143:7;3161:28;3173:15;455:42;3173:9;:15::i;:::-;3161:7;;:11;;:28;;;;:::i;:::-;3154:35;;3088:104;:::o;4026:446::-;4158:4;4175:36;4185:6;4193:9;4204:6;4175:9;:36::i;:::-;4222:220;4245:6;4266:12;:10;:12::i;:::-;4293:138;4349:6;4293:138;;;;;;;;;;;;;;;;;:11;:19;4305:6;4293:19;;;;;;;;;;;;;;;:33;4313:12;:10;:12::i;:::-;4293:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;4222:8;:220::i;:::-;4460:4;4453:11;;4026:446;;;;;:::o;2997:83::-;3038:5;3063:9;;;;;;;;;;;3056:16;;2997:83;:::o;12079:73::-;1087:13:7;:11;:13::i;:::-;12129:15:8::1;:13;:15::i;:::-;12079:73::o:0;6106:151::-;1087:13:7;:11;:13::i;:::-;6196:1:8::1;6186:6;:11;;6178:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;6243:6;6233:7;:16;;;;6106:151:::0;:::o;8014:118::-;8077:7;;8060:14;:24;;;;8110:14;;8095:12;:29;;;;8014:118::o;4480:300::-;4595:4;4617:133;4640:12;:10;:12::i;:::-;4667:7;4689:50;4728:10;4689:11;:25;4701:12;:10;:12::i;:::-;4689:25;;;;;;;;;;;;;;;:34;4715:7;4689:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4617:8;:133::i;:::-;4768:4;4761:11;;4480:300;;;;:::o;5196:196::-;1087:13:7;:11;:13::i;:::-;5274:21:8::1;:30;5296:7;5274:30;;;;;;;;;;;;;;;;;;;;;;;;;5273:31;5265:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5380:4;5347:21;:30;5369:7;5347:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;5196:196:::0;:::o;7865:141::-;7927:25;7947:4;7927:15;7939:2;7927:7;;:11;;:15;;;;:::i;:::-;:19;;:25;;;;:::i;:::-;7910:14;:42;;;;7984:14;;7969:12;:29;;;;7865:141::o;1295:35::-;;;;;;;;;;;;;:::o;5602:245::-;1087:13:7;:11;:13::i;:::-;5700:24:8::1;:33;5725:7;5700:33;;;;;;;;;;;;;;;;;;;;;;;;;5699:34;5677:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5835:4;5799:24;:33;5824:7;5799:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;5602:245:::0;:::o;8275:168::-;8373:4;8402:24;:33;8427:7;8402:33;;;;;;;;;;;;;;;;;;;;;;;;;8395:40;;8275:168;;;:::o;8140:127::-;8205:4;8229:21;:30;8251:7;8229:30;;;;;;;;;;;;;;;;;;;;;;;;;8222:37;;8140:127;;;:::o;622:23::-;;;;;;;;;;;;;:::o;3200:117::-;3266:7;3293;:16;3301:7;3293:16;;;;;;;;;;;;;;;;3286:23;;3200:117;;;:::o;1824:101:7:-;1087:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1175:27:8:-;;;;:::o;5855:243::-;1087:13:7;:11;:13::i;:::-;5950:24:8::1;:33;5975:7;5950:33;;;;;;;;;;;;;;;;;;;;;;;;;5928:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6085:5;6049:24;:33;6074:7;6049:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;5855:243:::0;:::o;1194:85:7:-;1240:7;1266:6;;;;;;;;;;;1259:13;;1194:85;:::o;2902:87:8:-;2941:13;2974:7;2967:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2902:87;:::o;4788:400::-;4908:4;4930:228;4953:12;:10;:12::i;:::-;4980:7;5002:145;5059:15;5002:145;;;;;;;;;;;;;;;;;:11;:25;5014:12;:10;:12::i;:::-;5002:25;;;;;;;;;;;;;;;:34;5028:7;5002:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;4930:8;:228::i;:::-;5176:4;5169:11;;4788:400;;;;:::o;3424:199::-;3529:4;3551:42;3561:12;:10;:12::i;:::-;3575:9;3586:6;3551:9;:42::i;:::-;3611:4;3604:11;;3424:199;;;;:::o;1096:22::-;;;;:::o;1209:29::-;;;;:::o;1025:32::-;;;;;;;;;;;;;:::o;654:25::-;;;;:::o;11998:73::-;1087:13:7;:11;:13::i;:::-;12049:14:8::1;:12;:14::i;:::-;11998:73::o:0;6580:418::-;1087:13:7;:11;:13::i;:::-;6707:12:8::1;:19;6720:5;6707:19;;;;;;;;;;;;;;;;;;;;;;;;;6699:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;6779:21;:28;6801:5;6779:28;;;;;;;;;;;;;;;;;;;;;;;;;6775:80;;;6824:19;6837:5;6824:12;:19::i;:::-;6775:80;6887:5;6865:12;:19;6878:5;6865:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;6928:5;6907:26;;:17;;;;;;;;;;;:26;;::::0;6903:88:::1;;6950:29;6970:8;6950:19;:29::i;:::-;6903:88;6580:418:::0;;:::o;3631:186::-;3749:7;3781:11;:19;3793:6;3781:19;;;;;;;;;;;;;;;:28;3801:7;3781:28;;;;;;;;;;;;;;;;3774:35;;3631:186;;;;:::o;3325:91::-;3373:7;3400:8;;;;;;;;;;;3393:15;;3325:91;:::o;5400:194::-;1087:13:7;:11;:13::i;:::-;5475:21:8::1;:30;5497:7;5475:30;;;;;;;;;;;;;;;;;;;;;;;;;5467:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5581:5;5548:21;:30;5570:7;5548:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5400:194:::0;:::o;2074:198:7:-;1087:13;:11;:13::i;:::-;2182:1:::1;2162:22;;:8;:22;;::::0;2154:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;594:21:8:-;;;;;;;;;;;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;8451:375:8:-;8597:1;8579:20;;:6;:20;;;8571:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;8678:1;8659:21;;:7;:21;;;8651:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8763:6;8732:11;:19;8744:6;8732:19;;;;;;;;;;;;;;;:28;8752:7;8732:28;;;;;;;;;;;;;;;:37;;;;8802:7;8785:33;;8794:6;8785:33;;;8811:6;8785:33;;;;;;:::i;:::-;;;;;;;;8451:375;;;:::o;1352:130:7:-;1426:12;:10;:12::i;:::-;1415:23;;:7;:5;:7::i;:::-;:23;;;1407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1352:130::o;3122:96:9:-;3180:7;3210:1;3206;:5;;;;:::i;:::-;3199:12;;3122:96;;;;:::o;8834:1490:8:-;8972:1;8956:18;;:4;:18;;;8948:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9049:1;9035:16;;:2;:16;;;9027:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9119:1;9110:6;:10;9102:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9284:15;;;;;;;;;;;9268:32;;:4;:32;;;:66;;;;9318:15;;;;;;;;;;;9304:30;;:2;:30;;;9268:66;9250:378;;;9384:24;:30;9409:4;9384:30;;;;;;;;;;;;;;;;;;;;;;;;;9383:31;:64;;;;;9419:24;:28;9444:2;9419:28;;;;;;;;;;;;;;;;;;;;;;;;;9418:29;9383:64;9361:255;;;9520:12;;9510:6;:22;;9480:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;9361:255;9250:378;9701:12;9716:4;9701:19;;9824:21;:27;9846:4;9824:27;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;9855:21;:25;9877:2;9855:25;;;;;;;;;;;;;;;;;;;;;;;;;9824:56;9820:104;;;9907:5;9897:15;;9820:104;9941:24;:28;9966:2;9941:28;;;;;;;;;;;;;;;;;;;;;;;;;9936:213;;10039:14;;10012:23;10028:6;10012:7;:11;10020:2;10012:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;:41;;9986:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;9936:213;10221:41;10236:4;10242:2;10246:6;10254:7;10221:14;:41::i;:::-;10301:15;:13;:15::i;:::-;8937:1387;8834:1490;;;:::o;4959:231:9:-;5075:7;5131:1;5126;:6;;5134:12;5118:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5172:1;5168;:5;5161:12;;4959:231;;;;;:::o;7780:77:8:-;7834:15;;7824:7;:25;;;;7780:77::o;2755:96:9:-;2813:7;2843:1;2839;:5;;;;:::i;:::-;2832:12;;2755:96;;;;:::o;3465:::-;3523:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3465:96;;;;:::o;3850:::-;3908:7;3938:1;3934;:5;;;;:::i;:::-;3927:12;;3850:96;;;;:::o;2426:187:7:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;7639:133:8:-;7697:1;7686:7;;:12;7682:25;7700:7;7682:25;7735:7;;7717:15;:25;;;;7763:1;7753:7;:11;;;;7639:133;:::o;11516:474::-;11672:7;11667:28;;11681:14;:12;:14::i;:::-;11667:28;11709:23;11734:12;11750:18;11761:6;11750:10;:18::i;:::-;11708:60;;;;11797:27;11817:6;11797:7;:15;11805:6;11797:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;11779:7;:15;11787:6;11779:15;;;;;;;;;;;;;;;:45;;;;11856:39;11879:15;11856:7;:18;11864:9;11856:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;11835:7;:18;11843:9;11835:18;;;;;;;;;;;;;;;:60;;;;11906:14;11915:4;11906:8;:14::i;:::-;11955:9;11938:44;;11947:6;11938:44;;;11966:15;11938:44;;;;;;:::i;:::-;;;;;;;;11656:334;;11516:474;;;;:::o;7099:262::-;7185:7;7194;7219:12;7234:24;7250:7;7234:15;:24::i;:::-;7219:39;;7269:23;7295:17;7307:4;7295:7;:11;;:17;;;;:::i;:::-;7269:43;;7331:15;7348:4;7323:30;;;;;;7099:262;;;:::o;7369:124::-;7449:36;7480:4;7449:7;:26;7457:17;;;;;;;;;;;7449:26;;;;;;;;;;;;;;;;:30;;:36;;;;:::i;:::-;7420:7;:26;7428:17;;;;;;;;;;;7420:26;;;;;;;;;;;;;;;:65;;;;7369:124;:::o;7501:130::-;7565:7;7592:31;7617:5;7592:20;7604:7;;7592;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;7585:38;;7501:130;;;:::o;7:99:10:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:148::-;6573:9;6606:37;6637:5;6606:37;:::i;:::-;6593:50;;6501:148;;;:::o;6655:175::-;6764:59;6817:5;6764:59;:::i;:::-;6759:3;6752:72;6655:175;;:::o;6836:266::-;6951:4;6989:2;6978:9;6974:18;6966:26;;7002:93;7092:1;7081:9;7077:17;7068:6;7002:93;:::i;:::-;6836:266;;;;:::o;7108:118::-;7195:24;7213:5;7195:24;:::i;:::-;7190:3;7183:37;7108:118;;:::o;7232:222::-;7325:4;7363:2;7352:9;7348:18;7340:26;;7376:71;7444:1;7433:9;7429:17;7420:6;7376:71;:::i;:::-;7232:222;;;;:::o;7460:474::-;7528:6;7536;7585:2;7573:9;7564:7;7560:23;7556:32;7553:119;;;7591:79;;:::i;:::-;7553:119;7711:1;7736:53;7781:7;7772:6;7761:9;7757:22;7736:53;:::i;:::-;7726:63;;7682:117;7838:2;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7809:118;7460:474;;;;;:::o;7940:180::-;7988:77;7985:1;7978:88;8085:4;8082:1;8075:15;8109:4;8106:1;8099:15;8126:320;8170:6;8207:1;8201:4;8197:12;8187:22;;8254:1;8248:4;8244:12;8275:18;8265:81;;8331:4;8323:6;8319:17;8309:27;;8265:81;8393:2;8385:6;8382:14;8362:18;8359:38;8356:84;;8412:18;;:::i;:::-;8356:84;8177:269;8126:320;;;:::o;8452:176::-;8592:28;8588:1;8580:6;8576:14;8569:52;8452:176;:::o;8634:366::-;8776:3;8797:67;8861:2;8856:3;8797:67;:::i;:::-;8790:74;;8873:93;8962:3;8873:93;:::i;:::-;8991:2;8986:3;8982:12;8975:19;;8634:366;;;:::o;9006:419::-;9172:4;9210:2;9199:9;9195:18;9187:26;;9259:9;9253:4;9249:20;9245:1;9234:9;9230:17;9223:47;9287:131;9413:4;9287:131;:::i;:::-;9279:139;;9006:419;;;:::o;9431:170::-;9571:22;9567:1;9559:6;9555:14;9548:46;9431:170;:::o;9607:366::-;9749:3;9770:67;9834:2;9829:3;9770:67;:::i;:::-;9763:74;;9846:93;9935:3;9846:93;:::i;:::-;9964:2;9959:3;9955:12;9948:19;;9607:366;;;:::o;9979:419::-;10145:4;10183:2;10172:9;10168:18;10160:26;;10232:9;10226:4;10222:20;10218:1;10207:9;10203:17;10196:47;10260:131;10386:4;10260:131;:::i;:::-;10252:139;;9979:419;;;:::o;10404:177::-;10544:29;10540:1;10532:6;10528:14;10521:53;10404:177;:::o;10587:366::-;10729:3;10750:67;10814:2;10809:3;10750:67;:::i;:::-;10743:74;;10826:93;10915:3;10826:93;:::i;:::-;10944:2;10939:3;10935:12;10928:19;;10587:366;;;:::o;10959:419::-;11125:4;11163:2;11152:9;11148:18;11140:26;;11212:9;11206:4;11202:20;11198:1;11187:9;11183:17;11176:47;11240:131;11366:4;11240:131;:::i;:::-;11232:139;;10959:419;;;:::o;11384:177::-;11524:29;11520:1;11512:6;11508:14;11501:53;11384:177;:::o;11567:366::-;11709:3;11730:67;11794:2;11789:3;11730:67;:::i;:::-;11723:74;;11806:93;11895:3;11806:93;:::i;:::-;11924:2;11919:3;11915:12;11908:19;;11567:366;;;:::o;11939:419::-;12105:4;12143:2;12132:9;12128:18;12120:26;;12192:9;12186:4;12182:20;12178:1;12167:9;12163:17;12156:47;12220:131;12346:4;12220:131;:::i;:::-;12212:139;;11939:419;;;:::o;12364:220::-;12504:34;12500:1;12492:6;12488:14;12481:58;12573:3;12568:2;12560:6;12556:15;12549:28;12364:220;:::o;12590:366::-;12732:3;12753:67;12817:2;12812:3;12753:67;:::i;:::-;12746:74;;12829:93;12918:3;12829:93;:::i;:::-;12947:2;12942:3;12938:12;12931:19;;12590:366;;;:::o;12962:419::-;13128:4;13166:2;13155:9;13151:18;13143:26;;13215:9;13209:4;13205:20;13201:1;13190:9;13186:17;13179:47;13243:131;13369:4;13243:131;:::i;:::-;13235:139;;12962:419;;;:::o;13387:225::-;13527:34;13523:1;13515:6;13511:14;13504:58;13596:8;13591:2;13583:6;13579:15;13572:33;13387:225;:::o;13618:366::-;13760:3;13781:67;13845:2;13840:3;13781:67;:::i;:::-;13774:74;;13857:93;13946:3;13857:93;:::i;:::-;13975:2;13970:3;13966:12;13959:19;;13618:366;;;:::o;13990:419::-;14156:4;14194:2;14183:9;14179:18;14171:26;;14243:9;14237:4;14233:20;14229:1;14218:9;14214:17;14207:47;14271:131;14397:4;14271:131;:::i;:::-;14263:139;;13990:419;;;:::o;14415:223::-;14555:34;14551:1;14543:6;14539:14;14532:58;14624:6;14619:2;14611:6;14607:15;14600:31;14415:223;:::o;14644:366::-;14786:3;14807:67;14871:2;14866:3;14807:67;:::i;:::-;14800:74;;14883:93;14972:3;14883:93;:::i;:::-;15001:2;14996:3;14992:12;14985:19;;14644:366;;;:::o;15016:419::-;15182:4;15220:2;15209:9;15205:18;15197:26;;15269:9;15263:4;15259:20;15255:1;15244:9;15240:17;15233:47;15297:131;15423:4;15297:131;:::i;:::-;15289:139;;15016:419;;;:::o;15441:221::-;15581:34;15577:1;15569:6;15565:14;15558:58;15650:4;15645:2;15637:6;15633:15;15626:29;15441:221;:::o;15668:366::-;15810:3;15831:67;15895:2;15890:3;15831:67;:::i;:::-;15824:74;;15907:93;15996:3;15907:93;:::i;:::-;16025:2;16020:3;16016:12;16009:19;;15668:366;;;:::o;16040:419::-;16206:4;16244:2;16233:9;16229:18;16221:26;;16293:9;16287:4;16283:20;16279:1;16268:9;16264:17;16257:47;16321:131;16447:4;16321:131;:::i;:::-;16313:139;;16040:419;;;:::o;16465:182::-;16605:34;16601:1;16593:6;16589:14;16582:58;16465:182;:::o;16653:366::-;16795:3;16816:67;16880:2;16875:3;16816:67;:::i;:::-;16809:74;;16892:93;16981:3;16892:93;:::i;:::-;17010:2;17005:3;17001:12;16994:19;;16653:366;;;:::o;17025:419::-;17191:4;17229:2;17218:9;17214:18;17206:26;;17278:9;17272:4;17268:20;17264:1;17253:9;17249:17;17242:47;17306:131;17432:4;17306:131;:::i;:::-;17298:139;;17025:419;;;:::o;17450:180::-;17498:77;17495:1;17488:88;17595:4;17592:1;17585:15;17619:4;17616:1;17609:15;17636:194;17676:4;17696:20;17714:1;17696:20;:::i;:::-;17691:25;;17730:20;17748:1;17730:20;:::i;:::-;17725:25;;17774:1;17771;17767:9;17759:17;;17798:1;17792:4;17789:11;17786:37;;;17803:18;;:::i;:::-;17786:37;17636:194;;;;:::o;17836:224::-;17976:34;17972:1;17964:6;17960:14;17953:58;18045:7;18040:2;18032:6;18028:15;18021:32;17836:224;:::o;18066:366::-;18208:3;18229:67;18293:2;18288:3;18229:67;:::i;:::-;18222:74;;18305:93;18394:3;18305:93;:::i;:::-;18423:2;18418:3;18414:12;18407:19;;18066:366;;;:::o;18438:419::-;18604:4;18642:2;18631:9;18627:18;18619:26;;18691:9;18685:4;18681:20;18677:1;18666:9;18662:17;18655:47;18719:131;18845:4;18719:131;:::i;:::-;18711:139;;18438:419;;;:::o;18863:222::-;19003:34;18999:1;18991:6;18987:14;18980:58;19072:5;19067:2;19059:6;19055:15;19048:30;18863:222;:::o;19091:366::-;19233:3;19254:67;19318:2;19313:3;19254:67;:::i;:::-;19247:74;;19330:93;19419:3;19330:93;:::i;:::-;19448:2;19443:3;19439:12;19432:19;;19091:366;;;:::o;19463:419::-;19629:4;19667:2;19656:9;19652:18;19644:26;;19716:9;19710:4;19706:20;19702:1;19691:9;19687:17;19680:47;19744:131;19870:4;19744:131;:::i;:::-;19736:139;;19463:419;;;:::o;19888:228::-;20028:34;20024:1;20016:6;20012:14;20005:58;20097:11;20092:2;20084:6;20080:15;20073:36;19888:228;:::o;20122:366::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20122:366;;;:::o;20494:419::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20494:419;;;:::o;20919:227::-;21059:34;21055:1;21047:6;21043:14;21036:58;21128:10;21123:2;21115:6;21111:15;21104:35;20919:227;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:235::-;22089:34;22085:1;22077:6;22073:14;22066:58;22158:18;22153:2;22145:6;22141:15;22134:43;21949:235;:::o;22190:366::-;22332:3;22353:67;22417:2;22412:3;22353:67;:::i;:::-;22346:74;;22429:93;22518:3;22429:93;:::i;:::-;22547:2;22542:3;22538:12;22531:19;;22190:366;;;:::o;22562:419::-;22728:4;22766:2;22755:9;22751:18;22743:26;;22815:9;22809:4;22805:20;22801:1;22790:9;22786:17;22779:47;22843:131;22969:4;22843:131;:::i;:::-;22835:139;;22562:419;;;:::o;22987:191::-;23027:3;23046:20;23064:1;23046:20;:::i;:::-;23041:25;;23080:20;23098:1;23080:20;:::i;:::-;23075:25;;23123:1;23120;23116:9;23109:16;;23144:3;23141:1;23138:10;23135:36;;;23151:18;;:::i;:::-;23135:36;22987:191;;;;:::o;23184:410::-;23224:7;23247:20;23265:1;23247:20;:::i;:::-;23242:25;;23281:20;23299:1;23281:20;:::i;:::-;23276:25;;23336:1;23333;23329:9;23358:30;23376:11;23358:30;:::i;:::-;23347:41;;23537:1;23528:7;23524:15;23521:1;23518:22;23498:1;23491:9;23471:83;23448:139;;23567:18;;:::i;:::-;23448:139;23232:362;23184:410;;;;:::o;23600:180::-;23648:77;23645:1;23638:88;23745:4;23742:1;23735:15;23769:4;23766:1;23759:15;23786:185;23826:1;23843:20;23861:1;23843:20;:::i;:::-;23838:25;;23877:20;23895:1;23877:20;:::i;:::-;23872:25;;23916:1;23906:35;;23921:18;;:::i;:::-;23906:35;23963:1;23960;23956:9;23951:14;;23786:185;;;;:::o

Metadata Hash

ipfs://29ea95dda0b03c496151cdb7ba94864e5ee2ed63f947a3c013b7dcd6fabb8127
Loading