in the case of car registrations we have protocol where we always send the name of the action we want the server to perform as the first argumentfollowed by any relevant parameters--in this casejust the license the protocol for the reply is that the server always return tuple whose first item is boolean success/failure flag if the flag is falsewe have -tuple and the second item is an error message if the flag is truethe tuple is either -tuple with the second item being confirmation messageor an -tuple with the second and subsequent items holding the data that was requested so hereif the license is unrecognizedok is false and we print the error message in data[ and return the previous license unchanged otherwisewe return the license (which will now become the previous license)and cartuple made from the data list(seatsmileageownerdef change_mileage(previous_license)licensecar retrieve_car_details(previous_licenseif car is nonereturn previous_license mileage console get_integer("mileage""mileage"car mileage if mileage = return license ok*data handle_request("change_mileage"licensemileageif not okprint(data[ ]elseprint("mileage successfully changed"return license this function follows similar pattern to get_car_details()except that once we have the details we update one aspect of them there are in fact two networking callssince retrieve_car_details(calls handle_request(to get the car' details--we need to do this both to confirm that the license is valid and to get the current mileage to use as the default here the reply is always -tuplewith either an error message or none as the second item we won' review the change_owner(function since it is structurally the same as change_mileage()nor will we review new_registration(since it differs only in not retrieving car details at the start (since it is new car being entered)and asking the user for all the details rather than just changing one detailnone of which is new to us or relevant to network programming def quit(*ignore)sys exit(