[wpilib] Replace MecanumDriveMotorVoltages with a functional interface (#6760)

This commit is contained in:
Wispy
2024-12-08 19:05:06 -06:00
committed by GitHub
parent d5edb4060d
commit cc41a0ed24
11 changed files with 453 additions and 1040 deletions

View File

@@ -38,6 +38,7 @@ import java.util.function.Supplier;
*
* <p>This class is provided by the NewCommands VendorDep
*/
@SuppressWarnings("removal")
public class MecanumControllerCommand extends Command {
private final Timer m_timer = new Timer();
private final boolean m_usePID;
@@ -53,7 +54,7 @@ public class MecanumControllerCommand extends Command {
private final PIDController m_frontRightController;
private final PIDController m_rearRightController;
private final Supplier<MecanumDriveWheelSpeeds> m_currentWheelSpeeds;
private final Consumer<MecanumDriveMotorVoltages> m_outputDriveVoltages;
private final MecanumVoltagesConsumer m_outputDriveVoltages;
private final Consumer<MecanumDriveWheelSpeeds> m_outputWheelSpeeds;
private double m_prevFrontLeftSpeedSetpoint; // m/s
private double m_prevRearLeftSpeedSetpoint; // m/s
@@ -84,8 +85,7 @@ public class MecanumControllerCommand extends Command {
* @param frontRightController The front right wheel velocity PID.
* @param rearRightController The rear right wheel velocity PID.
* @param currentWheelSpeeds A MecanumDriveWheelSpeeds object containing the current wheel speeds.
* @param outputDriveVoltages A MecanumDriveMotorVoltages object containing the output motor
* voltages.
* @param outputDriveVoltages A MecanumVoltagesConsumer that consumes voltages of mecanum motors.
* @param requirements The subsystems to require.
*/
@SuppressWarnings("this-escape")
@@ -104,7 +104,7 @@ public class MecanumControllerCommand extends Command {
PIDController frontRightController,
PIDController rearRightController,
Supplier<MecanumDriveWheelSpeeds> currentWheelSpeeds,
Consumer<MecanumDriveMotorVoltages> outputDriveVoltages,
MecanumVoltagesConsumer outputDriveVoltages,
Subsystem... requirements) {
m_trajectory = requireNonNullParam(trajectory, "trajectory", "MecanumControllerCommand");
m_pose = requireNonNullParam(pose, "pose", "MecanumControllerCommand");
@@ -145,6 +145,139 @@ public class MecanumControllerCommand extends Command {
addRequirements(requirements);
}
/**
* Constructs a new MecanumControllerCommand that when executed will follow the provided
* trajectory. PID control and feedforward are handled internally. Outputs are scaled from -12 to
* 12 as a voltage output to the motor.
*
* <p>Note: The controllers will *not* set the outputVolts to zero upon completion of the path
* this is left to the user, since it is not appropriate for paths with nonstationary endstates.
*
* @param trajectory The trajectory to follow.
* @param pose A function that supplies the robot pose - use one of the odometry classes to
* provide this.
* @param feedforward The feedforward to use for the drivetrain.
* @param kinematics The kinematics for the robot drivetrain.
* @param xController The Trajectory Tracker PID controller for the robot's x position.
* @param yController The Trajectory Tracker PID controller for the robot's y position.
* @param thetaController The Trajectory Tracker PID controller for angle for the robot.
* @param desiredRotation The angle that the robot should be facing. This is sampled at each time
* step.
* @param maxWheelVelocityMetersPerSecond The maximum velocity of a drivetrain wheel.
* @param frontLeftController The front left wheel velocity PID.
* @param rearLeftController The rear left wheel velocity PID.
* @param frontRightController The front right wheel velocity PID.
* @param rearRightController The rear right wheel velocity PID.
* @param currentWheelSpeeds A MecanumDriveWheelSpeeds object containing the current wheel speeds.
* @param outputDriveVoltages A MecanumDriveMotorVoltages object containing the output motor
* voltages.
* @param requirements The subsystems to require.
*/
@Deprecated(since = "2025", forRemoval = true)
public MecanumControllerCommand(
Trajectory trajectory,
Supplier<Pose2d> pose,
SimpleMotorFeedforward feedforward,
MecanumDriveKinematics kinematics,
PIDController xController,
PIDController yController,
ProfiledPIDController thetaController,
Supplier<Rotation2d> desiredRotation,
double maxWheelVelocityMetersPerSecond,
PIDController frontLeftController,
PIDController rearLeftController,
PIDController frontRightController,
PIDController rearRightController,
Supplier<MecanumDriveWheelSpeeds> currentWheelSpeeds,
Consumer<MecanumDriveMotorVoltages> outputDriveVoltages,
Subsystem... requirements) {
this(
trajectory,
pose,
feedforward,
kinematics,
xController,
yController,
thetaController,
desiredRotation,
maxWheelVelocityMetersPerSecond,
frontLeftController,
rearLeftController,
frontRightController,
rearRightController,
currentWheelSpeeds,
(frontLeft, frontRight, rearLeft, rearRight) ->
outputDriveVoltages.accept(
new MecanumDriveMotorVoltages(frontLeft, frontRight, rearLeft, rearRight)),
requirements);
}
/**
* Constructs a new MecanumControllerCommand that when executed will follow the provided
* trajectory. PID control and feedforward are handled internally. Outputs are scaled from -12 to
* 12 as a voltage output to the motor.
*
* <p>Note: The controllers will *not* set the outputVolts to zero upon completion of the path
* this is left to the user, since it is not appropriate for paths with nonstationary endstates.
*
* <p>Note 2: The final rotation of the robot will be set to the rotation of the final pose in the
* trajectory. The robot will not follow the rotations from the poses at each timestep. If
* alternate rotation behavior is desired, the other constructor with a supplier for rotation
* should be used.
*
* @param trajectory The trajectory to follow.
* @param pose A function that supplies the robot pose - use one of the odometry classes to
* provide this.
* @param feedforward The feedforward to use for the drivetrain.
* @param kinematics The kinematics for the robot drivetrain.
* @param xController The Trajectory Tracker PID controller for the robot's x position.
* @param yController The Trajectory Tracker PID controller for the robot's y position.
* @param thetaController The Trajectory Tracker PID controller for angle for the robot.
* @param maxWheelVelocityMetersPerSecond The maximum velocity of a drivetrain wheel.
* @param frontLeftController The front left wheel velocity PID.
* @param rearLeftController The rear left wheel velocity PID.
* @param frontRightController The front right wheel velocity PID.
* @param rearRightController The rear right wheel velocity PID.
* @param currentWheelSpeeds A MecanumDriveWheelSpeeds object containing the current wheel speeds.
* @param outputDriveVoltages A MecanumVoltagesConsumer that consumes voltages of mecanum motors.
* @param requirements The subsystems to require.
*/
public MecanumControllerCommand(
Trajectory trajectory,
Supplier<Pose2d> pose,
SimpleMotorFeedforward feedforward,
MecanumDriveKinematics kinematics,
PIDController xController,
PIDController yController,
ProfiledPIDController thetaController,
double maxWheelVelocityMetersPerSecond,
PIDController frontLeftController,
PIDController rearLeftController,
PIDController frontRightController,
PIDController rearRightController,
Supplier<MecanumDriveWheelSpeeds> currentWheelSpeeds,
MecanumVoltagesConsumer outputDriveVoltages,
Subsystem... requirements) {
this(
trajectory,
pose,
feedforward,
kinematics,
xController,
yController,
thetaController,
() ->
trajectory.getStates().get(trajectory.getStates().size() - 1).poseMeters.getRotation(),
maxWheelVelocityMetersPerSecond,
frontLeftController,
rearLeftController,
frontRightController,
rearRightController,
currentWheelSpeeds,
outputDriveVoltages,
requirements);
}
/**
* Constructs a new MecanumControllerCommand that when executed will follow the provided
* trajectory. PID control and feedforward are handled internally. Outputs are scaled from -12 to
@@ -176,6 +309,7 @@ public class MecanumControllerCommand extends Command {
* voltages.
* @param requirements The subsystems to require.
*/
@Deprecated(since = "2025", forRemoval = true)
public MecanumControllerCommand(
Trajectory trajectory,
Supplier<Pose2d> pose,
@@ -200,15 +334,15 @@ public class MecanumControllerCommand extends Command {
xController,
yController,
thetaController,
() ->
trajectory.getStates().get(trajectory.getStates().size() - 1).poseMeters.getRotation(),
maxWheelVelocityMetersPerSecond,
frontLeftController,
rearLeftController,
frontRightController,
rearRightController,
currentWheelSpeeds,
outputDriveVoltages,
(frontLeft, frontRight, rearLeft, rearRight) ->
outputDriveVoltages.accept(
new MecanumDriveMotorVoltages(frontLeft, frontRight, rearLeft, rearRight)),
requirements);
}
@@ -403,8 +537,7 @@ public class MecanumControllerCommand extends Command {
m_currentWheelSpeeds.get().rearRightMetersPerSecond, rearRightSpeedSetpoint);
m_outputDriveVoltages.accept(
new MecanumDriveMotorVoltages(
frontLeftOutput, frontRightOutput, rearLeftOutput, rearRightOutput));
frontLeftOutput, frontRightOutput, rearLeftOutput, rearRightOutput);
} else {
m_outputWheelSpeeds.accept(
@@ -425,4 +558,22 @@ public class MecanumControllerCommand extends Command {
public boolean isFinished() {
return m_timer.hasElapsed(m_trajectory.getTotalTimeSeconds());
}
/** A consumer to represent an operation on the voltages of a mecanum drive. */
@FunctionalInterface
public interface MecanumVoltagesConsumer {
/**
* Accepts the voltages to perform some operation with them.
*
* @param frontLeftVoltage The voltage of the front left motor.
* @param frontRightVoltage The voltage of the front right motor.
* @param rearLeftVoltage The voltage of the rear left motor.
* @param rearRightVoltage The voltage of the rear left motor.
*/
void accept(
double frontLeftVoltage,
double frontRightVoltage,
double rearLeftVoltage,
double rearRightVoltage);
}
}

View File

@@ -5,7 +5,6 @@
package edu.wpi.first.wpilibj.examples.mecanumcontrollercommand.subsystems;
import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.kinematics.MecanumDriveMotorVoltages;
import edu.wpi.first.math.kinematics.MecanumDriveOdometry;
import edu.wpi.first.math.kinematics.MecanumDriveWheelPositions;
import edu.wpi.first.math.kinematics.MecanumDriveWheelSpeeds;
@@ -125,11 +124,15 @@ public class DriveSubsystem extends SubsystemBase {
}
/** Sets the front left drive MotorController to a voltage. */
public void setDriveMotorControllersVolts(MecanumDriveMotorVoltages volts) {
m_frontLeft.setVoltage(volts.frontLeftVoltage);
m_rearLeft.setVoltage(volts.rearLeftVoltage);
m_frontRight.setVoltage(volts.frontRightVoltage);
m_rearRight.setVoltage(volts.rearRightVoltage);
public void setDriveMotorControllersVolts(
double frontLeftVoltage,
double frontRightVoltage,
double rearLeftVoltage,
double rearRightVoltage) {
m_frontLeft.setVoltage(frontLeftVoltage);
m_rearLeft.setVoltage(rearLeftVoltage);
m_frontRight.setVoltage(frontRightVoltage);
m_rearRight.setVoltage(rearRightVoltage);
}
/** Resets the drive encoders to currently read a position of 0. */

View File

@@ -19,7 +19,7 @@ import us.hebi.quickbuf.RepeatedByte;
import us.hebi.quickbuf.RepeatedMessage;
public final class Kinematics {
private static final RepeatedByte descriptorData = ProtoUtil.decodeBase64(3427,
private static final RepeatedByte descriptorData = ProtoUtil.decodeBase64(3021,
"ChBraW5lbWF0aWNzLnByb3RvEgl3cGkucHJvdG8aEGdlb21ldHJ5MmQucHJvdG8iTQoVUHJvdG9idWZD" +
"aGFzc2lzU3BlZWRzEg4KAnZ4GAEgASgBUgJ2eBIOCgJ2eRgCIAEoAVICdnkSFAoFb21lZ2EYAyABKAFS" +
"BW9tZWdhIkYKI1Byb3RvYnVmRGlmZmVyZW50aWFsRHJpdmVLaW5lbWF0aWNzEh8KC3RyYWNrX3dpZHRo" +
@@ -31,53 +31,46 @@ public final class Kinematics {
"GAIgASgLMiAud3BpLnByb3RvLlByb3RvYnVmVHJhbnNsYXRpb24yZFIKZnJvbnRSaWdodBI9CglyZWFy" +
"X2xlZnQYAyABKAsyIC53cGkucHJvdG8uUHJvdG9idWZUcmFuc2xhdGlvbjJkUghyZWFyTGVmdBI/Cgpy" +
"ZWFyX3JpZ2h0GAQgASgLMiAud3BpLnByb3RvLlByb3RvYnVmVHJhbnNsYXRpb24yZFIJcmVhclJpZ2h0" +
"Ip8BCiFQcm90b2J1Zk1lY2FudW1Ecml2ZU1vdG9yVm9sdGFnZXMSHQoKZnJvbnRfbGVmdBgBIAEoAVIJ" +
"ZnJvbnRMZWZ0Eh8KC2Zyb250X3JpZ2h0GAIgASgBUgpmcm9udFJpZ2h0EhsKCXJlYXJfbGVmdBgDIAEo" +
"AVIIcmVhckxlZnQSHQoKcmVhcl9yaWdodBgEIAEoAVIJcmVhclJpZ2h0IqABCiJQcm90b2J1Zk1lY2Fu" +
"dW1Ecml2ZVdoZWVsUG9zaXRpb25zEh0KCmZyb250X2xlZnQYASABKAFSCWZyb250TGVmdBIfCgtmcm9u" +
"dF9yaWdodBgCIAEoAVIKZnJvbnRSaWdodBIbCglyZWFyX2xlZnQYAyABKAFSCHJlYXJMZWZ0Eh0KCnJl" +
"YXJfcmlnaHQYBCABKAFSCXJlYXJSaWdodCKdAQofUHJvdG9idWZNZWNhbnVtRHJpdmVXaGVlbFNwZWVk" +
"cxIdCgpmcm9udF9sZWZ0GAEgASgBUglmcm9udExlZnQSHwoLZnJvbnRfcmlnaHQYAiABKAFSCmZyb250" +
"UmlnaHQSGwoJcmVhcl9sZWZ0GAMgASgBUghyZWFyTGVmdBIdCgpyZWFyX3JpZ2h0GAQgASgBUglyZWFy" +
"UmlnaHQiWwodUHJvdG9idWZTd2VydmVEcml2ZUtpbmVtYXRpY3MSOgoHbW9kdWxlcxgBIAMoCzIgLndw",
"aS5wcm90by5Qcm90b2J1ZlRyYW5zbGF0aW9uMmRSB21vZHVsZXMibwocUHJvdG9idWZTd2VydmVNb2R1" +
"bGVQb3NpdGlvbhIaCghkaXN0YW5jZRgBIAEoAVIIZGlzdGFuY2USMwoFYW5nbGUYAiABKAsyHS53cGku" +
"cHJvdG8uUHJvdG9idWZSb3RhdGlvbjJkUgVhbmdsZSJmChlQcm90b2J1ZlN3ZXJ2ZU1vZHVsZVN0YXRl" +
"EhQKBXNwZWVkGAEgASgBUgVzcGVlZBIzCgVhbmdsZRgCIAEoCzIdLndwaS5wcm90by5Qcm90b2J1ZlJv" +
"dGF0aW9uMmRSBWFuZ2xlQhoKGGVkdS53cGkuZmlyc3QubWF0aC5wcm90b0qNDwoGEgQAAEQBCggKAQwS" +
"AwAAEgoICgECEgMCABIKCQoCAwASAwQAGgoICgEIEgMGADEKCQoCCAESAwYAMQoKCgIEABIECAAMAQoK" +
"CgMEAAESAwgIHQoLCgQEAAIAEgMJAhAKDAoFBAACAAUSAwkCCAoMCgUEAAIAARIDCQkLCgwKBQQAAgAD" +
"EgMJDg8KCwoEBAACARIDCgIQCgwKBQQAAgEFEgMKAggKDAoFBAACAQESAwoJCwoMCgUEAAIBAxIDCg4P" +
"CgsKBAQAAgISAwsCEwoMCgUEAAICBRIDCwIICgwKBQQAAgIBEgMLCQ4KDAoFBAACAgMSAwsREgoKCgIE" +
"ARIEDgAQAQoKCgMEAQESAw4IKwoLCgQEAQIAEgMPAhkKDAoFBAECAAUSAw8CCAoMCgUEAQIAARIDDwkU" +
"CgwKBQQBAgADEgMPFxgKCgoCBAISBBIAFQEKCgoDBAIBEgMSCCwKCwoEBAICABIDEwISCgwKBQQCAgAF" +
"EgMTAggKDAoFBAICAAESAxMJDQoMCgUEAgIAAxIDExARCgsKBAQCAgESAxQCEwoMCgUEAgIBBRIDFAII" +
"CgwKBQQCAgEBEgMUCQ4KDAoFBAICAQMSAxQREgoKCgIEAxIEFwAaAQoKCgMEAwESAxcILwoLCgQEAwIA" +
"EgMYAhIKDAoFBAMCAAUSAxgCCAoMCgUEAwIAARIDGAkNCgwKBQQDAgADEgMYEBEKCwoEBAMCARIDGQIT" +
"CgwKBQQDAgEFEgMZAggKDAoFBAMCAQESAxkJDgoMCgUEAwIBAxIDGRESCgoKAgQEEgQcACEBCgoKAwQE" +
"ARIDHAgmCgsKBAQEAgASAx0CJwoMCgUEBAIABhIDHQIXCgwKBQQEAgABEgMdGCIKDAoFBAQCAAMSAx0l" +
"JgoLCgQEBAIBEgMeAigKDAoFBAQCAQYSAx4CFwoMCgUEBAIBARIDHhgjCgwKBQQEAgEDEgMeJicKCwoE" +
"BAQCAhIDHwImCgwKBQQEAgIGEgMfAhcKDAoFBAQCAgESAx8YIQoMCgUEBAICAxIDHyQlCgsKBAQEAgMS" +
"AyACJwoMCgUEBAIDBhIDIAIXCgwKBQQEAgMBEgMgGCIKDAoFBAQCAwMSAyAlJgoKCgIEBRIEIwAoAQoK" +
"CgMEBQESAyMIKQoLCgQEBQIAEgMkAhgKDAoFBAUCAAUSAyQCCAoMCgUEBQIAARIDJAkTCgwKBQQFAgAD",
"EgMkFhcKCwoEBAUCARIDJQIZCgwKBQQFAgEFEgMlAggKDAoFBAUCAQESAyUJFAoMCgUEBQIBAxIDJRcY" +
"CgsKBAQFAgISAyYCFwoMCgUEBQICBRIDJgIICgwKBQQFAgIBEgMmCRIKDAoFBAUCAgMSAyYVFgoLCgQE" +
"BQIDEgMnAhgKDAoFBAUCAwUSAycCCAoMCgUEBQIDARIDJwkTCgwKBQQFAgMDEgMnFhcKCgoCBAYSBCoA" +
"LwEKCgoDBAYBEgMqCCoKCwoEBAYCABIDKwIYCgwKBQQGAgAFEgMrAggKDAoFBAYCAAESAysJEwoMCgUE" +
"BgIAAxIDKxYXCgsKBAQGAgESAywCGQoMCgUEBgIBBRIDLAIICgwKBQQGAgEBEgMsCRQKDAoFBAYCAQMS" +
"AywXGAoLCgQEBgICEgMtAhcKDAoFBAYCAgUSAy0CCAoMCgUEBgICARIDLQkSCgwKBQQGAgIDEgMtFRYK" +
"CwoEBAYCAxIDLgIYCgwKBQQGAgMFEgMuAggKDAoFBAYCAwESAy4JEwoMCgUEBgIDAxIDLhYXCgoKAgQH" +
"EgQxADYBCgoKAwQHARIDMQgnCgsKBAQHAgASAzICGAoMCgUEBwIABRIDMgIICgwKBQQHAgABEgMyCRMK" +
"DAoFBAcCAAMSAzIWFwoLCgQEBwIBEgMzAhkKDAoFBAcCAQUSAzMCCAoMCgUEBwIBARIDMwkUCgwKBQQH" +
"AgEDEgMzFxgKCwoEBAcCAhIDNAIXCgwKBQQHAgIFEgM0AggKDAoFBAcCAgESAzQJEgoMCgUEBwICAxID" +
"NBUWCgsKBAQHAgMSAzUCGAoMCgUEBwIDBRIDNQIICgwKBQQHAgMBEgM1CRMKDAoFBAcCAwMSAzUWFwoK" +
"CgIECBIEOAA6AQoKCgMECAESAzgIJQoLCgQECAIAEgM5Ai0KDAoFBAgCAAQSAzkCCgoMCgUECAIABhID" +
"OQsgCgwKBQQIAgABEgM5ISgKDAoFBAgCAAMSAzkrLAoKCgIECRIEPAA/AQoKCgMECQESAzwIJAoLCgQE" +
"CQIAEgM9AhYKDAoFBAkCAAUSAz0CCAoMCgUECQIAARIDPQkRCgwKBQQJAgADEgM9FBUKCwoEBAkCARID" +
"PgIfCgwKBQQJAgEGEgM+AhQKDAoFBAkCAQESAz4VGgoMCgUECQIBAxIDPh0eCgoKAgQKEgRBAEQBCgoK" +
"AwQKARIDQQghCgsKBAQKAgASA0ICEwoMCgUECgIABRIDQgIICgwKBQQKAgABEgNCCQ4KDAoFBAoCAAMS" +
"A0IREgoLCgQECgIBEgNDAh8KDAoFBAoCAQYSA0MCFAoMCgUECgIBARIDQxUaCgwKBQQKAgEDEgNDHR5i" +
"BnByb3RvMw==");
"IqABCiJQcm90b2J1Zk1lY2FudW1Ecml2ZVdoZWVsUG9zaXRpb25zEh0KCmZyb250X2xlZnQYASABKAFS" +
"CWZyb250TGVmdBIfCgtmcm9udF9yaWdodBgCIAEoAVIKZnJvbnRSaWdodBIbCglyZWFyX2xlZnQYAyAB" +
"KAFSCHJlYXJMZWZ0Eh0KCnJlYXJfcmlnaHQYBCABKAFSCXJlYXJSaWdodCKdAQofUHJvdG9idWZNZWNh" +
"bnVtRHJpdmVXaGVlbFNwZWVkcxIdCgpmcm9udF9sZWZ0GAEgASgBUglmcm9udExlZnQSHwoLZnJvbnRf" +
"cmlnaHQYAiABKAFSCmZyb250UmlnaHQSGwoJcmVhcl9sZWZ0GAMgASgBUghyZWFyTGVmdBIdCgpyZWFy" +
"X3JpZ2h0GAQgASgBUglyZWFyUmlnaHQiWwodUHJvdG9idWZTd2VydmVEcml2ZUtpbmVtYXRpY3MSOgoH" +
"bW9kdWxlcxgBIAMoCzIgLndwaS5wcm90by5Qcm90b2J1ZlRyYW5zbGF0aW9uMmRSB21vZHVsZXMibwoc" +
"UHJvdG9idWZTd2VydmVNb2R1bGVQb3NpdGlvbhIaCghkaXN0YW5jZRgBIAEoAVIIZGlzdGFuY2USMwoF" +
"YW5nbGUYAiABKAsyHS53cGkucHJvdG8uUHJvdG9idWZSb3RhdGlvbjJkUgVhbmdsZSJmChlQcm90b2J1",
"ZlN3ZXJ2ZU1vZHVsZVN0YXRlEhQKBXNwZWVkGAEgASgBUgVzcGVlZBIzCgVhbmdsZRgCIAEoCzIdLndw" +
"aS5wcm90by5Qcm90b2J1ZlJvdGF0aW9uMmRSBWFuZ2xlQhoKGGVkdS53cGkuZmlyc3QubWF0aC5wcm90" +
"b0qZDQoGEgQAAD0BCggKAQwSAwAAEgoICgECEgMCABIKCQoCAwASAwQAGgoICgEIEgMGADEKCQoCCAES" +
"AwYAMQoKCgIEABIECAAMAQoKCgMEAAESAwgIHQoLCgQEAAIAEgMJAhAKDAoFBAACAAUSAwkCCAoMCgUE" +
"AAIAARIDCQkLCgwKBQQAAgADEgMJDg8KCwoEBAACARIDCgIQCgwKBQQAAgEFEgMKAggKDAoFBAACAQES" +
"AwoJCwoMCgUEAAIBAxIDCg4PCgsKBAQAAgISAwsCEwoMCgUEAAICBRIDCwIICgwKBQQAAgIBEgMLCQ4K" +
"DAoFBAACAgMSAwsREgoKCgIEARIEDgAQAQoKCgMEAQESAw4IKwoLCgQEAQIAEgMPAhkKDAoFBAECAAUS" +
"Aw8CCAoMCgUEAQIAARIDDwkUCgwKBQQBAgADEgMPFxgKCgoCBAISBBIAFQEKCgoDBAIBEgMSCCwKCwoE" +
"BAICABIDEwISCgwKBQQCAgAFEgMTAggKDAoFBAICAAESAxMJDQoMCgUEAgIAAxIDExARCgsKBAQCAgES" +
"AxQCEwoMCgUEAgIBBRIDFAIICgwKBQQCAgEBEgMUCQ4KDAoFBAICAQMSAxQREgoKCgIEAxIEFwAaAQoK" +
"CgMEAwESAxcILwoLCgQEAwIAEgMYAhIKDAoFBAMCAAUSAxgCCAoMCgUEAwIAARIDGAkNCgwKBQQDAgAD" +
"EgMYEBEKCwoEBAMCARIDGQITCgwKBQQDAgEFEgMZAggKDAoFBAMCAQESAxkJDgoMCgUEAwIBAxIDGRES" +
"CgoKAgQEEgQcACEBCgoKAwQEARIDHAgmCgsKBAQEAgASAx0CJwoMCgUEBAIABhIDHQIXCgwKBQQEAgAB" +
"EgMdGCIKDAoFBAQCAAMSAx0lJgoLCgQEBAIBEgMeAigKDAoFBAQCAQYSAx4CFwoMCgUEBAIBARIDHhgj" +
"CgwKBQQEAgEDEgMeJicKCwoEBAQCAhIDHwImCgwKBQQEAgIGEgMfAhcKDAoFBAQCAgESAx8YIQoMCgUE" +
"BAICAxIDHyQlCgsKBAQEAgMSAyACJwoMCgUEBAIDBhIDIAIXCgwKBQQEAgMBEgMgGCIKDAoFBAQCAwMS" +
"AyAlJgoKCgIEBRIEIwAoAQoKCgMEBQESAyMIKgoLCgQEBQIAEgMkAhgKDAoFBAUCAAUSAyQCCAoMCgUE" +
"BQIAARIDJAkTCgwKBQQFAgADEgMkFhcKCwoEBAUCARIDJQIZCgwKBQQFAgEFEgMlAggKDAoFBAUCAQES" +
"AyUJFAoMCgUEBQIBAxIDJRcYCgsKBAQFAgISAyYCFwoMCgUEBQICBRIDJgIICgwKBQQFAgIBEgMmCRIK" +
"DAoFBAUCAgMSAyYVFgoLCgQEBQIDEgMnAhgKDAoFBAUCAwUSAycCCAoMCgUEBQIDARIDJwkTCgwKBQQF",
"AgMDEgMnFhcKCgoCBAYSBCoALwEKCgoDBAYBEgMqCCcKCwoEBAYCABIDKwIYCgwKBQQGAgAFEgMrAggK" +
"DAoFBAYCAAESAysJEwoMCgUEBgIAAxIDKxYXCgsKBAQGAgESAywCGQoMCgUEBgIBBRIDLAIICgwKBQQG" +
"AgEBEgMsCRQKDAoFBAYCAQMSAywXGAoLCgQEBgICEgMtAhcKDAoFBAYCAgUSAy0CCAoMCgUEBgICARID" +
"LQkSCgwKBQQGAgIDEgMtFRYKCwoEBAYCAxIDLgIYCgwKBQQGAgMFEgMuAggKDAoFBAYCAwESAy4JEwoM" +
"CgUEBgIDAxIDLhYXCgoKAgQHEgQxADMBCgoKAwQHARIDMQglCgsKBAQHAgASAzICLQoMCgUEBwIABBID" +
"MgIKCgwKBQQHAgAGEgMyCyAKDAoFBAcCAAESAzIhKAoMCgUEBwIAAxIDMissCgoKAgQIEgQ1ADgBCgoK" +
"AwQIARIDNQgkCgsKBAQIAgASAzYCFgoMCgUECAIABRIDNgIICgwKBQQIAgABEgM2CREKDAoFBAgCAAMS" +
"AzYUFQoLCgQECAIBEgM3Ah8KDAoFBAgCAQYSAzcCFAoMCgUECAIBARIDNxUaCgwKBQQIAgEDEgM3HR4K" +
"CgoCBAkSBDoAPQEKCgoDBAkBEgM6CCEKCwoEBAkCABIDOwITCgwKBQQJAgAFEgM7AggKDAoFBAkCAAES" +
"AzsJDgoMCgUECQIAAxIDOxESCgsKBAQJAgESAzwCHwoMCgUECQIBBhIDPAIUCgwKBQQJAgEBEgM8FRoK" +
"DAoFBAkCAQMSAzwdHmIGcHJvdG8z");
static final Descriptors.FileDescriptor descriptor = Descriptors.FileDescriptor.internalBuildGeneratedFileFrom("kinematics.proto", "wpi.proto", descriptorData, Geometry2D.getDescriptor());
@@ -91,17 +84,15 @@ public final class Kinematics {
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveKinematics_descriptor = descriptor.internalContainedType(368, 292, "ProtobufMecanumDriveKinematics", "wpi.proto.ProtobufMecanumDriveKinematics");
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveMotorVoltages_descriptor = descriptor.internalContainedType(663, 159, "ProtobufMecanumDriveMotorVoltages", "wpi.proto.ProtobufMecanumDriveMotorVoltages");
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveWheelPositions_descriptor = descriptor.internalContainedType(663, 160, "ProtobufMecanumDriveWheelPositions", "wpi.proto.ProtobufMecanumDriveWheelPositions");
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveWheelPositions_descriptor = descriptor.internalContainedType(825, 160, "ProtobufMecanumDriveWheelPositions", "wpi.proto.ProtobufMecanumDriveWheelPositions");
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveWheelSpeeds_descriptor = descriptor.internalContainedType(826, 157, "ProtobufMecanumDriveWheelSpeeds", "wpi.proto.ProtobufMecanumDriveWheelSpeeds");
static final Descriptors.Descriptor wpi_proto_ProtobufMecanumDriveWheelSpeeds_descriptor = descriptor.internalContainedType(988, 157, "ProtobufMecanumDriveWheelSpeeds", "wpi.proto.ProtobufMecanumDriveWheelSpeeds");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveDriveKinematics_descriptor = descriptor.internalContainedType(985, 91, "ProtobufSwerveDriveKinematics", "wpi.proto.ProtobufSwerveDriveKinematics");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveDriveKinematics_descriptor = descriptor.internalContainedType(1147, 91, "ProtobufSwerveDriveKinematics", "wpi.proto.ProtobufSwerveDriveKinematics");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveModulePosition_descriptor = descriptor.internalContainedType(1078, 111, "ProtobufSwerveModulePosition", "wpi.proto.ProtobufSwerveModulePosition");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveModulePosition_descriptor = descriptor.internalContainedType(1240, 111, "ProtobufSwerveModulePosition", "wpi.proto.ProtobufSwerveModulePosition");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveModuleState_descriptor = descriptor.internalContainedType(1353, 102, "ProtobufSwerveModuleState", "wpi.proto.ProtobufSwerveModuleState");
static final Descriptors.Descriptor wpi_proto_ProtobufSwerveModuleState_descriptor = descriptor.internalContainedType(1191, 102, "ProtobufSwerveModuleState", "wpi.proto.ProtobufSwerveModuleState");
/**
* @return this proto file's descriptor.
@@ -2043,506 +2034,6 @@ public final class Kinematics {
}
}
/**
* Protobuf type {@code ProtobufMecanumDriveMotorVoltages}
*/
public static final class ProtobufMecanumDriveMotorVoltages extends ProtoMessage<ProtobufMecanumDriveMotorVoltages> implements Cloneable {
private static final long serialVersionUID = 0L;
/**
* <code>optional double front_left = 1;</code>
*/
private double frontLeft;
/**
* <code>optional double front_right = 2;</code>
*/
private double frontRight;
/**
* <code>optional double rear_left = 3;</code>
*/
private double rearLeft;
/**
* <code>optional double rear_right = 4;</code>
*/
private double rearRight;
private ProtobufMecanumDriveMotorVoltages() {
}
/**
* @return a new empty instance of {@code ProtobufMecanumDriveMotorVoltages}
*/
public static ProtobufMecanumDriveMotorVoltages newInstance() {
return new ProtobufMecanumDriveMotorVoltages();
}
/**
* <code>optional double front_left = 1;</code>
* @return whether the frontLeft field is set
*/
public boolean hasFrontLeft() {
return (bitField0_ & 0x00000001) != 0;
}
/**
* <code>optional double front_left = 1;</code>
* @return this
*/
public ProtobufMecanumDriveMotorVoltages clearFrontLeft() {
bitField0_ &= ~0x00000001;
frontLeft = 0D;
return this;
}
/**
* <code>optional double front_left = 1;</code>
* @return the frontLeft
*/
public double getFrontLeft() {
return frontLeft;
}
/**
* <code>optional double front_left = 1;</code>
* @param value the frontLeft to set
* @return this
*/
public ProtobufMecanumDriveMotorVoltages setFrontLeft(final double value) {
bitField0_ |= 0x00000001;
frontLeft = value;
return this;
}
/**
* <code>optional double front_right = 2;</code>
* @return whether the frontRight field is set
*/
public boolean hasFrontRight() {
return (bitField0_ & 0x00000002) != 0;
}
/**
* <code>optional double front_right = 2;</code>
* @return this
*/
public ProtobufMecanumDriveMotorVoltages clearFrontRight() {
bitField0_ &= ~0x00000002;
frontRight = 0D;
return this;
}
/**
* <code>optional double front_right = 2;</code>
* @return the frontRight
*/
public double getFrontRight() {
return frontRight;
}
/**
* <code>optional double front_right = 2;</code>
* @param value the frontRight to set
* @return this
*/
public ProtobufMecanumDriveMotorVoltages setFrontRight(final double value) {
bitField0_ |= 0x00000002;
frontRight = value;
return this;
}
/**
* <code>optional double rear_left = 3;</code>
* @return whether the rearLeft field is set
*/
public boolean hasRearLeft() {
return (bitField0_ & 0x00000004) != 0;
}
/**
* <code>optional double rear_left = 3;</code>
* @return this
*/
public ProtobufMecanumDriveMotorVoltages clearRearLeft() {
bitField0_ &= ~0x00000004;
rearLeft = 0D;
return this;
}
/**
* <code>optional double rear_left = 3;</code>
* @return the rearLeft
*/
public double getRearLeft() {
return rearLeft;
}
/**
* <code>optional double rear_left = 3;</code>
* @param value the rearLeft to set
* @return this
*/
public ProtobufMecanumDriveMotorVoltages setRearLeft(final double value) {
bitField0_ |= 0x00000004;
rearLeft = value;
return this;
}
/**
* <code>optional double rear_right = 4;</code>
* @return whether the rearRight field is set
*/
public boolean hasRearRight() {
return (bitField0_ & 0x00000008) != 0;
}
/**
* <code>optional double rear_right = 4;</code>
* @return this
*/
public ProtobufMecanumDriveMotorVoltages clearRearRight() {
bitField0_ &= ~0x00000008;
rearRight = 0D;
return this;
}
/**
* <code>optional double rear_right = 4;</code>
* @return the rearRight
*/
public double getRearRight() {
return rearRight;
}
/**
* <code>optional double rear_right = 4;</code>
* @param value the rearRight to set
* @return this
*/
public ProtobufMecanumDriveMotorVoltages setRearRight(final double value) {
bitField0_ |= 0x00000008;
rearRight = value;
return this;
}
@Override
public ProtobufMecanumDriveMotorVoltages copyFrom(
final ProtobufMecanumDriveMotorVoltages other) {
cachedSize = other.cachedSize;
if ((bitField0_ | other.bitField0_) != 0) {
bitField0_ = other.bitField0_;
frontLeft = other.frontLeft;
frontRight = other.frontRight;
rearLeft = other.rearLeft;
rearRight = other.rearRight;
}
return this;
}
@Override
public ProtobufMecanumDriveMotorVoltages mergeFrom(
final ProtobufMecanumDriveMotorVoltages other) {
if (other.isEmpty()) {
return this;
}
cachedSize = -1;
if (other.hasFrontLeft()) {
setFrontLeft(other.frontLeft);
}
if (other.hasFrontRight()) {
setFrontRight(other.frontRight);
}
if (other.hasRearLeft()) {
setRearLeft(other.rearLeft);
}
if (other.hasRearRight()) {
setRearRight(other.rearRight);
}
return this;
}
@Override
public ProtobufMecanumDriveMotorVoltages clear() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
frontLeft = 0D;
frontRight = 0D;
rearLeft = 0D;
rearRight = 0D;
return this;
}
@Override
public ProtobufMecanumDriveMotorVoltages clearQuick() {
if (isEmpty()) {
return this;
}
cachedSize = -1;
bitField0_ = 0;
return this;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof ProtobufMecanumDriveMotorVoltages)) {
return false;
}
ProtobufMecanumDriveMotorVoltages other = (ProtobufMecanumDriveMotorVoltages) o;
return bitField0_ == other.bitField0_
&& (!hasFrontLeft() || ProtoUtil.isEqual(frontLeft, other.frontLeft))
&& (!hasFrontRight() || ProtoUtil.isEqual(frontRight, other.frontRight))
&& (!hasRearLeft() || ProtoUtil.isEqual(rearLeft, other.rearLeft))
&& (!hasRearRight() || ProtoUtil.isEqual(rearRight, other.rearRight));
}
@Override
public void writeTo(final ProtoSink output) throws IOException {
if ((bitField0_ & 0x00000001) != 0) {
output.writeRawByte((byte) 9);
output.writeDoubleNoTag(frontLeft);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeRawByte((byte) 17);
output.writeDoubleNoTag(frontRight);
}
if ((bitField0_ & 0x00000004) != 0) {
output.writeRawByte((byte) 25);
output.writeDoubleNoTag(rearLeft);
}
if ((bitField0_ & 0x00000008) != 0) {
output.writeRawByte((byte) 33);
output.writeDoubleNoTag(rearRight);
}
}
@Override
protected int computeSerializedSize() {
int size = 0;
if ((bitField0_ & 0x00000001) != 0) {
size += 9;
}
if ((bitField0_ & 0x00000002) != 0) {
size += 9;
}
if ((bitField0_ & 0x00000004) != 0) {
size += 9;
}
if ((bitField0_ & 0x00000008) != 0) {
size += 9;
}
return size;
}
@Override
@SuppressWarnings("fallthrough")
public ProtobufMecanumDriveMotorVoltages mergeFrom(final ProtoSource input) throws IOException {
// Enabled Fall-Through Optimization (QuickBuffers)
int tag = input.readTag();
while (true) {
switch (tag) {
case 9: {
// frontLeft
frontLeft = input.readDouble();
bitField0_ |= 0x00000001;
tag = input.readTag();
if (tag != 17) {
break;
}
}
case 17: {
// frontRight
frontRight = input.readDouble();
bitField0_ |= 0x00000002;
tag = input.readTag();
if (tag != 25) {
break;
}
}
case 25: {
// rearLeft
rearLeft = input.readDouble();
bitField0_ |= 0x00000004;
tag = input.readTag();
if (tag != 33) {
break;
}
}
case 33: {
// rearRight
rearRight = input.readDouble();
bitField0_ |= 0x00000008;
tag = input.readTag();
if (tag != 0) {
break;
}
}
case 0: {
return this;
}
default: {
if (!input.skipField(tag)) {
return this;
}
tag = input.readTag();
break;
}
}
}
}
@Override
public void writeTo(final JsonSink output) throws IOException {
output.beginObject();
if ((bitField0_ & 0x00000001) != 0) {
output.writeDouble(FieldNames.frontLeft, frontLeft);
}
if ((bitField0_ & 0x00000002) != 0) {
output.writeDouble(FieldNames.frontRight, frontRight);
}
if ((bitField0_ & 0x00000004) != 0) {
output.writeDouble(FieldNames.rearLeft, rearLeft);
}
if ((bitField0_ & 0x00000008) != 0) {
output.writeDouble(FieldNames.rearRight, rearRight);
}
output.endObject();
}
@Override
public ProtobufMecanumDriveMotorVoltages mergeFrom(final JsonSource input) throws IOException {
if (!input.beginObject()) {
return this;
}
while (!input.isAtEnd()) {
switch (input.readFieldHash()) {
case 127514064:
case -324277155: {
if (input.isAtField(FieldNames.frontLeft)) {
if (!input.trySkipNullValue()) {
frontLeft = input.readDouble();
bitField0_ |= 0x00000001;
}
} else {
input.skipUnknownField();
}
break;
}
case -336370317:
case -1456996218: {
if (input.isAtField(FieldNames.frontRight)) {
if (!input.trySkipNullValue()) {
frontRight = input.readDouble();
bitField0_ |= 0x00000002;
}
} else {
input.skipUnknownField();
}
break;
}
case -854852661:
case -712874558: {
if (input.isAtField(FieldNames.rearLeft)) {
if (!input.trySkipNullValue()) {
rearLeft = input.readDouble();
bitField0_ |= 0x00000004;
}
} else {
input.skipUnknownField();
}
break;
}
case -724967720:
case -618613823: {
if (input.isAtField(FieldNames.rearRight)) {
if (!input.trySkipNullValue()) {
rearRight = input.readDouble();
bitField0_ |= 0x00000008;
}
} else {
input.skipUnknownField();
}
break;
}
default: {
input.skipUnknownField();
break;
}
}
}
input.endObject();
return this;
}
@Override
public ProtobufMecanumDriveMotorVoltages clone() {
return new ProtobufMecanumDriveMotorVoltages().copyFrom(this);
}
@Override
public boolean isEmpty() {
return ((bitField0_) == 0);
}
public static ProtobufMecanumDriveMotorVoltages parseFrom(final byte[] data) throws
InvalidProtocolBufferException {
return ProtoMessage.mergeFrom(new ProtobufMecanumDriveMotorVoltages(), data).checkInitialized();
}
public static ProtobufMecanumDriveMotorVoltages parseFrom(final ProtoSource input) throws
IOException {
return ProtoMessage.mergeFrom(new ProtobufMecanumDriveMotorVoltages(), input).checkInitialized();
}
public static ProtobufMecanumDriveMotorVoltages parseFrom(final JsonSource input) throws
IOException {
return ProtoMessage.mergeFrom(new ProtobufMecanumDriveMotorVoltages(), input).checkInitialized();
}
/**
* @return factory for creating ProtobufMecanumDriveMotorVoltages messages
*/
public static MessageFactory<ProtobufMecanumDriveMotorVoltages> getFactory() {
return ProtobufMecanumDriveMotorVoltagesFactory.INSTANCE;
}
/**
* @return this type's descriptor.
*/
public static Descriptors.Descriptor getDescriptor() {
return Kinematics.wpi_proto_ProtobufMecanumDriveMotorVoltages_descriptor;
}
private enum ProtobufMecanumDriveMotorVoltagesFactory implements MessageFactory<ProtobufMecanumDriveMotorVoltages> {
INSTANCE;
@Override
public ProtobufMecanumDriveMotorVoltages create() {
return ProtobufMecanumDriveMotorVoltages.newInstance();
}
}
/**
* Contains name constants used for serializing JSON
*/
static class FieldNames {
static final FieldName frontLeft = FieldName.forField("frontLeft", "front_left");
static final FieldName frontRight = FieldName.forField("frontRight", "front_right");
static final FieldName rearLeft = FieldName.forField("rearLeft", "rear_left");
static final FieldName rearRight = FieldName.forField("rearRight", "rear_right");
}
}
/**
* Protobuf type {@code ProtobufMecanumDriveWheelPositions}
*/

View File

@@ -78,283 +78,243 @@ static const uint8_t file_descriptor[] {
0x6f,0x74,0x6f,0x62,0x75,0x66,0x54,0x72,0x61,0x6e,
0x73,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x32,0x64,0x52,
0x09,0x72,0x65,0x61,0x72,0x52,0x69,0x67,0x68,0x74,
0x22,0x9f,0x01,0x0a,0x21,0x50,0x72,0x6f,0x74,0x6f,
0x22,0xa0,0x01,0x0a,0x22,0x50,0x72,0x6f,0x74,0x6f,
0x62,0x75,0x66,0x4d,0x65,0x63,0x61,0x6e,0x75,0x6d,
0x44,0x72,0x69,0x76,0x65,0x4d,0x6f,0x74,0x6f,0x72,
0x56,0x6f,0x6c,0x74,0x61,0x67,0x65,0x73,0x12,0x1d,
0x0a,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x5f,0x6c,0x65,
0x66,0x74,0x18,0x01,0x20,0x01,0x28,0x01,0x52,0x09,
0x66,0x72,0x6f,0x6e,0x74,0x4c,0x65,0x66,0x74,0x12,
0x1f,0x0a,0x0b,0x66,0x72,0x6f,0x6e,0x74,0x5f,0x72,
0x69,0x67,0x68,0x74,0x18,0x02,0x20,0x01,0x28,0x01,
0x52,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x52,0x69,0x67,
0x68,0x74,0x12,0x1b,0x0a,0x09,0x72,0x65,0x61,0x72,
0x5f,0x6c,0x65,0x66,0x74,0x18,0x03,0x20,0x01,0x28,
0x01,0x52,0x08,0x72,0x65,0x61,0x72,0x4c,0x65,0x66,
0x74,0x12,0x1d,0x0a,0x0a,0x72,0x65,0x61,0x72,0x5f,
0x72,0x69,0x67,0x68,0x74,0x18,0x04,0x20,0x01,0x28,
0x01,0x52,0x09,0x72,0x65,0x61,0x72,0x52,0x69,0x67,
0x68,0x74,0x22,0xa0,0x01,0x0a,0x22,0x50,0x72,0x6f,
0x74,0x6f,0x62,0x75,0x66,0x4d,0x65,0x63,0x61,0x6e,
0x75,0x6d,0x44,0x72,0x69,0x76,0x65,0x57,0x68,0x65,
0x65,0x6c,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
0x73,0x12,0x1d,0x0a,0x0a,0x66,0x72,0x6f,0x6e,0x74,
0x5f,0x6c,0x65,0x66,0x74,0x18,0x01,0x20,0x01,0x28,
0x01,0x52,0x09,0x66,0x72,0x6f,0x6e,0x74,0x4c,0x65,
0x66,0x74,0x12,0x1f,0x0a,0x0b,0x66,0x72,0x6f,0x6e,
0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x02,0x20,
0x01,0x28,0x01,0x52,0x0a,0x66,0x72,0x6f,0x6e,0x74,
0x52,0x69,0x67,0x68,0x74,0x12,0x1b,0x0a,0x09,0x72,
0x65,0x61,0x72,0x5f,0x6c,0x65,0x66,0x74,0x18,0x03,
0x20,0x01,0x28,0x01,0x52,0x08,0x72,0x65,0x61,0x72,
0x4c,0x65,0x66,0x74,0x12,0x1d,0x0a,0x0a,0x72,0x65,
0x61,0x72,0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x04,
0x20,0x01,0x28,0x01,0x52,0x09,0x72,0x65,0x61,0x72,
0x52,0x69,0x67,0x68,0x74,0x22,0x9d,0x01,0x0a,0x1f,
0x50,0x72,0x6f,0x74,0x6f,0x62,0x75,0x66,0x4d,0x65,
0x63,0x61,0x6e,0x75,0x6d,0x44,0x72,0x69,0x76,0x65,
0x57,0x68,0x65,0x65,0x6c,0x53,0x70,0x65,0x65,0x64,
0x73,0x12,0x1d,0x0a,0x0a,0x66,0x72,0x6f,0x6e,0x74,
0x5f,0x6c,0x65,0x66,0x74,0x18,0x01,0x20,0x01,0x28,
0x01,0x52,0x09,0x66,0x72,0x6f,0x6e,0x74,0x4c,0x65,
0x66,0x74,0x12,0x1f,0x0a,0x0b,0x66,0x72,0x6f,0x6e,
0x74,0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x02,0x20,
0x01,0x28,0x01,0x52,0x0a,0x66,0x72,0x6f,0x6e,0x74,
0x52,0x69,0x67,0x68,0x74,0x12,0x1b,0x0a,0x09,0x72,
0x65,0x61,0x72,0x5f,0x6c,0x65,0x66,0x74,0x18,0x03,
0x20,0x01,0x28,0x01,0x52,0x08,0x72,0x65,0x61,0x72,
0x4c,0x65,0x66,0x74,0x12,0x1d,0x0a,0x0a,0x72,0x65,
0x61,0x72,0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x04,
0x20,0x01,0x28,0x01,0x52,0x09,0x72,0x65,0x61,0x72,
0x52,0x69,0x67,0x68,0x74,0x22,0x5b,0x0a,0x1d,0x50,
0x72,0x6f,0x74,0x6f,0x62,0x75,0x66,0x53,0x77,0x65,
0x72,0x76,0x65,0x44,0x72,0x69,0x76,0x65,0x4b,0x69,
0x6e,0x65,0x6d,0x61,0x74,0x69,0x63,0x73,0x12,0x3a,
0x0a,0x07,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x18,
0x01,0x20,0x03,0x28,0x0b,0x32,0x20,0x2e,0x77,0x70,
0x69,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x2e,0x50,0x72,
0x6f,0x74,0x6f,0x62,0x75,0x66,0x54,0x72,0x61,0x6e,
0x73,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x32,0x64,0x52,
0x07,0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x22,0x6f,
0x0a,0x1c,0x50,0x72,0x6f,0x74,0x6f,0x62,0x75,0x66,
0x53,0x77,0x65,0x72,0x76,0x65,0x4d,0x6f,0x64,0x75,
0x6c,0x65,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
0x12,0x1a,0x0a,0x08,0x64,0x69,0x73,0x74,0x61,0x6e,
0x63,0x65,0x18,0x01,0x20,0x01,0x28,0x01,0x52,0x08,
0x64,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x12,0x33,
0x0a,0x05,0x61,0x6e,0x67,0x6c,0x65,0x18,0x02,0x20,
0x01,0x28,0x0b,0x32,0x1d,0x2e,0x77,0x70,0x69,0x2e,
0x44,0x72,0x69,0x76,0x65,0x57,0x68,0x65,0x65,0x6c,
0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x73,0x12,
0x1d,0x0a,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x5f,0x6c,
0x65,0x66,0x74,0x18,0x01,0x20,0x01,0x28,0x01,0x52,
0x09,0x66,0x72,0x6f,0x6e,0x74,0x4c,0x65,0x66,0x74,
0x12,0x1f,0x0a,0x0b,0x66,0x72,0x6f,0x6e,0x74,0x5f,
0x72,0x69,0x67,0x68,0x74,0x18,0x02,0x20,0x01,0x28,
0x01,0x52,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x52,0x69,
0x67,0x68,0x74,0x12,0x1b,0x0a,0x09,0x72,0x65,0x61,
0x72,0x5f,0x6c,0x65,0x66,0x74,0x18,0x03,0x20,0x01,
0x28,0x01,0x52,0x08,0x72,0x65,0x61,0x72,0x4c,0x65,
0x66,0x74,0x12,0x1d,0x0a,0x0a,0x72,0x65,0x61,0x72,
0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x04,0x20,0x01,
0x28,0x01,0x52,0x09,0x72,0x65,0x61,0x72,0x52,0x69,
0x67,0x68,0x74,0x22,0x9d,0x01,0x0a,0x1f,0x50,0x72,
0x6f,0x74,0x6f,0x62,0x75,0x66,0x4d,0x65,0x63,0x61,
0x6e,0x75,0x6d,0x44,0x72,0x69,0x76,0x65,0x57,0x68,
0x65,0x65,0x6c,0x53,0x70,0x65,0x65,0x64,0x73,0x12,
0x1d,0x0a,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x5f,0x6c,
0x65,0x66,0x74,0x18,0x01,0x20,0x01,0x28,0x01,0x52,
0x09,0x66,0x72,0x6f,0x6e,0x74,0x4c,0x65,0x66,0x74,
0x12,0x1f,0x0a,0x0b,0x66,0x72,0x6f,0x6e,0x74,0x5f,
0x72,0x69,0x67,0x68,0x74,0x18,0x02,0x20,0x01,0x28,
0x01,0x52,0x0a,0x66,0x72,0x6f,0x6e,0x74,0x52,0x69,
0x67,0x68,0x74,0x12,0x1b,0x0a,0x09,0x72,0x65,0x61,
0x72,0x5f,0x6c,0x65,0x66,0x74,0x18,0x03,0x20,0x01,
0x28,0x01,0x52,0x08,0x72,0x65,0x61,0x72,0x4c,0x65,
0x66,0x74,0x12,0x1d,0x0a,0x0a,0x72,0x65,0x61,0x72,
0x5f,0x72,0x69,0x67,0x68,0x74,0x18,0x04,0x20,0x01,
0x28,0x01,0x52,0x09,0x72,0x65,0x61,0x72,0x52,0x69,
0x67,0x68,0x74,0x22,0x5b,0x0a,0x1d,0x50,0x72,0x6f,
0x74,0x6f,0x62,0x75,0x66,0x53,0x77,0x65,0x72,0x76,
0x65,0x44,0x72,0x69,0x76,0x65,0x4b,0x69,0x6e,0x65,
0x6d,0x61,0x74,0x69,0x63,0x73,0x12,0x3a,0x0a,0x07,
0x6d,0x6f,0x64,0x75,0x6c,0x65,0x73,0x18,0x01,0x20,
0x03,0x28,0x0b,0x32,0x20,0x2e,0x77,0x70,0x69,0x2e,
0x70,0x72,0x6f,0x74,0x6f,0x2e,0x50,0x72,0x6f,0x74,
0x6f,0x62,0x75,0x66,0x52,0x6f,0x74,0x61,0x74,0x69,
0x6f,0x6e,0x32,0x64,0x52,0x05,0x61,0x6e,0x67,0x6c,
0x65,0x22,0x66,0x0a,0x19,0x50,0x72,0x6f,0x74,0x6f,
0x62,0x75,0x66,0x53,0x77,0x65,0x72,0x76,0x65,0x4d,
0x6f,0x64,0x75,0x6c,0x65,0x53,0x74,0x61,0x74,0x65,
0x12,0x14,0x0a,0x05,0x73,0x70,0x65,0x65,0x64,0x18,
0x01,0x20,0x01,0x28,0x01,0x52,0x05,0x73,0x70,0x65,
0x65,0x64,0x12,0x33,0x0a,0x05,0x61,0x6e,0x67,0x6c,
0x65,0x18,0x02,0x20,0x01,0x28,0x0b,0x32,0x1d,0x2e,
0x77,0x70,0x69,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x2e,
0x50,0x72,0x6f,0x74,0x6f,0x62,0x75,0x66,0x52,0x6f,
0x74,0x61,0x74,0x69,0x6f,0x6e,0x32,0x64,0x52,0x05,
0x61,0x6e,0x67,0x6c,0x65,0x42,0x1a,0x0a,0x18,0x65,
0x64,0x75,0x2e,0x77,0x70,0x69,0x2e,0x66,0x69,0x72,
0x73,0x74,0x2e,0x6d,0x61,0x74,0x68,0x2e,0x70,0x72,
0x6f,0x74,0x6f,0x4a,0x8d,0x0f,0x0a,0x06,0x12,0x04,
0x00,0x00,0x44,0x01,0x0a,0x08,0x0a,0x01,0x0c,0x12,
0x03,0x00,0x00,0x12,0x0a,0x08,0x0a,0x01,0x02,0x12,
0x03,0x02,0x00,0x12,0x0a,0x09,0x0a,0x02,0x03,0x00,
0x12,0x03,0x04,0x00,0x1a,0x0a,0x08,0x0a,0x01,0x08,
0x12,0x03,0x06,0x00,0x31,0x0a,0x09,0x0a,0x02,0x08,
0x01,0x12,0x03,0x06,0x00,0x31,0x0a,0x0a,0x0a,0x02,
0x04,0x00,0x12,0x04,0x08,0x00,0x0c,0x01,0x0a,0x0a,
0x0a,0x03,0x04,0x00,0x01,0x12,0x03,0x08,0x08,0x1d,
0x0a,0x0b,0x0a,0x04,0x04,0x00,0x02,0x00,0x12,0x03,
0x09,0x02,0x10,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,
0x00,0x05,0x12,0x03,0x09,0x02,0x08,0x0a,0x0c,0x0a,
0x05,0x04,0x00,0x02,0x00,0x01,0x12,0x03,0x09,0x09,
0x0b,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x00,0x03,
0x12,0x03,0x09,0x0e,0x0f,0x0a,0x0b,0x0a,0x04,0x04,
0x00,0x02,0x01,0x12,0x03,0x0a,0x02,0x10,0x0a,0x0c,
0x0a,0x05,0x04,0x00,0x02,0x01,0x05,0x12,0x03,0x0a,
0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x01,
0x01,0x12,0x03,0x0a,0x09,0x0b,0x0a,0x0c,0x0a,0x05,
0x04,0x00,0x02,0x01,0x03,0x12,0x03,0x0a,0x0e,0x0f,
0x0a,0x0b,0x0a,0x04,0x04,0x00,0x02,0x02,0x12,0x03,
0x0b,0x02,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,
0x02,0x05,0x12,0x03,0x0b,0x02,0x08,0x0a,0x0c,0x0a,
0x05,0x04,0x00,0x02,0x02,0x01,0x12,0x03,0x0b,0x09,
0x0e,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x02,0x03,
0x12,0x03,0x0b,0x11,0x12,0x0a,0x0a,0x0a,0x02,0x04,
0x01,0x12,0x04,0x0e,0x00,0x10,0x01,0x0a,0x0a,0x0a,
0x03,0x04,0x01,0x01,0x12,0x03,0x0e,0x08,0x2b,0x0a,
0x0b,0x0a,0x04,0x04,0x01,0x02,0x00,0x12,0x03,0x0f,
0x02,0x19,0x0a,0x0c,0x0a,0x05,0x04,0x01,0x02,0x00,
0x05,0x12,0x03,0x0f,0x02,0x08,0x0a,0x0c,0x0a,0x05,
0x04,0x01,0x02,0x00,0x01,0x12,0x03,0x0f,0x09,0x14,
0x0a,0x0c,0x0a,0x05,0x04,0x01,0x02,0x00,0x03,0x12,
0x03,0x0f,0x17,0x18,0x0a,0x0a,0x0a,0x02,0x04,0x02,
0x12,0x04,0x12,0x00,0x15,0x01,0x0a,0x0a,0x0a,0x03,
0x04,0x02,0x01,0x12,0x03,0x12,0x08,0x2c,0x0a,0x0b,
0x0a,0x04,0x04,0x02,0x02,0x00,0x12,0x03,0x13,0x02,
0x12,0x0a,0x0c,0x0a,0x05,0x04,0x02,0x02,0x00,0x05,
0x12,0x03,0x13,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x02,0x02,0x00,0x01,0x12,0x03,0x13,0x09,0x0d,0x0a,
0x0c,0x0a,0x05,0x04,0x02,0x02,0x00,0x03,0x12,0x03,
0x13,0x10,0x11,0x0a,0x0b,0x0a,0x04,0x04,0x02,0x02,
0x01,0x12,0x03,0x14,0x02,0x13,0x0a,0x0c,0x0a,0x05,
0x04,0x02,0x02,0x01,0x05,0x12,0x03,0x14,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x02,0x02,0x01,0x01,0x12,
0x03,0x14,0x09,0x0e,0x0a,0x0c,0x0a,0x05,0x04,0x02,
0x02,0x01,0x03,0x12,0x03,0x14,0x11,0x12,0x0a,0x0a,
0x0a,0x02,0x04,0x03,0x12,0x04,0x17,0x00,0x1a,0x01,
0x0a,0x0a,0x0a,0x03,0x04,0x03,0x01,0x12,0x03,0x17,
0x08,0x2f,0x0a,0x0b,0x0a,0x04,0x04,0x03,0x02,0x00,
0x12,0x03,0x18,0x02,0x12,0x0a,0x0c,0x0a,0x05,0x04,
0x03,0x02,0x00,0x05,0x12,0x03,0x18,0x02,0x08,0x0a,
0x0c,0x0a,0x05,0x04,0x03,0x02,0x00,0x01,0x12,0x03,
0x18,0x09,0x0d,0x0a,0x0c,0x0a,0x05,0x04,0x03,0x02,
0x00,0x03,0x12,0x03,0x18,0x10,0x11,0x0a,0x0b,0x0a,
0x04,0x04,0x03,0x02,0x01,0x12,0x03,0x19,0x02,0x13,
0x0a,0x0c,0x0a,0x05,0x04,0x03,0x02,0x01,0x05,0x12,
0x03,0x19,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x03,
0x02,0x01,0x01,0x12,0x03,0x19,0x09,0x0e,0x0a,0x0c,
0x0a,0x05,0x04,0x03,0x02,0x01,0x03,0x12,0x03,0x19,
0x11,0x12,0x0a,0x0a,0x0a,0x02,0x04,0x04,0x12,0x04,
0x1c,0x00,0x21,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x04,
0x01,0x12,0x03,0x1c,0x08,0x26,0x0a,0x0b,0x0a,0x04,
0x04,0x04,0x02,0x00,0x12,0x03,0x1d,0x02,0x27,0x0a,
0x0c,0x0a,0x05,0x04,0x04,0x02,0x00,0x06,0x12,0x03,
0x1d,0x02,0x17,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,
0x00,0x01,0x12,0x03,0x1d,0x18,0x22,0x0a,0x0c,0x0a,
0x05,0x04,0x04,0x02,0x00,0x03,0x12,0x03,0x1d,0x25,
0x26,0x0a,0x0b,0x0a,0x04,0x04,0x04,0x02,0x01,0x12,
0x03,0x1e,0x02,0x28,0x0a,0x0c,0x0a,0x05,0x04,0x04,
0x02,0x01,0x06,0x12,0x03,0x1e,0x02,0x17,0x0a,0x0c,
0x0a,0x05,0x04,0x04,0x02,0x01,0x01,0x12,0x03,0x1e,
0x18,0x23,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x01,
0x03,0x12,0x03,0x1e,0x26,0x27,0x0a,0x0b,0x0a,0x04,
0x04,0x04,0x02,0x02,0x12,0x03,0x1f,0x02,0x26,0x0a,
0x0c,0x0a,0x05,0x04,0x04,0x02,0x02,0x06,0x12,0x03,
0x1f,0x02,0x17,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,
0x02,0x01,0x12,0x03,0x1f,0x18,0x21,0x0a,0x0c,0x0a,
0x05,0x04,0x04,0x02,0x02,0x03,0x12,0x03,0x1f,0x24,
0x25,0x0a,0x0b,0x0a,0x04,0x04,0x04,0x02,0x03,0x12,
0x03,0x20,0x02,0x27,0x0a,0x0c,0x0a,0x05,0x04,0x04,
0x02,0x03,0x06,0x12,0x03,0x20,0x02,0x17,0x0a,0x0c,
0x0a,0x05,0x04,0x04,0x02,0x03,0x01,0x12,0x03,0x20,
0x18,0x22,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x03,
0x03,0x12,0x03,0x20,0x25,0x26,0x0a,0x0a,0x0a,0x02,
0x04,0x05,0x12,0x04,0x23,0x00,0x28,0x01,0x0a,0x0a,
0x0a,0x03,0x04,0x05,0x01,0x12,0x03,0x23,0x08,0x29,
0x0a,0x0b,0x0a,0x04,0x04,0x05,0x02,0x00,0x12,0x03,
0x24,0x02,0x18,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,
0x00,0x05,0x12,0x03,0x24,0x02,0x08,0x0a,0x0c,0x0a,
0x05,0x04,0x05,0x02,0x00,0x01,0x12,0x03,0x24,0x09,
0x13,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x00,0x03,
0x12,0x03,0x24,0x16,0x17,0x0a,0x0b,0x0a,0x04,0x04,
0x05,0x02,0x01,0x12,0x03,0x25,0x02,0x19,0x0a,0x0c,
0x0a,0x05,0x04,0x05,0x02,0x01,0x05,0x12,0x03,0x25,
0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x01,
0x01,0x12,0x03,0x25,0x09,0x14,0x0a,0x0c,0x0a,0x05,
0x04,0x05,0x02,0x01,0x03,0x12,0x03,0x25,0x17,0x18,
0x0a,0x0b,0x0a,0x04,0x04,0x05,0x02,0x02,0x12,0x03,
0x26,0x02,0x17,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,
0x02,0x05,0x12,0x03,0x26,0x02,0x08,0x0a,0x0c,0x0a,
0x05,0x04,0x05,0x02,0x02,0x01,0x12,0x03,0x26,0x09,
0x12,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x02,0x03,
0x12,0x03,0x26,0x15,0x16,0x0a,0x0b,0x0a,0x04,0x04,
0x05,0x02,0x03,0x12,0x03,0x27,0x02,0x18,0x0a,0x0c,
0x0a,0x05,0x04,0x05,0x02,0x03,0x05,0x12,0x03,0x27,
0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x03,
0x01,0x12,0x03,0x27,0x09,0x13,0x0a,0x0c,0x0a,0x05,
0x04,0x05,0x02,0x03,0x03,0x12,0x03,0x27,0x16,0x17,
0x0a,0x0a,0x0a,0x02,0x04,0x06,0x12,0x04,0x2a,0x00,
0x2f,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x06,0x01,0x12,
0x03,0x2a,0x08,0x2a,0x0a,0x0b,0x0a,0x04,0x04,0x06,
0x02,0x00,0x12,0x03,0x2b,0x02,0x18,0x0a,0x0c,0x0a,
0x05,0x04,0x06,0x02,0x00,0x05,0x12,0x03,0x2b,0x02,
0x08,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x00,0x01,
0x12,0x03,0x2b,0x09,0x13,0x0a,0x0c,0x0a,0x05,0x04,
0x06,0x02,0x00,0x03,0x12,0x03,0x2b,0x16,0x17,0x0a,
0x0b,0x0a,0x04,0x04,0x06,0x02,0x01,0x12,0x03,0x2c,
0x02,0x19,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x01,
0x05,0x12,0x03,0x2c,0x02,0x08,0x0a,0x0c,0x0a,0x05,
0x04,0x06,0x02,0x01,0x01,0x12,0x03,0x2c,0x09,0x14,
0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x01,0x03,0x12,
0x03,0x2c,0x17,0x18,0x0a,0x0b,0x0a,0x04,0x04,0x06,
0x02,0x02,0x12,0x03,0x2d,0x02,0x17,0x0a,0x0c,0x0a,
0x05,0x04,0x06,0x02,0x02,0x05,0x12,0x03,0x2d,0x02,
0x08,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x02,0x01,
0x12,0x03,0x2d,0x09,0x12,0x0a,0x0c,0x0a,0x05,0x04,
0x06,0x02,0x02,0x03,0x12,0x03,0x2d,0x15,0x16,0x0a,
0x0b,0x0a,0x04,0x04,0x06,0x02,0x03,0x12,0x03,0x2e,
0x02,0x18,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x03,
0x05,0x12,0x03,0x2e,0x02,0x08,0x0a,0x0c,0x0a,0x05,
0x04,0x06,0x02,0x03,0x01,0x12,0x03,0x2e,0x09,0x13,
0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x03,0x03,0x12,
0x03,0x2e,0x16,0x17,0x0a,0x0a,0x0a,0x02,0x04,0x07,
0x12,0x04,0x31,0x00,0x36,0x01,0x0a,0x0a,0x0a,0x03,
0x04,0x07,0x01,0x12,0x03,0x31,0x08,0x27,0x0a,0x0b,
0x0a,0x04,0x04,0x07,0x02,0x00,0x12,0x03,0x32,0x02,
0x18,0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,0x00,0x05,
0x12,0x03,0x32,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x07,0x02,0x00,0x01,0x12,0x03,0x32,0x09,0x13,0x0a,
0x0c,0x0a,0x05,0x04,0x07,0x02,0x00,0x03,0x12,0x03,
0x32,0x16,0x17,0x0a,0x0b,0x0a,0x04,0x04,0x07,0x02,
0x01,0x12,0x03,0x33,0x02,0x19,0x0a,0x0c,0x0a,0x05,
0x04,0x07,0x02,0x01,0x05,0x12,0x03,0x33,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,0x01,0x01,0x12,
0x03,0x33,0x09,0x14,0x0a,0x0c,0x0a,0x05,0x04,0x07,
0x02,0x01,0x03,0x12,0x03,0x33,0x17,0x18,0x0a,0x0b,
0x0a,0x04,0x04,0x07,0x02,0x02,0x12,0x03,0x34,0x02,
0x17,0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,0x02,0x05,
0x12,0x03,0x34,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x07,0x02,0x02,0x01,0x12,0x03,0x34,0x09,0x12,0x0a,
0x0c,0x0a,0x05,0x04,0x07,0x02,0x02,0x03,0x12,0x03,
0x34,0x15,0x16,0x0a,0x0b,0x0a,0x04,0x04,0x07,0x02,
0x03,0x12,0x03,0x35,0x02,0x18,0x0a,0x0c,0x0a,0x05,
0x04,0x07,0x02,0x03,0x05,0x12,0x03,0x35,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,0x03,0x01,0x12,
0x03,0x35,0x09,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x07,
0x02,0x03,0x03,0x12,0x03,0x35,0x16,0x17,0x0a,0x0a,
0x0a,0x02,0x04,0x08,0x12,0x04,0x38,0x00,0x3a,0x01,
0x0a,0x0a,0x0a,0x03,0x04,0x08,0x01,0x12,0x03,0x38,
0x08,0x25,0x0a,0x0b,0x0a,0x04,0x04,0x08,0x02,0x00,
0x12,0x03,0x39,0x02,0x2d,0x0a,0x0c,0x0a,0x05,0x04,
0x08,0x02,0x00,0x04,0x12,0x03,0x39,0x02,0x0a,0x0a,
0x0c,0x0a,0x05,0x04,0x08,0x02,0x00,0x06,0x12,0x03,
0x39,0x0b,0x20,0x0a,0x0c,0x0a,0x05,0x04,0x08,0x02,
0x00,0x01,0x12,0x03,0x39,0x21,0x28,0x0a,0x0c,0x0a,
0x05,0x04,0x08,0x02,0x00,0x03,0x12,0x03,0x39,0x2b,
0x2c,0x0a,0x0a,0x0a,0x02,0x04,0x09,0x12,0x04,0x3c,
0x00,0x3f,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x09,0x01,
0x12,0x03,0x3c,0x08,0x24,0x0a,0x0b,0x0a,0x04,0x04,
0x09,0x02,0x00,0x12,0x03,0x3d,0x02,0x16,0x0a,0x0c,
0x0a,0x05,0x04,0x09,0x02,0x00,0x05,0x12,0x03,0x3d,
0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x09,0x02,0x00,
0x01,0x12,0x03,0x3d,0x09,0x11,0x0a,0x0c,0x0a,0x05,
0x04,0x09,0x02,0x00,0x03,0x12,0x03,0x3d,0x14,0x15,
0x0a,0x0b,0x0a,0x04,0x04,0x09,0x02,0x01,0x12,0x03,
0x3e,0x02,0x1f,0x0a,0x0c,0x0a,0x05,0x04,0x09,0x02,
0x01,0x06,0x12,0x03,0x3e,0x02,0x14,0x0a,0x0c,0x0a,
0x05,0x04,0x09,0x02,0x01,0x01,0x12,0x03,0x3e,0x15,
0x1a,0x0a,0x0c,0x0a,0x05,0x04,0x09,0x02,0x01,0x03,
0x12,0x03,0x3e,0x1d,0x1e,0x0a,0x0a,0x0a,0x02,0x04,
0x0a,0x12,0x04,0x41,0x00,0x44,0x01,0x0a,0x0a,0x0a,
0x03,0x04,0x0a,0x01,0x12,0x03,0x41,0x08,0x21,0x0a,
0x0b,0x0a,0x04,0x04,0x0a,0x02,0x00,0x12,0x03,0x42,
0x02,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x0a,0x02,0x00,
0x05,0x12,0x03,0x42,0x02,0x08,0x0a,0x0c,0x0a,0x05,
0x04,0x0a,0x02,0x00,0x01,0x12,0x03,0x42,0x09,0x0e,
0x0a,0x0c,0x0a,0x05,0x04,0x0a,0x02,0x00,0x03,0x12,
0x03,0x42,0x11,0x12,0x0a,0x0b,0x0a,0x04,0x04,0x0a,
0x02,0x01,0x12,0x03,0x43,0x02,0x1f,0x0a,0x0c,0x0a,
0x05,0x04,0x0a,0x02,0x01,0x06,0x12,0x03,0x43,0x02,
0x14,0x0a,0x0c,0x0a,0x05,0x04,0x0a,0x02,0x01,0x01,
0x12,0x03,0x43,0x15,0x1a,0x0a,0x0c,0x0a,0x05,0x04,
0x0a,0x02,0x01,0x03,0x12,0x03,0x43,0x1d,0x1e,0x62,
0x06,0x70,0x72,0x6f,0x74,0x6f,0x33,
0x6f,0x62,0x75,0x66,0x54,0x72,0x61,0x6e,0x73,0x6c,
0x61,0x74,0x69,0x6f,0x6e,0x32,0x64,0x52,0x07,0x6d,
0x6f,0x64,0x75,0x6c,0x65,0x73,0x22,0x6f,0x0a,0x1c,
0x50,0x72,0x6f,0x74,0x6f,0x62,0x75,0x66,0x53,0x77,
0x65,0x72,0x76,0x65,0x4d,0x6f,0x64,0x75,0x6c,0x65,
0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x12,0x1a,
0x0a,0x08,0x64,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,
0x18,0x01,0x20,0x01,0x28,0x01,0x52,0x08,0x64,0x69,
0x73,0x74,0x61,0x6e,0x63,0x65,0x12,0x33,0x0a,0x05,
0x61,0x6e,0x67,0x6c,0x65,0x18,0x02,0x20,0x01,0x28,
0x0b,0x32,0x1d,0x2e,0x77,0x70,0x69,0x2e,0x70,0x72,
0x6f,0x74,0x6f,0x2e,0x50,0x72,0x6f,0x74,0x6f,0x62,
0x75,0x66,0x52,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,
0x32,0x64,0x52,0x05,0x61,0x6e,0x67,0x6c,0x65,0x22,
0x66,0x0a,0x19,0x50,0x72,0x6f,0x74,0x6f,0x62,0x75,
0x66,0x53,0x77,0x65,0x72,0x76,0x65,0x4d,0x6f,0x64,
0x75,0x6c,0x65,0x53,0x74,0x61,0x74,0x65,0x12,0x14,
0x0a,0x05,0x73,0x70,0x65,0x65,0x64,0x18,0x01,0x20,
0x01,0x28,0x01,0x52,0x05,0x73,0x70,0x65,0x65,0x64,
0x12,0x33,0x0a,0x05,0x61,0x6e,0x67,0x6c,0x65,0x18,
0x02,0x20,0x01,0x28,0x0b,0x32,0x1d,0x2e,0x77,0x70,
0x69,0x2e,0x70,0x72,0x6f,0x74,0x6f,0x2e,0x50,0x72,
0x6f,0x74,0x6f,0x62,0x75,0x66,0x52,0x6f,0x74,0x61,
0x74,0x69,0x6f,0x6e,0x32,0x64,0x52,0x05,0x61,0x6e,
0x67,0x6c,0x65,0x42,0x1a,0x0a,0x18,0x65,0x64,0x75,
0x2e,0x77,0x70,0x69,0x2e,0x66,0x69,0x72,0x73,0x74,
0x2e,0x6d,0x61,0x74,0x68,0x2e,0x70,0x72,0x6f,0x74,
0x6f,0x4a,0x99,0x0d,0x0a,0x06,0x12,0x04,0x00,0x00,
0x3d,0x01,0x0a,0x08,0x0a,0x01,0x0c,0x12,0x03,0x00,
0x00,0x12,0x0a,0x08,0x0a,0x01,0x02,0x12,0x03,0x02,
0x00,0x12,0x0a,0x09,0x0a,0x02,0x03,0x00,0x12,0x03,
0x04,0x00,0x1a,0x0a,0x08,0x0a,0x01,0x08,0x12,0x03,
0x06,0x00,0x31,0x0a,0x09,0x0a,0x02,0x08,0x01,0x12,
0x03,0x06,0x00,0x31,0x0a,0x0a,0x0a,0x02,0x04,0x00,
0x12,0x04,0x08,0x00,0x0c,0x01,0x0a,0x0a,0x0a,0x03,
0x04,0x00,0x01,0x12,0x03,0x08,0x08,0x1d,0x0a,0x0b,
0x0a,0x04,0x04,0x00,0x02,0x00,0x12,0x03,0x09,0x02,
0x10,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x00,0x05,
0x12,0x03,0x09,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x00,0x02,0x00,0x01,0x12,0x03,0x09,0x09,0x0b,0x0a,
0x0c,0x0a,0x05,0x04,0x00,0x02,0x00,0x03,0x12,0x03,
0x09,0x0e,0x0f,0x0a,0x0b,0x0a,0x04,0x04,0x00,0x02,
0x01,0x12,0x03,0x0a,0x02,0x10,0x0a,0x0c,0x0a,0x05,
0x04,0x00,0x02,0x01,0x05,0x12,0x03,0x0a,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x01,0x01,0x12,
0x03,0x0a,0x09,0x0b,0x0a,0x0c,0x0a,0x05,0x04,0x00,
0x02,0x01,0x03,0x12,0x03,0x0a,0x0e,0x0f,0x0a,0x0b,
0x0a,0x04,0x04,0x00,0x02,0x02,0x12,0x03,0x0b,0x02,
0x13,0x0a,0x0c,0x0a,0x05,0x04,0x00,0x02,0x02,0x05,
0x12,0x03,0x0b,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x00,0x02,0x02,0x01,0x12,0x03,0x0b,0x09,0x0e,0x0a,
0x0c,0x0a,0x05,0x04,0x00,0x02,0x02,0x03,0x12,0x03,
0x0b,0x11,0x12,0x0a,0x0a,0x0a,0x02,0x04,0x01,0x12,
0x04,0x0e,0x00,0x10,0x01,0x0a,0x0a,0x0a,0x03,0x04,
0x01,0x01,0x12,0x03,0x0e,0x08,0x2b,0x0a,0x0b,0x0a,
0x04,0x04,0x01,0x02,0x00,0x12,0x03,0x0f,0x02,0x19,
0x0a,0x0c,0x0a,0x05,0x04,0x01,0x02,0x00,0x05,0x12,
0x03,0x0f,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x01,
0x02,0x00,0x01,0x12,0x03,0x0f,0x09,0x14,0x0a,0x0c,
0x0a,0x05,0x04,0x01,0x02,0x00,0x03,0x12,0x03,0x0f,
0x17,0x18,0x0a,0x0a,0x0a,0x02,0x04,0x02,0x12,0x04,
0x12,0x00,0x15,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x02,
0x01,0x12,0x03,0x12,0x08,0x2c,0x0a,0x0b,0x0a,0x04,
0x04,0x02,0x02,0x00,0x12,0x03,0x13,0x02,0x12,0x0a,
0x0c,0x0a,0x05,0x04,0x02,0x02,0x00,0x05,0x12,0x03,
0x13,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x02,0x02,
0x00,0x01,0x12,0x03,0x13,0x09,0x0d,0x0a,0x0c,0x0a,
0x05,0x04,0x02,0x02,0x00,0x03,0x12,0x03,0x13,0x10,
0x11,0x0a,0x0b,0x0a,0x04,0x04,0x02,0x02,0x01,0x12,
0x03,0x14,0x02,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x02,
0x02,0x01,0x05,0x12,0x03,0x14,0x02,0x08,0x0a,0x0c,
0x0a,0x05,0x04,0x02,0x02,0x01,0x01,0x12,0x03,0x14,
0x09,0x0e,0x0a,0x0c,0x0a,0x05,0x04,0x02,0x02,0x01,
0x03,0x12,0x03,0x14,0x11,0x12,0x0a,0x0a,0x0a,0x02,
0x04,0x03,0x12,0x04,0x17,0x00,0x1a,0x01,0x0a,0x0a,
0x0a,0x03,0x04,0x03,0x01,0x12,0x03,0x17,0x08,0x2f,
0x0a,0x0b,0x0a,0x04,0x04,0x03,0x02,0x00,0x12,0x03,
0x18,0x02,0x12,0x0a,0x0c,0x0a,0x05,0x04,0x03,0x02,
0x00,0x05,0x12,0x03,0x18,0x02,0x08,0x0a,0x0c,0x0a,
0x05,0x04,0x03,0x02,0x00,0x01,0x12,0x03,0x18,0x09,
0x0d,0x0a,0x0c,0x0a,0x05,0x04,0x03,0x02,0x00,0x03,
0x12,0x03,0x18,0x10,0x11,0x0a,0x0b,0x0a,0x04,0x04,
0x03,0x02,0x01,0x12,0x03,0x19,0x02,0x13,0x0a,0x0c,
0x0a,0x05,0x04,0x03,0x02,0x01,0x05,0x12,0x03,0x19,
0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x03,0x02,0x01,
0x01,0x12,0x03,0x19,0x09,0x0e,0x0a,0x0c,0x0a,0x05,
0x04,0x03,0x02,0x01,0x03,0x12,0x03,0x19,0x11,0x12,
0x0a,0x0a,0x0a,0x02,0x04,0x04,0x12,0x04,0x1c,0x00,
0x21,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x04,0x01,0x12,
0x03,0x1c,0x08,0x26,0x0a,0x0b,0x0a,0x04,0x04,0x04,
0x02,0x00,0x12,0x03,0x1d,0x02,0x27,0x0a,0x0c,0x0a,
0x05,0x04,0x04,0x02,0x00,0x06,0x12,0x03,0x1d,0x02,
0x17,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x00,0x01,
0x12,0x03,0x1d,0x18,0x22,0x0a,0x0c,0x0a,0x05,0x04,
0x04,0x02,0x00,0x03,0x12,0x03,0x1d,0x25,0x26,0x0a,
0x0b,0x0a,0x04,0x04,0x04,0x02,0x01,0x12,0x03,0x1e,
0x02,0x28,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x01,
0x06,0x12,0x03,0x1e,0x02,0x17,0x0a,0x0c,0x0a,0x05,
0x04,0x04,0x02,0x01,0x01,0x12,0x03,0x1e,0x18,0x23,
0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x01,0x03,0x12,
0x03,0x1e,0x26,0x27,0x0a,0x0b,0x0a,0x04,0x04,0x04,
0x02,0x02,0x12,0x03,0x1f,0x02,0x26,0x0a,0x0c,0x0a,
0x05,0x04,0x04,0x02,0x02,0x06,0x12,0x03,0x1f,0x02,
0x17,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x02,0x01,
0x12,0x03,0x1f,0x18,0x21,0x0a,0x0c,0x0a,0x05,0x04,
0x04,0x02,0x02,0x03,0x12,0x03,0x1f,0x24,0x25,0x0a,
0x0b,0x0a,0x04,0x04,0x04,0x02,0x03,0x12,0x03,0x20,
0x02,0x27,0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x03,
0x06,0x12,0x03,0x20,0x02,0x17,0x0a,0x0c,0x0a,0x05,
0x04,0x04,0x02,0x03,0x01,0x12,0x03,0x20,0x18,0x22,
0x0a,0x0c,0x0a,0x05,0x04,0x04,0x02,0x03,0x03,0x12,
0x03,0x20,0x25,0x26,0x0a,0x0a,0x0a,0x02,0x04,0x05,
0x12,0x04,0x23,0x00,0x28,0x01,0x0a,0x0a,0x0a,0x03,
0x04,0x05,0x01,0x12,0x03,0x23,0x08,0x2a,0x0a,0x0b,
0x0a,0x04,0x04,0x05,0x02,0x00,0x12,0x03,0x24,0x02,
0x18,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x00,0x05,
0x12,0x03,0x24,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x05,0x02,0x00,0x01,0x12,0x03,0x24,0x09,0x13,0x0a,
0x0c,0x0a,0x05,0x04,0x05,0x02,0x00,0x03,0x12,0x03,
0x24,0x16,0x17,0x0a,0x0b,0x0a,0x04,0x04,0x05,0x02,
0x01,0x12,0x03,0x25,0x02,0x19,0x0a,0x0c,0x0a,0x05,
0x04,0x05,0x02,0x01,0x05,0x12,0x03,0x25,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x01,0x01,0x12,
0x03,0x25,0x09,0x14,0x0a,0x0c,0x0a,0x05,0x04,0x05,
0x02,0x01,0x03,0x12,0x03,0x25,0x17,0x18,0x0a,0x0b,
0x0a,0x04,0x04,0x05,0x02,0x02,0x12,0x03,0x26,0x02,
0x17,0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x02,0x05,
0x12,0x03,0x26,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,
0x05,0x02,0x02,0x01,0x12,0x03,0x26,0x09,0x12,0x0a,
0x0c,0x0a,0x05,0x04,0x05,0x02,0x02,0x03,0x12,0x03,
0x26,0x15,0x16,0x0a,0x0b,0x0a,0x04,0x04,0x05,0x02,
0x03,0x12,0x03,0x27,0x02,0x18,0x0a,0x0c,0x0a,0x05,
0x04,0x05,0x02,0x03,0x05,0x12,0x03,0x27,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x05,0x02,0x03,0x01,0x12,
0x03,0x27,0x09,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x05,
0x02,0x03,0x03,0x12,0x03,0x27,0x16,0x17,0x0a,0x0a,
0x0a,0x02,0x04,0x06,0x12,0x04,0x2a,0x00,0x2f,0x01,
0x0a,0x0a,0x0a,0x03,0x04,0x06,0x01,0x12,0x03,0x2a,
0x08,0x27,0x0a,0x0b,0x0a,0x04,0x04,0x06,0x02,0x00,
0x12,0x03,0x2b,0x02,0x18,0x0a,0x0c,0x0a,0x05,0x04,
0x06,0x02,0x00,0x05,0x12,0x03,0x2b,0x02,0x08,0x0a,
0x0c,0x0a,0x05,0x04,0x06,0x02,0x00,0x01,0x12,0x03,
0x2b,0x09,0x13,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,
0x00,0x03,0x12,0x03,0x2b,0x16,0x17,0x0a,0x0b,0x0a,
0x04,0x04,0x06,0x02,0x01,0x12,0x03,0x2c,0x02,0x19,
0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x01,0x05,0x12,
0x03,0x2c,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x06,
0x02,0x01,0x01,0x12,0x03,0x2c,0x09,0x14,0x0a,0x0c,
0x0a,0x05,0x04,0x06,0x02,0x01,0x03,0x12,0x03,0x2c,
0x17,0x18,0x0a,0x0b,0x0a,0x04,0x04,0x06,0x02,0x02,
0x12,0x03,0x2d,0x02,0x17,0x0a,0x0c,0x0a,0x05,0x04,
0x06,0x02,0x02,0x05,0x12,0x03,0x2d,0x02,0x08,0x0a,
0x0c,0x0a,0x05,0x04,0x06,0x02,0x02,0x01,0x12,0x03,
0x2d,0x09,0x12,0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,
0x02,0x03,0x12,0x03,0x2d,0x15,0x16,0x0a,0x0b,0x0a,
0x04,0x04,0x06,0x02,0x03,0x12,0x03,0x2e,0x02,0x18,
0x0a,0x0c,0x0a,0x05,0x04,0x06,0x02,0x03,0x05,0x12,
0x03,0x2e,0x02,0x08,0x0a,0x0c,0x0a,0x05,0x04,0x06,
0x02,0x03,0x01,0x12,0x03,0x2e,0x09,0x13,0x0a,0x0c,
0x0a,0x05,0x04,0x06,0x02,0x03,0x03,0x12,0x03,0x2e,
0x16,0x17,0x0a,0x0a,0x0a,0x02,0x04,0x07,0x12,0x04,
0x31,0x00,0x33,0x01,0x0a,0x0a,0x0a,0x03,0x04,0x07,
0x01,0x12,0x03,0x31,0x08,0x25,0x0a,0x0b,0x0a,0x04,
0x04,0x07,0x02,0x00,0x12,0x03,0x32,0x02,0x2d,0x0a,
0x0c,0x0a,0x05,0x04,0x07,0x02,0x00,0x04,0x12,0x03,
0x32,0x02,0x0a,0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,
0x00,0x06,0x12,0x03,0x32,0x0b,0x20,0x0a,0x0c,0x0a,
0x05,0x04,0x07,0x02,0x00,0x01,0x12,0x03,0x32,0x21,
0x28,0x0a,0x0c,0x0a,0x05,0x04,0x07,0x02,0x00,0x03,
0x12,0x03,0x32,0x2b,0x2c,0x0a,0x0a,0x0a,0x02,0x04,
0x08,0x12,0x04,0x35,0x00,0x38,0x01,0x0a,0x0a,0x0a,
0x03,0x04,0x08,0x01,0x12,0x03,0x35,0x08,0x24,0x0a,
0x0b,0x0a,0x04,0x04,0x08,0x02,0x00,0x12,0x03,0x36,
0x02,0x16,0x0a,0x0c,0x0a,0x05,0x04,0x08,0x02,0x00,
0x05,0x12,0x03,0x36,0x02,0x08,0x0a,0x0c,0x0a,0x05,
0x04,0x08,0x02,0x00,0x01,0x12,0x03,0x36,0x09,0x11,
0x0a,0x0c,0x0a,0x05,0x04,0x08,0x02,0x00,0x03,0x12,
0x03,0x36,0x14,0x15,0x0a,0x0b,0x0a,0x04,0x04,0x08,
0x02,0x01,0x12,0x03,0x37,0x02,0x1f,0x0a,0x0c,0x0a,
0x05,0x04,0x08,0x02,0x01,0x06,0x12,0x03,0x37,0x02,
0x14,0x0a,0x0c,0x0a,0x05,0x04,0x08,0x02,0x01,0x01,
0x12,0x03,0x37,0x15,0x1a,0x0a,0x0c,0x0a,0x05,0x04,
0x08,0x02,0x01,0x03,0x12,0x03,0x37,0x1d,0x1e,0x0a,
0x0a,0x0a,0x02,0x04,0x09,0x12,0x04,0x3a,0x00,0x3d,
0x01,0x0a,0x0a,0x0a,0x03,0x04,0x09,0x01,0x12,0x03,
0x3a,0x08,0x21,0x0a,0x0b,0x0a,0x04,0x04,0x09,0x02,
0x00,0x12,0x03,0x3b,0x02,0x13,0x0a,0x0c,0x0a,0x05,
0x04,0x09,0x02,0x00,0x05,0x12,0x03,0x3b,0x02,0x08,
0x0a,0x0c,0x0a,0x05,0x04,0x09,0x02,0x00,0x01,0x12,
0x03,0x3b,0x09,0x0e,0x0a,0x0c,0x0a,0x05,0x04,0x09,
0x02,0x00,0x03,0x12,0x03,0x3b,0x11,0x12,0x0a,0x0b,
0x0a,0x04,0x04,0x09,0x02,0x01,0x12,0x03,0x3c,0x02,
0x1f,0x0a,0x0c,0x0a,0x05,0x04,0x09,0x02,0x01,0x06,
0x12,0x03,0x3c,0x02,0x14,0x0a,0x0c,0x0a,0x05,0x04,
0x09,0x02,0x01,0x01,0x12,0x03,0x3c,0x15,0x1a,0x0a,
0x0c,0x0a,0x05,0x04,0x09,0x02,0x01,0x03,0x12,0x03,
0x3c,0x1d,0x1e,0x62,0x06,0x70,0x72,0x6f,0x74,0x6f,
0x33,
};
static const char file_name[] = "kinematics.proto";
static const char wpi_proto_ProtobufChassisSpeeds_name[] = "wpi.proto.ProtobufChassisSpeeds";
@@ -387,12 +347,6 @@ pb_filedesc_t wpi_proto_ProtobufMecanumDriveKinematics::file_descriptor(void) no
PB_BIND(wpi_proto_ProtobufMecanumDriveKinematics, wpi_proto_ProtobufMecanumDriveKinematics, AUTO)
static const char wpi_proto_ProtobufMecanumDriveMotorVoltages_name[] = "wpi.proto.ProtobufMecanumDriveMotorVoltages";
std::string_view wpi_proto_ProtobufMecanumDriveMotorVoltages::msg_name(void) noexcept { return wpi_proto_ProtobufMecanumDriveMotorVoltages_name; }
pb_filedesc_t wpi_proto_ProtobufMecanumDriveMotorVoltages::file_descriptor(void) noexcept { return {::file_name, ::file_descriptor}; }
PB_BIND(wpi_proto_ProtobufMecanumDriveMotorVoltages, wpi_proto_ProtobufMecanumDriveMotorVoltages, AUTO)
static const char wpi_proto_ProtobufMecanumDriveWheelPositions_name[] = "wpi.proto.ProtobufMecanumDriveWheelPositions";
std::string_view wpi_proto_ProtobufMecanumDriveWheelPositions::msg_name(void) noexcept { return wpi_proto_ProtobufMecanumDriveWheelPositions_name; }
pb_filedesc_t wpi_proto_ProtobufMecanumDriveWheelPositions::file_descriptor(void) noexcept { return {::file_name, ::file_descriptor}; }

View File

@@ -63,17 +63,6 @@ typedef struct _wpi_proto_ProtobufMecanumDriveKinematics {
pb_callback_t rear_right;
} wpi_proto_ProtobufMecanumDriveKinematics;
typedef struct _wpi_proto_ProtobufMecanumDriveMotorVoltages {
static const pb_msgdesc_t* msg_descriptor(void) noexcept;
static std::string_view msg_name(void) noexcept;
static pb_filedesc_t file_descriptor(void) noexcept;
double front_left;
double front_right;
double rear_left;
double rear_right;
} wpi_proto_ProtobufMecanumDriveMotorVoltages;
typedef struct _wpi_proto_ProtobufMecanumDriveWheelPositions {
static const pb_msgdesc_t* msg_descriptor(void) noexcept;
static std::string_view msg_name(void) noexcept;
@@ -129,7 +118,6 @@ typedef struct _wpi_proto_ProtobufSwerveModuleState {
#define wpi_proto_ProtobufDifferentialDriveWheelSpeeds_init_default {0, 0}
#define wpi_proto_ProtobufDifferentialDriveWheelPositions_init_default {0, 0}
#define wpi_proto_ProtobufMecanumDriveKinematics_init_default {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_init_default {0, 0, 0, 0}
#define wpi_proto_ProtobufMecanumDriveWheelPositions_init_default {0, 0, 0, 0}
#define wpi_proto_ProtobufMecanumDriveWheelSpeeds_init_default {0, 0, 0, 0}
#define wpi_proto_ProtobufSwerveDriveKinematics_init_default {{{NULL}, NULL}}
@@ -140,7 +128,6 @@ typedef struct _wpi_proto_ProtobufSwerveModuleState {
#define wpi_proto_ProtobufDifferentialDriveWheelSpeeds_init_zero {0, 0}
#define wpi_proto_ProtobufDifferentialDriveWheelPositions_init_zero {0, 0}
#define wpi_proto_ProtobufMecanumDriveKinematics_init_zero {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_init_zero {0, 0, 0, 0}
#define wpi_proto_ProtobufMecanumDriveWheelPositions_init_zero {0, 0, 0, 0}
#define wpi_proto_ProtobufMecanumDriveWheelSpeeds_init_zero {0, 0, 0, 0}
#define wpi_proto_ProtobufSwerveDriveKinematics_init_zero {{{NULL}, NULL}}
@@ -160,10 +147,6 @@ typedef struct _wpi_proto_ProtobufSwerveModuleState {
#define wpi_proto_ProtobufMecanumDriveKinematics_front_right_tag 2
#define wpi_proto_ProtobufMecanumDriveKinematics_rear_left_tag 3
#define wpi_proto_ProtobufMecanumDriveKinematics_rear_right_tag 4
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_front_left_tag 1
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_front_right_tag 2
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_rear_left_tag 3
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_rear_right_tag 4
#define wpi_proto_ProtobufMecanumDriveWheelPositions_front_left_tag 1
#define wpi_proto_ProtobufMecanumDriveWheelPositions_front_right_tag 2
#define wpi_proto_ProtobufMecanumDriveWheelPositions_rear_left_tag 3
@@ -215,14 +198,6 @@ X(a, CALLBACK, OPTIONAL, MESSAGE, rear_right, 4)
#define wpi_proto_ProtobufMecanumDriveKinematics_rear_left_MSGTYPE wpi_proto_ProtobufTranslation2d
#define wpi_proto_ProtobufMecanumDriveKinematics_rear_right_MSGTYPE wpi_proto_ProtobufTranslation2d
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, DOUBLE, front_left, 1) \
X(a, STATIC, SINGULAR, DOUBLE, front_right, 2) \
X(a, STATIC, SINGULAR, DOUBLE, rear_left, 3) \
X(a, STATIC, SINGULAR, DOUBLE, rear_right, 4)
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_CALLBACK NULL
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_DEFAULT NULL
#define wpi_proto_ProtobufMecanumDriveWheelPositions_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, DOUBLE, front_left, 1) \
X(a, STATIC, SINGULAR, DOUBLE, front_right, 2) \
@@ -264,12 +239,11 @@ X(a, CALLBACK, OPTIONAL, MESSAGE, angle, 2)
/* wpi_proto_ProtobufSwerveDriveKinematics_size depends on runtime parameters */
/* wpi_proto_ProtobufSwerveModulePosition_size depends on runtime parameters */
/* wpi_proto_ProtobufSwerveModuleState_size depends on runtime parameters */
#define WPI_PROTO_KINEMATICS_NPB_H_MAX_SIZE wpi_proto_ProtobufMecanumDriveMotorVoltages_size
#define WPI_PROTO_KINEMATICS_NPB_H_MAX_SIZE wpi_proto_ProtobufMecanumDriveWheelPositions_size
#define wpi_proto_ProtobufChassisSpeeds_size 27
#define wpi_proto_ProtobufDifferentialDriveKinematics_size 9
#define wpi_proto_ProtobufDifferentialDriveWheelPositions_size 18
#define wpi_proto_ProtobufDifferentialDriveWheelSpeeds_size 18
#define wpi_proto_ProtobufMecanumDriveMotorVoltages_size 36
#define wpi_proto_ProtobufMecanumDriveWheelPositions_size 36
#define wpi_proto_ProtobufMecanumDriveWheelSpeeds_size 36

View File

@@ -4,13 +4,9 @@
package edu.wpi.first.math.kinematics;
import edu.wpi.first.math.kinematics.proto.MecanumDriveMotorVoltagesProto;
import edu.wpi.first.math.kinematics.struct.MecanumDriveMotorVoltagesStruct;
import edu.wpi.first.util.protobuf.ProtobufSerializable;
import edu.wpi.first.util.struct.StructSerializable;
/** Represents the motor voltages for a mecanum drive drivetrain. */
public class MecanumDriveMotorVoltages implements ProtobufSerializable, StructSerializable {
@Deprecated(since = "2025", forRemoval = true)
public class MecanumDriveMotorVoltages {
/** Voltage of the front left motor. */
public double frontLeftVoltage;
@@ -52,11 +48,4 @@ public class MecanumDriveMotorVoltages implements ProtobufSerializable, StructSe
+ "Rear Left: %.2f V, Rear Right: %.2f V)",
frontLeftVoltage, frontRightVoltage, rearLeftVoltage, rearRightVoltage);
}
/** MecanumDriveMotorVoltages struct for serialization. */
public static final MecanumDriveMotorVoltagesStruct struct =
new MecanumDriveMotorVoltagesStruct();
/** MecanumDriveMotorVoltages protobuf for serialization. */
public static final MecanumDriveMotorVoltagesProto proto = new MecanumDriveMotorVoltagesProto();
}

View File

@@ -1,42 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.math.kinematics.proto;
import edu.wpi.first.math.kinematics.MecanumDriveMotorVoltages;
import edu.wpi.first.math.proto.Kinematics.ProtobufMecanumDriveMotorVoltages;
import edu.wpi.first.util.protobuf.Protobuf;
import us.hebi.quickbuf.Descriptors.Descriptor;
public final class MecanumDriveMotorVoltagesProto
implements Protobuf<MecanumDriveMotorVoltages, ProtobufMecanumDriveMotorVoltages> {
@Override
public Class<MecanumDriveMotorVoltages> getTypeClass() {
return MecanumDriveMotorVoltages.class;
}
@Override
public Descriptor getDescriptor() {
return ProtobufMecanumDriveMotorVoltages.getDescriptor();
}
@Override
public ProtobufMecanumDriveMotorVoltages createMessage() {
return ProtobufMecanumDriveMotorVoltages.newInstance();
}
@Override
public MecanumDriveMotorVoltages unpack(ProtobufMecanumDriveMotorVoltages msg) {
return new MecanumDriveMotorVoltages(
msg.getFrontLeft(), msg.getFrontRight(), msg.getRearLeft(), msg.getRearRight());
}
@Override
public void pack(ProtobufMecanumDriveMotorVoltages msg, MecanumDriveMotorVoltages value) {
msg.setFrontLeft(value.frontLeftVoltage);
msg.setFrontRight(value.frontRightVoltage);
msg.setRearLeft(value.rearLeftVoltage);
msg.setRearRight(value.rearRightVoltage);
}
}

View File

@@ -1,48 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.math.kinematics.struct;
import edu.wpi.first.math.kinematics.MecanumDriveMotorVoltages;
import edu.wpi.first.util.struct.Struct;
import java.nio.ByteBuffer;
public final class MecanumDriveMotorVoltagesStruct implements Struct<MecanumDriveMotorVoltages> {
@Override
public Class<MecanumDriveMotorVoltages> getTypeClass() {
return MecanumDriveMotorVoltages.class;
}
@Override
public String getTypeName() {
return "MecanumDriveMotorVoltages";
}
@Override
public int getSize() {
return kSizeDouble * 4;
}
@Override
public String getSchema() {
return "double front_left;double front_right;double rear_left;double rear_right";
}
@Override
public MecanumDriveMotorVoltages unpack(ByteBuffer bb) {
double front_left = bb.getDouble();
double front_right = bb.getDouble();
double rear_left = bb.getDouble();
double rear_right = bb.getDouble();
return new MecanumDriveMotorVoltages(front_left, front_right, rear_left, rear_right);
}
@Override
public void pack(ByteBuffer bb, MecanumDriveMotorVoltages value) {
bb.putDouble(value.frontLeftVoltage);
bb.putDouble(value.frontRightVoltage);
bb.putDouble(value.rearLeftVoltage);
bb.putDouble(value.rearRightVoltage);
}
}

View File

@@ -33,13 +33,6 @@ message ProtobufMecanumDriveKinematics {
ProtobufTranslation2d rear_right = 4;
}
message ProtobufMecanumDriveMotorVoltages {
double front_left = 1;
double front_right = 2;
double rear_left = 3;
double rear_right = 4;
}
message ProtobufMecanumDriveWheelPositions {
double front_left = 1;
double front_right = 2;

View File

@@ -1,27 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.math.kinematics.proto;
import static org.junit.jupiter.api.Assertions.assertEquals;
import edu.wpi.first.math.kinematics.MecanumDriveMotorVoltages;
import edu.wpi.first.math.proto.Kinematics.ProtobufMecanumDriveMotorVoltages;
import edu.wpi.first.wpilibj.ProtoTestBase;
@SuppressWarnings("PMD.TestClassWithoutTestCases")
class MecanumDriveMotorVoltagesProtoTest
extends ProtoTestBase<MecanumDriveMotorVoltages, ProtobufMecanumDriveMotorVoltages> {
MecanumDriveMotorVoltagesProtoTest() {
super(new MecanumDriveMotorVoltages(1.2, 3.1, 2.5, -0.1), MecanumDriveMotorVoltages.proto);
}
@Override
public void checkEquals(MecanumDriveMotorVoltages testData, MecanumDriveMotorVoltages data) {
assertEquals(testData.frontLeftVoltage, data.frontLeftVoltage);
assertEquals(testData.frontRightVoltage, data.frontRightVoltage);
assertEquals(testData.rearLeftVoltage, data.rearLeftVoltage);
assertEquals(testData.rearRightVoltage, data.rearRightVoltage);
}
}

View File

@@ -1,25 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.math.kinematics.struct;
import static org.junit.jupiter.api.Assertions.assertEquals;
import edu.wpi.first.math.kinematics.MecanumDriveMotorVoltages;
import edu.wpi.first.wpilibj.StructTestBase;
@SuppressWarnings("PMD.TestClassWithoutTestCases")
class MecanumDriveMotorVoltagesStructTest extends StructTestBase<MecanumDriveMotorVoltages> {
MecanumDriveMotorVoltagesStructTest() {
super(new MecanumDriveMotorVoltages(1.2, 3.1, 2.5, -0.1), MecanumDriveMotorVoltages.struct);
}
@Override
public void checkEquals(MecanumDriveMotorVoltages testData, MecanumDriveMotorVoltages data) {
assertEquals(testData.frontLeftVoltage, data.frontLeftVoltage);
assertEquals(testData.frontRightVoltage, data.frontRightVoltage);
assertEquals(testData.rearLeftVoltage, data.rearLeftVoltage);
assertEquals(testData.rearRightVoltage, data.rearRightVoltage);
}
}