In my understanding...
```solidity
function isValidImage(
Image memory img,
bytes32 key,
address property
) private view returns (bool) {
return
// solhint-disable-next-line not-rely-on-time
//// Deadline should have the value, and it should be greater than the current timestamp.
//// If deadline is 0, this will be true.
!(img.deadline != 0 && img.deadline < block.timestamp) &&
//// Members should have the value, and it should be greater than or equal to the claimed slots.
//// If members is 0, this will be true.
!(img.members != 0 &&
img.members <= propertyImageClaimedSlots[property][key]) &&
//// Members/Deadline should be greater than 0.
!(img.members == 0 && img.deadline == 0) &&
//// SRC should have the value.
bytes(img.src).length != 0 &&
//// requiredTokenAmount or requiredTokenFee should be greater than 0.
//// This validation is somewhat redundant with `isValidStake` and can be ignored?
(img.requiredTokenAmount != 0 || img.requiredTokenFee != 0);
}
```
this can be simplified like the following...
```solidity
function isValidImage(
Image memory img,
bytes32 key,
address property
) private view returns (bool) {
return
(
// If deadline is set, validates it.
img.deadline > 0
? img.deadline > block.timestamp
: true
)
&&
(
// If members is set, validates it.
img.members > 0
? img.members > propertyImageClaimedSlots[property][key]
: true
)
&&
(
img.deadline > 0 || img.members > 0
)
&&
bytes(img.src).length != 0
}
```