Contract 0x1cff458b364d0d328d4c9d59d10be7d22d01953d

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd98a8a7eaaefb66920a846056a0ac1630f9fd98bd83cba08eb51ea51b7f97615Approve132872012021-12-08 2:34:1411 hrs 4 mins ago0x77fd41f07de7c5cfcae388edb2c47390bac2b7d8 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.00023459
0xc0181df5dc57fd2b04ff9d7042e91a0deeeadd3ee60a1a175dd9b233fc0040d1Transfer132352862021-12-06 5:09:562 days 8 hrs ago0xb6e13e8cb91db5c4bc979d25c650376feeb2fd49 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190315
0xa9db629fa87e07099cfe3468c7b3af5cf76eaed2288d285fd6f42a9d2a054d20Transfer132309132021-12-06 1:25:212 days 12 hrs ago0x34e78867626c562760c85743feaae117482ab1ef IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190315
0xcb24179e887ea6ed1d7bd380d0f9bf97698d4696290a628cc71a28e84763bf31Approve132254662021-12-05 20:51:582 days 16 hrs ago0xe4fd5c0f4ef0156826630785313f8212bf350eea IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.0000929084
0x8db7df063c63555e09eeb898b68f71dc063eef845d87a7def49613938f405f3dApprove132254582021-12-05 20:51:342 days 16 hrs ago0xe4fd5c0f4ef0156826630785313f8212bf350eea IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.0000929084
0x974241a3485c6928b8397f7edca9c803ff29ae2089b29268321c8b52e4283011Transfer132160052021-12-05 12:32:563 days 1 hr ago0x59dacb8d929776a4ea61e1f3bac8767e41b295a1 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0x5cf17b33537433b4a0c50231101107096c4c13878f35b33e662895af25029489Transfer131918862021-12-04 16:21:463 days 21 hrs ago0xbf9e9b65a2919ac61cb93b2517666e680a25bce3 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115315
0x72682b647635fd19f5c42922a9c4e0d4f577b88dcaec3a947b1f1d422fb7b4a1Transfer131616352021-12-03 14:47:224 days 22 hrs ago0x08dbd968862a6b03c337f745c69356217c7375e2 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115315
0xbece0bb3571014c19b39c7f38eece38d4fe22bb76a634c2d9a8eb582a135e801Transfer131571352021-12-03 10:53:255 days 2 hrs ago0x4eba41502c49276cf0d13375613e1a3565f5a636 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0xbbba2362dbdf5933ebc7bc8e09de5df05a471aa514455c498b05a15dc6b29990Transfer131553572021-12-03 9:24:095 days 4 hrs ago0xb3f027329bf23955d67adc16024da0e4ea433f52 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0xbc44772716a7979635b3a55a89f98321d8f516d5aaee0e9942a70016244d44adTransfer131535642021-12-03 7:51:505 days 5 hrs ago0x2d44a2551dd400f2719a22575e7d0718a5816ece IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0x74a4e5b5f74839923c6636578f46c812dbbcc3b1cae4e97aaee6cd7d19e9fe75Transfer131522452021-12-03 6:45:165 days 6 hrs ago0x36343a7dd8c2fec630ef5c79854a43e5451938fe IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115315
0x120122c2872433cfcc0c6ffd9221bf00a65bb2e6a9107f47b31722910d218482Transfer131404552021-12-02 20:51:445 days 16 hrs ago0x1cb7e6d4e37709a4c0979e702e2ec2d19f67c62c IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115315
0x2830d1b44b250deb7ce4ce672bcf5518177b241231559a91f42d08b9a4a8d1efApprove131404022021-12-02 20:49:055 days 16 hrs ago0x1cb7e6d4e37709a4c0979e702e2ec2d19f67c62c IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.00023459
0x91bc3edb1e485e2f1c5c09c33ccf27ecca91d6517d644068772dbf63e158c281Transfer131396652021-12-02 20:12:085 days 17 hrs ago0x310bbef2e5460d261f278d357a52db7b6c24ce0f IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190315
0x47ca22c22b45e300177f550d8af9b3989f75d125d42a8f579674808932ff8e08Transfer131160192021-12-01 23:42:306 days 13 hrs ago0x34e78867626c562760c85743feaae117482ab1ef IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190375
0x76f1b503958f81be9488056a5fee331b4b2c744a4ad572ddfa39c7d00e3d5cf1Transfer131146462021-12-01 22:33:506 days 15 hrs ago0xd7b78a82c00922eb00b3793fc798bbef26c1f618 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190135
0x83301e8269a53bf8f631af00f0512ad55bffb2504fe00bbe959819a056543c5dTransfer131100742021-12-01 18:43:056 days 18 hrs ago0x596ae06e896e678aa73f3b93f8d904ff45705bb1 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115315
0xf5016e89f8f60aabe3988b5d5101c47e279497b57202a16b5a564c3c43c2b303Transfer131096992021-12-01 18:24:076 days 19 hrs ago0x173af5598e1a81f81c21807bf2023f5b7ea5bf30 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190255
0x67150b59d6b049d61d7487491a0ecf3ec3aa0741c0025596bbbc29fcf05e88d0Transfer131095542021-12-01 18:16:216 days 19 hrs ago0x70d0c25cb955bc6e33c08acf171e3dbb2a6401d0 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190195
0x4101b08ba563eda25e1a64f8c10b480f0085cae3c7e6b7fe8eed76dfd7657c33Transfer131078082021-12-01 16:41:506 days 20 hrs ago0x64be5519a835b5d9a9b641119746051f9d23855e IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0xb66962de68c060624189893f5e22f9f007600502a40247f37a8699babe7441a0Transfer130972602021-12-01 6:37:037 days 7 hrs ago0x19e105f56e23f679774e10d9afc9427d12a4cdb8 IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000342567
0xdcd757aa58caa70f09b230a237f1388d83fe773b0eb27873a60696d81768b717Transfer130865912021-11-30 21:21:287 days 16 hrs ago0x34e78867626c562760c85743feaae117482ab1ef IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000190315
0x7de19721dce316ea4edc6dd5f831320d164a7452dc7411a0a52d3cc7c8018e18Transfer130744452021-11-30 10:42:028 days 2 hrs ago0x0ef74bc989f6c2ae9e52fbb88a8f56eb732dab2c IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.000115195
0x5b9342bc819ebbdc9001ab4aa9121d1b4a40353d80af314f272698de8cb54b2fApprove130475302021-11-29 10:12:259 days 3 hrs ago0x11be924be0a432fc8e80186196d9e525f48d6d1a IN  0x1cff458b364d0d328d4c9d59d10be7d22d01953d0 BNB0.00023459
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xda4fd392e2cae88a7fcb5b7ba638454049c0618a8dc05491f5c399509d649123122739722021-11-01 10:12:1037 days 3 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.028018248143754345 BNB
0xda4fd392e2cae88a7fcb5b7ba638454049c0618a8dc05491f5c399509d649123122739722021-11-01 10:12:1037 days 3 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.028018248143754345 BNB
0xda4fd392e2cae88a7fcb5b7ba638454049c0618a8dc05491f5c399509d649123122739722021-11-01 10:12:1037 days 3 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.042078059398137948 BNB
0xda4fd392e2cae88a7fcb5b7ba638454049c0618a8dc05491f5c399509d649123122739722021-11-01 10:12:1037 days 3 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.042078059398137948 BNB
0x17e1ba7551be8a1b749de023ddbefb34898bdbf5afc3cc64516560b214c47e76122566702021-10-31 19:24:0537 days 18 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.013808752192492758 BNB
0x17e1ba7551be8a1b749de023ddbefb34898bdbf5afc3cc64516560b214c47e76122566702021-10-31 19:24:0537 days 18 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.013808752192492758 BNB
0x17e1ba7551be8a1b749de023ddbefb34898bdbf5afc3cc64516560b214c47e76122566702021-10-31 19:24:0537 days 18 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.020738620028964208 BNB
0x17e1ba7551be8a1b749de023ddbefb34898bdbf5afc3cc64516560b214c47e76122566702021-10-31 19:24:0537 days 18 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.020738620028964208 BNB
0xcdb7c69d206890ac1e706192ebe793d1cb27e4356df017880b824872a5da26d5122482342021-10-31 12:17:0638 days 1 hr ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.040148108511288165 BNB
0xcdb7c69d206890ac1e706192ebe793d1cb27e4356df017880b824872a5da26d5122482342021-10-31 12:17:0638 days 1 hr ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.040148108511288165 BNB
0xcdb7c69d206890ac1e706192ebe793d1cb27e4356df017880b824872a5da26d5122482342021-10-31 12:17:0638 days 1 hr ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.060293542115648939 BNB
0xcdb7c69d206890ac1e706192ebe793d1cb27e4356df017880b824872a5da26d5122482342021-10-31 12:17:0638 days 1 hr ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.060293542115648939 BNB
0x21035ed78f3e340266b79be42e6f2f618c81d3159525c25f5907df0ae1cc9e9c122427462021-10-31 7:42:2238 days 5 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.011524809627743454 BNB
0x21035ed78f3e340266b79be42e6f2f618c81d3159525c25f5907df0ae1cc9e9c122427462021-10-31 7:42:2238 days 5 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.011524809627743454 BNB
0x21035ed78f3e340266b79be42e6f2f618c81d3159525c25f5907df0ae1cc9e9c122427462021-10-31 7:42:2238 days 5 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.017308560215279352 BNB
0x21035ed78f3e340266b79be42e6f2f618c81d3159525c25f5907df0ae1cc9e9c122427462021-10-31 7:42:2238 days 5 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.017308560215279352 BNB
0xdd158284c764aa094001e2f13e7620dfd7c1991c79edb66b367a3475b9028f07122344022021-10-31 0:44:5738 days 12 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.06322993870338546 BNB
0xdd158284c764aa094001e2f13e7620dfd7c1991c79edb66b367a3475b9028f07122344022021-10-31 0:44:5738 days 12 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.06322993870338546 BNB
0xdd158284c764aa094001e2f13e7620dfd7c1991c79edb66b367a3475b9028f07122344022021-10-31 0:44:5738 days 12 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.094953529902717626 BNB
0xdd158284c764aa094001e2f13e7620dfd7c1991c79edb66b367a3475b9028f07122344022021-10-31 0:44:5738 days 12 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.094953529902717626 BNB
0xf33025f6dea5a8f250700c6bcbe653c1f3d832733dcf14ef6dbaf020f7f5b442121945662021-10-29 14:29:2739 days 23 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.012334065575120416 BNB
0xf33025f6dea5a8f250700c6bcbe653c1f3d832733dcf14ef6dbaf020f7f5b442121945662021-10-29 14:29:2739 days 23 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.012334065575120416 BNB
0xf33025f6dea5a8f250700c6bcbe653c1f3d832733dcf14ef6dbaf020f7f5b442121945662021-10-29 14:29:2739 days 23 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d PancakeSwap: Router v20.018523914477951258 BNB
0xf33025f6dea5a8f250700c6bcbe653c1f3d832733dcf14ef6dbaf020f7f5b442121945662021-10-29 14:29:2739 days 23 hrs ago PancakeSwap: Router v2 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0.018523914477951258 BNB
0x10caa13f83503a2eeb25b8c3d19884507cdbd364b22d5e039f138f7927f8ccc5121677812021-10-28 15:54:2740 days 21 hrs ago 0x1cff458b364d0d328d4c9d59d10be7d22d01953d0x83ed7923b8eec56cbc4acf989fa4bb2e100da3820.009167573303219385 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Auto

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-12
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.6;



