com.google.crypto.tink.proto.EcdsaPrivateKey Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tink Show documentation
Show all versions of tink Show documentation
Tink is a small cryptographic library that provides a safe, simple, agile and fast way to accomplish some common cryptographic tasks.
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: proto/ecdsa.proto
package com.google.crypto.tink.proto;
/**
*
* key_type: type.googleapis.com/google.crypto.tink.EcdsaPrivateKey
*
*
* Protobuf type {@code google.crypto.tink.EcdsaPrivateKey}
*/
public final class EcdsaPrivateKey extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:google.crypto.tink.EcdsaPrivateKey)
EcdsaPrivateKeyOrBuilder {
private static final long serialVersionUID = 0L;
// Use EcdsaPrivateKey.newBuilder() to construct.
private EcdsaPrivateKey(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
super(builder);
}
private EcdsaPrivateKey() {
version_ = 0;
keyValue_ = com.google.protobuf.ByteString.EMPTY;
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private EcdsaPrivateKey(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
version_ = input.readUInt32();
break;
}
case 18: {
com.google.crypto.tink.proto.EcdsaPublicKey.Builder subBuilder = null;
if (publicKey_ != null) {
subBuilder = publicKey_.toBuilder();
}
publicKey_ = input.readMessage(com.google.crypto.tink.proto.EcdsaPublicKey.parser(), extensionRegistry);
if (subBuilder != null) {
subBuilder.mergeFrom(publicKey_);
publicKey_ = subBuilder.buildPartial();
}
break;
}
case 26: {
keyValue_ = input.readBytes();
break;
}
default: {
if (!parseUnknownFieldProto3(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return com.google.crypto.tink.proto.Ecdsa.internal_static_google_crypto_tink_EcdsaPrivateKey_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.crypto.tink.proto.Ecdsa.internal_static_google_crypto_tink_EcdsaPrivateKey_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.crypto.tink.proto.EcdsaPrivateKey.class, com.google.crypto.tink.proto.EcdsaPrivateKey.Builder.class);
}
public static final int VERSION_FIELD_NUMBER = 1;
private int version_;
/**
*
* Required.
*
*
* uint32 version = 1;
*/
public int getVersion() {
return version_;
}
public static final int PUBLIC_KEY_FIELD_NUMBER = 2;
private com.google.crypto.tink.proto.EcdsaPublicKey publicKey_;
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public boolean hasPublicKey() {
return publicKey_ != null;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public com.google.crypto.tink.proto.EcdsaPublicKey getPublicKey() {
return publicKey_ == null ? com.google.crypto.tink.proto.EcdsaPublicKey.getDefaultInstance() : publicKey_;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public com.google.crypto.tink.proto.EcdsaPublicKeyOrBuilder getPublicKeyOrBuilder() {
return getPublicKey();
}
public static final int KEY_VALUE_FIELD_NUMBER = 3;
private com.google.protobuf.ByteString keyValue_;
/**
*
* Unsigned big integer in bigendian representation.
* Required.
*
*
* bytes key_value = 3;
*/
public com.google.protobuf.ByteString getKeyValue() {
return keyValue_;
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (version_ != 0) {
output.writeUInt32(1, version_);
}
if (publicKey_ != null) {
output.writeMessage(2, getPublicKey());
}
if (!keyValue_.isEmpty()) {
output.writeBytes(3, keyValue_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (version_ != 0) {
size += com.google.protobuf.CodedOutputStream
.computeUInt32Size(1, version_);
}
if (publicKey_ != null) {
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(2, getPublicKey());
}
if (!keyValue_.isEmpty()) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(3, keyValue_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof com.google.crypto.tink.proto.EcdsaPrivateKey)) {
return super.equals(obj);
}
com.google.crypto.tink.proto.EcdsaPrivateKey other = (com.google.crypto.tink.proto.EcdsaPrivateKey) obj;
boolean result = true;
result = result && (getVersion()
== other.getVersion());
result = result && (hasPublicKey() == other.hasPublicKey());
if (hasPublicKey()) {
result = result && getPublicKey()
.equals(other.getPublicKey());
}
result = result && getKeyValue()
.equals(other.getKeyValue());
result = result && unknownFields.equals(other.unknownFields);
return result;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + VERSION_FIELD_NUMBER;
hash = (53 * hash) + getVersion();
if (hasPublicKey()) {
hash = (37 * hash) + PUBLIC_KEY_FIELD_NUMBER;
hash = (53 * hash) + getPublicKey().hashCode();
}
hash = (37 * hash) + KEY_VALUE_FIELD_NUMBER;
hash = (53 * hash) + getKeyValue().hashCode();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(com.google.crypto.tink.proto.EcdsaPrivateKey prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
*
* key_type: type.googleapis.com/google.crypto.tink.EcdsaPrivateKey
*
*
* Protobuf type {@code google.crypto.tink.EcdsaPrivateKey}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder implements
// @@protoc_insertion_point(builder_implements:google.crypto.tink.EcdsaPrivateKey)
com.google.crypto.tink.proto.EcdsaPrivateKeyOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return com.google.crypto.tink.proto.Ecdsa.internal_static_google_crypto_tink_EcdsaPrivateKey_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.crypto.tink.proto.Ecdsa.internal_static_google_crypto_tink_EcdsaPrivateKey_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.crypto.tink.proto.EcdsaPrivateKey.class, com.google.crypto.tink.proto.EcdsaPrivateKey.Builder.class);
}
// Construct using com.google.crypto.tink.proto.EcdsaPrivateKey.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
version_ = 0;
if (publicKeyBuilder_ == null) {
publicKey_ = null;
} else {
publicKey_ = null;
publicKeyBuilder_ = null;
}
keyValue_ = com.google.protobuf.ByteString.EMPTY;
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return com.google.crypto.tink.proto.Ecdsa.internal_static_google_crypto_tink_EcdsaPrivateKey_descriptor;
}
@java.lang.Override
public com.google.crypto.tink.proto.EcdsaPrivateKey getDefaultInstanceForType() {
return com.google.crypto.tink.proto.EcdsaPrivateKey.getDefaultInstance();
}
@java.lang.Override
public com.google.crypto.tink.proto.EcdsaPrivateKey build() {
com.google.crypto.tink.proto.EcdsaPrivateKey result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public com.google.crypto.tink.proto.EcdsaPrivateKey buildPartial() {
com.google.crypto.tink.proto.EcdsaPrivateKey result = new com.google.crypto.tink.proto.EcdsaPrivateKey(this);
result.version_ = version_;
if (publicKeyBuilder_ == null) {
result.publicKey_ = publicKey_;
} else {
result.publicKey_ = publicKeyBuilder_.build();
}
result.keyValue_ = keyValue_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return (Builder) super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return (Builder) super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return (Builder) super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return (Builder) super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return (Builder) super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return (Builder) super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof com.google.crypto.tink.proto.EcdsaPrivateKey) {
return mergeFrom((com.google.crypto.tink.proto.EcdsaPrivateKey)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(com.google.crypto.tink.proto.EcdsaPrivateKey other) {
if (other == com.google.crypto.tink.proto.EcdsaPrivateKey.getDefaultInstance()) return this;
if (other.getVersion() != 0) {
setVersion(other.getVersion());
}
if (other.hasPublicKey()) {
mergePublicKey(other.getPublicKey());
}
if (other.getKeyValue() != com.google.protobuf.ByteString.EMPTY) {
setKeyValue(other.getKeyValue());
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
com.google.crypto.tink.proto.EcdsaPrivateKey parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (com.google.crypto.tink.proto.EcdsaPrivateKey) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int version_ ;
/**
*
* Required.
*
*
* uint32 version = 1;
*/
public int getVersion() {
return version_;
}
/**
*
* Required.
*
*
* uint32 version = 1;
*/
public Builder setVersion(int value) {
version_ = value;
onChanged();
return this;
}
/**
*
* Required.
*
*
* uint32 version = 1;
*/
public Builder clearVersion() {
version_ = 0;
onChanged();
return this;
}
private com.google.crypto.tink.proto.EcdsaPublicKey publicKey_ = null;
private com.google.protobuf.SingleFieldBuilderV3<
com.google.crypto.tink.proto.EcdsaPublicKey, com.google.crypto.tink.proto.EcdsaPublicKey.Builder, com.google.crypto.tink.proto.EcdsaPublicKeyOrBuilder> publicKeyBuilder_;
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public boolean hasPublicKey() {
return publicKeyBuilder_ != null || publicKey_ != null;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public com.google.crypto.tink.proto.EcdsaPublicKey getPublicKey() {
if (publicKeyBuilder_ == null) {
return publicKey_ == null ? com.google.crypto.tink.proto.EcdsaPublicKey.getDefaultInstance() : publicKey_;
} else {
return publicKeyBuilder_.getMessage();
}
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public Builder setPublicKey(com.google.crypto.tink.proto.EcdsaPublicKey value) {
if (publicKeyBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
}
publicKey_ = value;
onChanged();
} else {
publicKeyBuilder_.setMessage(value);
}
return this;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public Builder setPublicKey(
com.google.crypto.tink.proto.EcdsaPublicKey.Builder builderForValue) {
if (publicKeyBuilder_ == null) {
publicKey_ = builderForValue.build();
onChanged();
} else {
publicKeyBuilder_.setMessage(builderForValue.build());
}
return this;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public Builder mergePublicKey(com.google.crypto.tink.proto.EcdsaPublicKey value) {
if (publicKeyBuilder_ == null) {
if (publicKey_ != null) {
publicKey_ =
com.google.crypto.tink.proto.EcdsaPublicKey.newBuilder(publicKey_).mergeFrom(value).buildPartial();
} else {
publicKey_ = value;
}
onChanged();
} else {
publicKeyBuilder_.mergeFrom(value);
}
return this;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public Builder clearPublicKey() {
if (publicKeyBuilder_ == null) {
publicKey_ = null;
onChanged();
} else {
publicKey_ = null;
publicKeyBuilder_ = null;
}
return this;
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public com.google.crypto.tink.proto.EcdsaPublicKey.Builder getPublicKeyBuilder() {
onChanged();
return getPublicKeyFieldBuilder().getBuilder();
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
public com.google.crypto.tink.proto.EcdsaPublicKeyOrBuilder getPublicKeyOrBuilder() {
if (publicKeyBuilder_ != null) {
return publicKeyBuilder_.getMessageOrBuilder();
} else {
return publicKey_ == null ?
com.google.crypto.tink.proto.EcdsaPublicKey.getDefaultInstance() : publicKey_;
}
}
/**
*
* Required.
*
*
* .google.crypto.tink.EcdsaPublicKey public_key = 2;
*/
private com.google.protobuf.SingleFieldBuilderV3<
com.google.crypto.tink.proto.EcdsaPublicKey, com.google.crypto.tink.proto.EcdsaPublicKey.Builder, com.google.crypto.tink.proto.EcdsaPublicKeyOrBuilder>
getPublicKeyFieldBuilder() {
if (publicKeyBuilder_ == null) {
publicKeyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
com.google.crypto.tink.proto.EcdsaPublicKey, com.google.crypto.tink.proto.EcdsaPublicKey.Builder, com.google.crypto.tink.proto.EcdsaPublicKeyOrBuilder>(
getPublicKey(),
getParentForChildren(),
isClean());
publicKey_ = null;
}
return publicKeyBuilder_;
}
private com.google.protobuf.ByteString keyValue_ = com.google.protobuf.ByteString.EMPTY;
/**
*
* Unsigned big integer in bigendian representation.
* Required.
*
*
* bytes key_value = 3;
*/
public com.google.protobuf.ByteString getKeyValue() {
return keyValue_;
}
/**
*
* Unsigned big integer in bigendian representation.
* Required.
*
*
* bytes key_value = 3;
*/
public Builder setKeyValue(com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
keyValue_ = value;
onChanged();
return this;
}
/**
*
* Unsigned big integer in bigendian representation.
* Required.
*
*
* bytes key_value = 3;
*/
public Builder clearKeyValue() {
keyValue_ = getDefaultInstance().getKeyValue();
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFieldsProto3(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:google.crypto.tink.EcdsaPrivateKey)
}
// @@protoc_insertion_point(class_scope:google.crypto.tink.EcdsaPrivateKey)
private static final com.google.crypto.tink.proto.EcdsaPrivateKey DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new com.google.crypto.tink.proto.EcdsaPrivateKey();
}
public static com.google.crypto.tink.proto.EcdsaPrivateKey getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser
PARSER = new com.google.protobuf.AbstractParser() {
@java.lang.Override
public EcdsaPrivateKey parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new EcdsaPrivateKey(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser getParserForType() {
return PARSER;
}
@java.lang.Override
public com.google.crypto.tink.proto.EcdsaPrivateKey getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy