Implement the following smart contract and test with Remix.
Submit the code via Github.
Copy the following...
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
// You are supposed to complete this assignment by defining appropriate data types // And working on the code implementation for the various functions/methods in the contract contract Voting { // Define an Appropriate Data Type to Store Candidates
// Define an Appropriate Data Type to Track If Voter has Already Voted
// Adds New Candidate function addCandidate() public {}
// Removes Already Added Candidate function removeCandidate() public {}
// Retrieves All Candidates for Viewing function getAllCandidates() public {}
// Allows Voter to Cast a Vote for a Single Candidate function castVote() public {} }