```\nfunction claim(address user) external returns (uint256) {\n    drop();\n    \_captureNewTokensForUser(user);\n    uint256 balance = userStates[user].balance;\n    userStates[user].balance = 0;\n    totalUnclaimed = uint256(totalUnclaimed).sub(balance).toUint112();\n\n    // Transfer asset/reward token to user\n    asset.transfer(user, balance);\n\n    // Emit Claimed\n    emit Claimed(user, balance);\n\n    return balance;\n}\n```\n