creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/curves/LinearVestingCurve.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity 0.8.17;\n\n/*\n  ______                       _______                             __ \n /      \\                     |       \\                           |  \\\n|  ▓▓▓▓▓▓\\  ______    ______  | ▓▓▓▓▓▓▓\\  ______   _______    ____| ▓▓\n| ▓▓__| ▓▓ /      \\  /      \\ | ▓▓__/ ▓▓ /      \\ |       \\  /      ▓▓\n| ▓▓    ▓▓|  ▓▓▓▓▓▓\\|  ▓▓▓▓▓▓\\| ▓▓    ▓▓|  ▓▓▓▓▓▓\\| ▓▓▓▓▓▓▓\\|  ▓▓▓▓▓▓▓\n| ▓▓▓▓▓▓▓▓| ▓▓  | ▓▓| ▓▓    ▓▓| ▓▓▓▓▓▓▓\\| ▓▓  | ▓▓| ▓▓  | ▓▓| ▓▓  | ▓▓\n| ▓▓  | ▓▓| ▓▓__/ ▓▓| ▓▓▓▓▓▓▓▓| ▓▓__/ ▓▓| ▓▓__/ ▓▓| ▓▓  | ▓▓| ▓▓__| ▓▓\n| ▓▓  | ▓▓| ▓▓    ▓▓ \\▓▓     \\| ▓▓    ▓▓ \\▓▓    ▓▓| ▓▓  | ▓▓ \\▓▓    ▓▓\n \\▓▓   \\▓▓| ▓▓▓▓▓▓▓   \\▓▓▓▓▓▓▓ \\▓▓▓▓▓▓▓   \\▓▓▓▓▓▓  \\▓▓   \\▓▓  \\▓▓▓▓▓▓▓\n          | ▓▓                                                        \n          | ▓▓                                                        \n           \\▓▓                                                         \n * App:             https://Ape.Bond\n * Medium:          https://ApeBond.medium.com\n * Twitter:         https://twitter.com/ApeBond\n * Telegram:        https://t.me/ape_bond\n * Announcements:   https://t.me/ApeBond_news\n * Discord:         https://ApeBond.click/discord\n * Reddit:          https://ApeBond.click/reddit\n * Instagram:       https://instagram.com/ape.bond\n * GitHub:          https://github.com/ApeSwapFinance\n */\n\nimport \"../interfaces/IVestingCurve.sol\";\n\ncontract LinearVestingCurve is IVestingCurve {\n    /**\n     * @dev See {IVestingCurve-getVestedPayoutAtTime}.\n     */\n    function getVestedPayoutAtTime(\n        uint256 totalPayout,\n        uint256 vestingTerm,\n        uint256 startTimestamp,\n        uint256 checkTimestamp\n    ) external pure returns (uint256 vestedPayout) {\n        if (checkTimestamp <= startTimestamp) {\n            vestedPayout = 0;\n        } else if (checkTimestamp >= (startTimestamp + vestingTerm)) {\n            vestedPayout = totalPayout;\n        } else {\n            /// @dev This is where custom vesting curves can be implemented.\n            vestedPayout = (totalPayout * (checkTimestamp - startTimestamp)) / vestingTerm;\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IVestingCurve.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity 0.8.17;\n\n/// @notice VestingCurve interface to allow for simple updates of vesting release schedules.\ninterface IVestingCurve {\n    /**\n     * @notice Returns the vested token amount given the inputs below.\n     * @param totalPayout Total payout vested once the vestingTerm is up\n     * @param vestingTerm Length of time in seconds that tokens are vesting for\n     * @param startTimestamp The timestamp of when vesting starts\n     * @param checkTimestamp The timestamp to calculate vested tokens\n     * @return vestedPayout Total payoutTokens vested at checkTimestamp\n     *\n     * Requirements\n     * - MUST return 0 if checkTimestamp is less than startTimestamp\n     * - MUST return totalPayout if checkTimestamp is greater than startTimestamp + vestingTerm,\n     * - MUST return a value including or between 0 and totalPayout\n     */\n    function getVestedPayoutAtTime(\n        uint256 totalPayout,\n        uint256 vestingTerm,\n        uint256 startTimestamp,\n        uint256 checkTimestamp\n    ) external view returns (uint256 vestedPayout);\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "viaIR": true,
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "libraries": {}
    }
  }}