// Part: Address

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// Part: Context

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

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

// Part: IBEP20

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

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

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

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

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

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

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

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

// Part: IERC20

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

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

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

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

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

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

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

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

// Part: ISwapRouter

interface ISwapRouter {
    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);

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

// Part: ReentrancyGuard

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// Part: IBEP20Metadata

/**
 * @dev Interface for the optional metadata functions from the BEP20 standard.
 *
 * _Available since v4.1._
 */
interface IBEP20Metadata is IBEP20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// Part: Ownable

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

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

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

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

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

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

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

// Part: AutoStakingPool

contract AutoStakingPool is Context, Ownable, ReentrancyGuard {
	// constants
	address public autoAddress;

	// current balance, and when accounts are allowed to unstake
	struct Staking {
		uint256 date;
		uint256 amount;
	}
	mapping(address => uint256) private _balance;
	mapping(address => uint256) private _availableBalance;
	mapping(address => Staking[]) private _stakings;
	mapping(address => uint256) private _stakingsLastUpdated;
	uint256 public startDate;

	// rewards for staking
	mapping(address => uint256) private _nextUnpaidDay;
	mapping(address => uint256) private _rewards;

	// day = timespan from day*86400 to (day+1)*86400
	// everything is paid out at end of day
	uint256 private _rewardSupply;
	uint256 private _rewardsYetToBeClaimed; // this variable may ultimately be unnecessary?
	uint256 public rewardEnd;
	uint256 public dailyPayout;

	mapping(uint256 => uint256) private dailyRewardRate; // values in Autowei for better precision
	uint256 private _nextDayToUpdate;
	uint256 private _totalStaked; // total staked across all users in a day

	constructor(address _autoAddress, uint256 _startDate) {
		autoAddress = _autoAddress;
		startDate = _startDate;
	}

	function stake(uint256 amount) public nonReentrant {
		_stake(_msgSender(), amount);
	}

	function stake(address account, uint256 amount) public nonReentrant {
		require(
			_msgSender() == account || _msgSender() == autoAddress,
			"Cannot stake on behalf of another account."
		);
		require(_stakings[account].length < 200, "Cannot have more than 200 concurrent stakings");

		_stake(account, amount);
	}

	function _stake(address account, uint256 amount) private {
		_updateRewards(account); // also calls _updateDailyRates()
		IERC20(autoAddress).transferFrom(account, address(this), amount);
		_balance[account] += amount;
		_totalStaked += amount;
		uint256 date = (startDate < block.timestamp)
			? block.timestamp
			: startDate;
		_stakings[account].push(Staking(date, amount));
	}

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

	function availableBalance(address account) public view returns (uint256) {
		uint newlyAvailable = 0;
		Staking[] storage arr = _stakings[account];
		// Nothing available until listing
		if (startDate > block.timestamp) return 0;
		for (uint i = 0; i < arr.length; i++) {
			uint256 currentWeek = (block.timestamp - arr[i].date) / 604800;
			uint256 lastUpdateWeek = (_stakingsLastUpdated[account] > arr[i].date)
				? (_stakingsLastUpdated[account] - arr[i].date) / 604800
				: 0;
			if (currentWeek > 4) currentWeek = 5;
			uint256 releases = currentWeek - lastUpdateWeek;
			if (releases == 0) continue;
			newlyAvailable += releases * (arr[i].amount / 5);
			if (currentWeek == 5) {
				newlyAvailable += arr[i].amount - 5 * (arr[i].amount / 5);
			}
		}
		return _availableBalance[account] + newlyAvailable;
	}

	function lockedBalance(address account) public view returns (uint256) {
		return balanceOf(account) - availableBalance(account);
	}

	function withdraw(uint256 amount) public nonReentrant {
		_updateRewards(_msgSender()); // also calls _updateDailyRates()
		_processReleases(_msgSender());
		require(_availableBalance[_msgSender()] >= amount, "Not enough AUTO available to withdraw.");
		IERC20(autoAddress).transfer(_msgSender(), amount);
		_availableBalance[_msgSender()] -= amount;
		_balance[_msgSender()] -= amount;
		_totalStaked -= amount;
	}

	function rewards(address account) public view returns (uint256) {
		if (_nextUnpaidDay[account] == 0) // waiting for user's first stake
			return 0;
		uint256 today = block.timestamp / 86400;
		uint256 start = _nextUnpaidDay[account];
		uint256 staked = _balance[account];
		uint256 totalRewards = _rewards[account];
		for (uint256 day = start; day < today; day++)
			totalRewards += staked * _rewardRate(day) / 1e18;
		return totalRewards;
	}

	function withdrawRewards() public nonReentrant {
		_updateRewards(_msgSender());
		uint256 amount = _rewards[_msgSender()];
		require(amount > 0, "Nothing to withdraw.");
		// This should never fail unless I've done something wrong
		require(amount <= _rewardsYetToBeClaimed, "Insufficient funds in contract.");
		_rewardsYetToBeClaimed -= amount;
		_rewards[_msgSender()] = 0;
		IERC20(autoAddress).transfer(_msgSender(), amount);
	}

	function addRewards(uint256 duration, uint256 amount) public nonReentrant {
		require(duration > 0, "Duration cannot be 0.");
		require(duration < 1000, "Duration should be in days.");
		_updateDailyRates(); // also updates the rewards available vs. waiting to be claimed
		uint256 today = (block.timestamp / 86400);
		uint256 end = today + duration;
		if (end > rewardEnd)
			rewardEnd = end;
		IERC20(autoAddress).transferFrom(_msgSender(), address(this), amount);
		_rewardSupply += amount;
		dailyPayout = _rewardSupply / (rewardEnd - today);
		if (_nextDayToUpdate == 0)
			_nextDayToUpdate = today;
	}

	function showStakings(address account) public view returns (Staking[] memory) {
		return _stakings[account];
	}

	function delayStartDate(uint256 newDate) public onlyOwner {
		require(startDate < block.timestamp + 604800, "Start date is too far passed to update.");
		require(newDate > startDate, "Start date must increase.");
		startDate = newDate;
	}

	// make this public to somewhat reduce user gas costs?
	function _updateDailyRates() private {
		if (rewardEnd <= _nextDayToUpdate)
			return;
		uint256 today = block.timestamp / 86400;
		// add this to somewhat reduce gas costs on already-updated withdrawls?
		// if (today < nextDayToUpdate)
		// 	return;
		uint256 day = _nextDayToUpdate;
		for (; day < today; day++)
			dailyRewardRate[day] = _rewardRate(day);
		uint256 end = day;
		if (end > rewardEnd)
			end = rewardEnd;
		uint256 totalRewarded = dailyPayout * (end - _nextDayToUpdate);
		_nextDayToUpdate = day;
		_rewardSupply -= totalRewarded;
		_rewardsYetToBeClaimed += totalRewarded;
	}

	function _updateRewards(address account) private {
		_updateDailyRates();
		_rewards[account] = rewards(account);
		_nextUnpaidDay[account] = block.timestamp / 86400;
	}

	function _processReleases(address account) private {
		uint removed = 0;
		Staking[] storage arr = _stakings[account];
		for (uint i = 0; i < arr.length; i++) {
			if (removed > 0)
				arr[i - removed] = arr[i];
			uint256 currentWeek = (block.timestamp - arr[i].date) / 604800;
			uint256 lastUpdateWeek = (_stakingsLastUpdated[account] > arr[i].date)
				? (_stakingsLastUpdated[account] - arr[i].date) / 604800
				: 0;
			if (currentWeek > 4) currentWeek = 5;
			uint256 releases = currentWeek - lastUpdateWeek;
			if (releases == 0)
				continue;
			_availableBalance[account] += releases * (arr[i].amount / 5);
			if (currentWeek == 5) {
				_availableBalance[account] += arr[i].amount - 5 * (arr[i].amount / 5);
				removed++;
			}
		}
		for (uint i = 0; i < removed; i++)
			arr.pop();
		_stakingsLastUpdated[account] = block.timestamp;
		_stakings[account] = arr;
	}

	function _rewardRate(uint256 day) private view returns (uint256) {
		if (day < _nextDayToUpdate)
			return dailyRewardRate[day];
		if (day >= rewardEnd || _totalStaked == 0)
			return 0;
		else
			return (dailyPayout * 1e18) / _totalStaked;
	}
}

// File: AutoBSC.sol

// modified from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol

contract Auto is Context, IBEP20, IBEP20Metadata, Ownable, ReentrancyGuard {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address public stakingAddress;
    mapping(address => bool) private noStakeOnTransferFrom;
    mapping(address => bool) private noStakeOnTransferTo;
    ISwapRouter public swapRouter;

    // Any interaction with an address on feeList will have autostaking and the fee.
    mapping(address => bool) private feeList;
    // feeWhitelist counteracts the feeList. Fees never apply to addresses in this list.
    mapping(address => bool) private feeWhitelist;

    uint256 private liquifyMin = 50e18;
    uint256 private liquifyMax = 1200e18;

    uint8 public feePercent = 6;
    address payable public feeWallet;

    constructor(address payable _feeWallet, address _swapRouter) {
        _balances[_msgSender()] = 1734636e18;
        feeWallet = _feeWallet;
        swapRouter = ISwapRouter(_swapRouter);

        feeWhitelist[_feeWallet] = true;
        noStakeOnTransferTo[_feeWallet] = true;
        noStakeOnTransferFrom[_feeWallet] = true;

        feeWhitelist[_swapRouter] = true;
        noStakeOnTransferTo[_swapRouter] = true;
        noStakeOnTransferFrom[_swapRouter] = true;
    }

    function setStakingPool(address _stakingAddress) public onlyOwner {
        stakingAddress = _stakingAddress;

        feeWhitelist[_stakingAddress] = true;
        noStakeOnTransferTo[_stakingAddress] = true;
        noStakeOnTransferFrom[_stakingAddress] = true;
    }

    function name() public pure override returns (string memory) {
        return "AutoBSC";
    }

    function symbol() public pure override returns (string memory) {
        return "AUTO";
    }

    function decimals() public pure override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return 1734636e18;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        // staking contract is exempt from approval system
        if (_msgSender() != stakingAddress) {
            uint256 currentAllowance = _allowances[sender][_msgSender()];
            require(
                currentAllowance >= amount,
                "BEP20: transfer amount exceeds allowance"
            );
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        return true;
    }

    function setFeePercent(uint8 _feePercent) public onlyOwner {
        require(_feePercent < 100, "Percent must be less than 100.");
        feePercent = _feePercent;
    }

    function setLiquifyMin(uint256 minimum) public onlyOwner {
        require(minimum > 0, "Minimum must be greater than 0.");
        liquifyMin = minimum;
    }

    function setLiquifyMax(uint256 maximum) public onlyOwner {
        require(maximum > liquifyMin, "Maximum must be greater than liquifyMin");
        liquifyMax = maximum;
    }

    function setAccountFeeListStatus(address account, bool status)
        public
        onlyOwner
    {
        feeList[account] = status;
    }

    function setAccountFeeWhitelistStatus(address account, bool status)
        public
        onlyOwner
    {
        feeWhitelist[account] = status;
    }

    function allowTransferFromWithoutStake(address account, bool status)
        public
        onlyOwner
    {
        noStakeOnTransferFrom[account] = status;
    }

    function allowTransferToWithoutStake(address account, bool status)
        public
        onlyOwner
    {
        noStakeOnTransferTo[account] = status;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        bool takeFeeOnInteraction = (feeList[sender] || feeList[recipient]) && (!feeWhitelist[sender] && !feeWhitelist[recipient]);
        if (takeFeeOnInteraction) {
            uint256 totalFee = (amount * feePercent) / 100;
            _transferForFree(sender, address(this), totalFee);

            uint256 currentBalance = balanceOf(address(this));
            if (!feeList[sender] && currentBalance > liquifyMin) {
                if (currentBalance > liquifyMax) {
                    currentBalance = liquifyMax;
                }
                uint256 heldTokenFee = currentBalance / 3;
                uint256 liquidityTokenFee = currentBalance / 6;
                uint256 remainingTokens = currentBalance - heldTokenFee - liquidityTokenFee;
                _swapTokensForETH(address(this), remainingTokens);
                _addLiquidity(feeWallet, liquidityTokenFee);
                _transferForFree(address(this), feeWallet, heldTokenFee);
                Address.sendValue(feeWallet, address(this).balance);
            }
            amount -= totalFee;
        }
        _transferForFree(sender, recipient, amount);

        if (!takeFeeOnInteraction || noStakeOnTransferFrom[sender] || noStakeOnTransferTo[recipient])
            return;

        AutoStakingPool stakingContract = AutoStakingPool(stakingAddress);
        stakingContract.stake(recipient, amount);
    }

    function _transferForFree(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "BEP20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _swapTokensForETH(address to, uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        _approve(address(this), address(swapRouter), amount);

        swapRouter.swapExactTokensForETH(
            amount, // amount in
            0, // amount out min
            path,
            to,
            block.timestamp // deadline
        );
    }

    function _addLiquidity(address to, uint256 amount) private {
        _approve(address(this), address(swapRouter), amount);

        swapRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            amount,
            0,
            0,
            to,
            block.timestamp
        );
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_feeWallet","type":"address"},{"internalType":"address","name":"_swapRouter","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"allowTransferFromWithoutStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"allowTransferToWithoutStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAccountFeeListStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAccountFeeWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feePercent","type":"uint8"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maximum","type":"uint256"}],"name":"setLiquifyMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimum","type":"uint256"}],"name":"setLiquifyMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","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"},{"stateMutability":"payable","type":"receive"}]

60806040526802b5e3af16b1880000600a5568410d586a20a4c00000600b55600c805460ff191660061790553480156200003857600080fd5b5060405162001a1538038062001a158339810160408190526200005b916200016e565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018080553360009081526002602090815260408083206a016f52ce54f095cc3000009055600c8054610100600160a81b0319166101006001600160a01b0398891690810291909117909155600780546001600160a01b031916969097169586179096559482526009808252858320805460ff1990811686179091556006808452878520805483168717905560058085528886208054841688179055968552918352868420805482168617905590825285832080548216851790559390529290922080549091169091179055620001c6565b600080604083850312156200018257600080fd5b82516200018f81620001ad565b6020840151909250620001a281620001ad565b809150509250929050565b6001600160a01b0381168114620001c357600080fd5b50565b61183f80620001d66000396000f3fe60806040526004361061014f5760003560e01c80637fd6f15c116100b6578063c31c9c071161006f578063c31c9c07146103fd578063d7b4be241461041d578063dd62ed3e1461043d578063f25f4b5614610483578063f2fde38b146104a8578063f4838176146104c857600080fd5b80637fd6f15c146103245780638da5cb5b1461033e57806395d89b4114610370578063a9059cbb1461039d578063baad218f146103bd578063bc95a5df146103dd57600080fd5b80633672e34a116101085780633672e34a146102595780635dc7edfc14610279578063650a08191461029957806370a08231146102b9578063715018a6146102ef57806378d9bf211461030457600080fd5b806306fdde031461015b578063095ea7b31461019d57806318160ddd146101cd57806323b872dd146101f55780633028f63a14610215578063313ce5671461023757600080fd5b3661015657005b600080fd5b34801561016757600080fd5b506040805180820190915260078152664175746f42534360c81b60208201525b6040516101949190611644565b60405180910390f35b3480156101a957600080fd5b506101bd6101b83660046114e9565b6104e8565b6040519015158152602001610194565b3480156101d957600080fd5b506a016f52ce54f095cc3000005b604051908152602001610194565b34801561020157600080fd5b506101bd610210366004611475565b61055e565b34801561022157600080fd5b506102356102303660046113fb565b610624565b005b34801561024357600080fd5b5060125b60405160ff9091168152602001610194565b34801561026557600080fd5b506102356102743660046115da565b6106b0565b34801561028557600080fd5b506102356102943660046115da565b61072f565b3480156102a557600080fd5b506102356102b43660046114b6565b6107bf565b3480156102c557600080fd5b506101e76102d43660046113fb565b6001600160a01b031660009081526002602052604090205490565b3480156102fb57600080fd5b50610235610814565b34801561031057600080fd5b5061023561031f3660046114b6565b610888565b34801561033057600080fd5b50600c546102479060ff1681565b34801561034a57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610194565b34801561037c57600080fd5b506040805180820190915260048152634155544f60e01b6020820152610187565b3480156103a957600080fd5b506101bd6103b83660046114e9565b6108dd565b3480156103c957600080fd5b506102356103d83660046114b6565b6108f3565b3480156103e957600080fd5b506102356103f83660046114b6565b610948565b34801561040957600080fd5b50600754610358906001600160a01b031681565b34801561042957600080fd5b50600454610358906001600160a01b031681565b34801561044957600080fd5b506101e761045836600461143c565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561048f57600080fd5b50600c546103589061010090046001600160a01b031681565b3480156104b457600080fd5b506102356104c33660046113fb565b61099d565b3480156104d457600080fd5b506102356104e3366004611621565b610a87565b6000600260015414156105425760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600155610552338484610b1a565b50600180805592915050565b600061056b848484610c3e565b6004546001600160a01b0316336001600160a01b03161461061a576001600160a01b03841660009081526003602090815260408083203384529091529020548281101561060b5760405162461bcd60e51b815260206004820152602860248201527f42455032303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610539565b6106188533858403610b1a565b505b5060019392505050565b6000546001600160a01b0316331461064e5760405162461bcd60e51b815260040161053990611699565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600960209081526040808320805460ff1990811660019081179092556006845282852080548216831790556005909352922080549091169091179055565b6000546001600160a01b031633146106da5760405162461bcd60e51b815260040161053990611699565b6000811161072a5760405162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d206d7573742062652067726561746572207468616e20302e006044820152606401610539565b600a55565b6000546001600160a01b031633146107595760405162461bcd60e51b815260040161053990611699565b600a5481116107ba5760405162461bcd60e51b815260206004820152602760248201527f4d6178696d756d206d7573742062652067726561746572207468616e206c69716044820152663ab4b33ca6b4b760c91b6064820152608401610539565b600b55565b6000546001600160a01b031633146107e95760405162461bcd60e51b815260040161053990611699565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461083e5760405162461bcd60e51b815260040161053990611699565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146108b25760405162461bcd60e51b815260040161053990611699565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60006108ea338484610c3e565b50600192915050565b6000546001600160a01b0316331461091d5760405162461bcd60e51b815260040161053990611699565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109725760405162461bcd60e51b815260040161053990611699565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109c75760405162461bcd60e51b815260040161053990611699565b6001600160a01b038116610a2c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610539565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b815260040161053990611699565b60648160ff1610610b045760405162461bcd60e51b815260206004820152601e60248201527f50657263656e74206d757374206265206c657373207468616e203130302e00006044820152606401610539565b600c805460ff191660ff92909216919091179055565b6001600160a01b038316610b7c5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610539565b6001600160a01b038216610bdd5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610539565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526008602052604081205460ff1680610c7d57506001600160a01b03831660009081526008602052604090205460ff165b8015610cc657506001600160a01b03841660009081526009602052604090205460ff16158015610cc657506001600160a01b03831660009081526009602052604090205460ff16155b90508015610def57600c54600090606490610ce49060ff1685611779565b610cee9190611757565b9050610cfb853083610ebe565b306000908152600260209081526040808320546001600160a01b038916845260089092529091205460ff16158015610d345750600a5481115b15610de057600b54811115610d485750600b545b6000610d55600383611757565b90506000610d64600684611757565b9050600081610d738486611798565b610d7d9190611798565b9050610d89308261108d565b600c54610da49061010090046001600160a01b03168361121c565b600c54610dc190309061010090046001600160a01b031685610ebe565b600c54610ddc9061010090046001600160a01b0316476112dd565b5050505b610dea8285611798565b935050505b610dfa848484610ebe565b801580610e1f57506001600160a01b03841660009081526005602052604090205460ff165b80610e4257506001600160a01b03831660009081526006602052604090205460ff165b15610e4d5750505050565b600480546040516356e4bb9760e11b81526001600160a01b038681169382019390935260248101859052911690819063adc9772e90604401600060405180830381600087803b158015610e9f57600080fd5b505af1158015610eb3573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038316610f225760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610539565b6001600160a01b038216610f845760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610539565b6001600160a01b03831660009081526002602052604090205481811015610ffc5760405162461bcd60e51b815260206004820152602660248201527f42455032303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610539565b6001600160a01b0380851660009081526002602052604080822085850390559185168152908120805484929061103390849061173f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106110c2576110c26117c5565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561111657600080fd5b505afa15801561112a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114e919061141f565b81600181518110611161576111616117c5565b6001600160a01b0392831660209182029290920101526007546111879130911684610b1a565b6007546040516318cbafe560e01b81526001600160a01b03909116906318cbafe5906111c09085906000908690899042906004016116ce565b600060405180830381600087803b1580156111da57600080fd5b505af11580156111ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112169190810190611515565b50505050565b6007546112349030906001600160a01b031683610b1a565b60075460405163f305d71960e01b81523060048201526024810183905260006044820181905260648201526001600160a01b0384811660848301524260a48301529091169063f305d71990479060c4016060604051808303818588803b15801561129d57600080fd5b505af11580156112b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112d691906115f3565b5050505050565b8047101561132d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610539565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461137a576040519150601f19603f3d011682016040523d82523d6000602084013e61137f565b606091505b50509050806113f65760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610539565b505050565b60006020828403121561140d57600080fd5b8135611418816117f1565b9392505050565b60006020828403121561143157600080fd5b8151611418816117f1565b6000806040838503121561144f57600080fd5b823561145a816117f1565b9150602083013561146a816117f1565b809150509250929050565b60008060006060848603121561148a57600080fd5b8335611495816117f1565b925060208401356114a5816117f1565b929592945050506040919091013590565b600080604083850312156114c957600080fd5b82356114d4816117f1565b91506020830135801515811461146a57600080fd5b600080604083850312156114fc57600080fd5b8235611507816117f1565b946020939093013593505050565b6000602080838503121561152857600080fd5b825167ffffffffffffffff8082111561154057600080fd5b818501915085601f83011261155457600080fd5b815181811115611566576115666117db565b8060051b604051601f19603f8301168101818110858211171561158b5761158b6117db565b604052828152858101935084860182860187018a10156115aa57600080fd5b600095505b838610156115cd5780518552600195909501949386019386016115af565b5098975050505050505050565b6000602082840312156115ec57600080fd5b5035919050565b60008060006060848603121561160857600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561163357600080fd5b813560ff8116811461141857600080fd5b600060208083528351808285015260005b8181101561167157858101830151858201604001528201611655565b81811115611683576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561171e5784516001600160a01b0316835293830193918301916001016116f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611752576117526117af565b500190565b60008261177457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611793576117936117af565b500290565b6000828210156117aa576117aa6117af565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461180657600080fd5b5056fea26469706673582212200c8f88a39e6ab786f9dc2aef5c2dd9944110f16b4c8583ce5991992ca7cf855b64736f6c6343000806003300000000000000000000000083ed7923b8eec56cbc4acf989fa4bb2e100da38200000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

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

00000000000000000000000083ed7923b8eec56cbc4acf989fa4bb2e100da38200000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

-----Decoded View---------------
Arg [0] : _feeWallet (address): 0x83ed7923b8eec56cbc4acf989fa4bb2e100da382
Arg [1] : _swapRouter (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000083ed7923b8eec56cbc4acf989fa4bb2e100da382
Arg [1] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.