Browse Source

Merge pull request #504 from librespot-org/build-fixes

General fixes to protobuf bindings, depreciation warnings and publish.sh
Sasha Hilton 3 years ago
parent
commit
4886d4eed2

+ 1 - 0
Cargo.lock

@@ -1083,6 +1083,7 @@ dependencies = [
 name = "librespot-protocol"
 version = "0.1.2"
 dependencies = [
+ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "protobuf 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "protobuf-codegen 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "protobuf-codegen-pure 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",

+ 1 - 1
Cargo.toml

@@ -41,7 +41,7 @@ version = "0.1.2"
 
 [dependencies]
 base64 = "0.10"
-env_logger =  {version = "0.6", default-features = false, features = ["termcolor","humantime","atty"]} 
+env_logger =  {version = "0.6", default-features = false, features = ["termcolor","humantime","atty"]}
 futures = "0.1"
 getopts = "0.2"
 hyper = "0.11"

+ 0 - 4
audio/src/lewton_decoder.rs

@@ -71,10 +71,6 @@ impl fmt::Display for VorbisError {
 }
 
 impl error::Error for VorbisError {
-    fn description(&self) -> &str {
-        error::Error::description(&self.0)
-    }
-
     fn source(&self) -> Option<&(dyn error::Error + 'static)> {
         error::Error::source(&self.0)
     }

+ 1 - 2
core/src/proxytunnel.rs

@@ -1,4 +1,3 @@
-use std::error::Error;
 use std::io;
 use std::str::FromStr;
 
@@ -58,7 +57,7 @@ impl<T: AsyncRead + AsyncWrite> Future for ProxyTunnel<T> {
                     let status = match response.parse(&buf) {
                         Ok(status) => status,
                         Err(err) => {
-                            return Err(io::Error::new(io::ErrorKind::Other, err.description()));
+                            return Err(io::Error::new(io::ErrorKind::Other, err.to_string()));
                         }
                     };
 

+ 1 - 0
protocol/Cargo.toml

@@ -13,3 +13,4 @@ protobuf = "~2.14.0"
 [build-dependencies]
 protobuf-codegen-pure = "~2.14.0"
 protobuf-codegen = "~2.14.0"
+glob = "0.3.0"

+ 64 - 54
protocol/build.rs

@@ -1,59 +1,69 @@
-extern crate protobuf_codegen; // Does the business
-extern crate protobuf_codegen_pure; // Helper function
+extern crate glob;
 
-use std::fs::{read_to_string, write};
-use std::path::Path;
+use std::{
+    env, fs,
+    ops::Deref,
+    path::{Path, PathBuf},
+};
 
-use protobuf_codegen_pure::parse_and_typecheck;
-use protobuf_codegen_pure::Customize;
+fn out_dir() -> PathBuf {
+    Path::new(&env::var("OUT_DIR").expect("env")).to_path_buf()
+}
+
+fn cleanup() {
+    let _ = fs::remove_dir_all(&out_dir());
+}
+
+fn compile() {
+    let proto_dir = Path::new(&env::var("CARGO_MANIFEST_DIR").expect("env")).join("proto");
+
+    let files = &[
+        proto_dir.join("authentication.proto"),
+        proto_dir.join("keyexchange.proto"),
+        proto_dir.join("mercury.proto"),
+        proto_dir.join("metadata.proto"),
+        proto_dir.join("playlist4changes.proto"),
+        proto_dir.join("playlist4content.proto"),
+        proto_dir.join("playlist4issues.proto"),
+        proto_dir.join("playlist4meta.proto"),
+        proto_dir.join("playlist4ops.proto"),
+        proto_dir.join("pubsub.proto"),
+        proto_dir.join("spirc.proto"),
+    ];
+
+    let slices = files.iter().map(Deref::deref).collect::<Vec<_>>();
+
+    let out_dir = out_dir();
+    fs::create_dir(&out_dir).expect("create_dir");
+
+    protobuf_codegen_pure::Codegen::new()
+        .out_dir(&out_dir)
+        .inputs(&slices)
+        .include(&proto_dir)
+        .run()
+        .expect("Codegen failed.");
+}
+
+fn generate_mod_rs() {
+    let out_dir = out_dir();
+
+    let mods = glob::glob(&out_dir.join("*.rs").to_string_lossy())
+        .expect("glob")
+        .filter_map(|p| {
+            p.ok()
+                .map(|p| format!("pub mod {};", p.file_stem().unwrap().to_string_lossy()))
+        })
+        .collect::<Vec<_>>()
+        .join("\n");
+
+    let mod_rs = out_dir.join("mod.rs");
+    fs::write(&mod_rs, format!("// @generated\n{}\n", mods)).expect("write");
+
+    println!("cargo:rustc-env=PROTO_MOD_RS={}", mod_rs.to_string_lossy());
+}
 
 fn main() {
-    let customizations = Customize {
-        ..Default::default()
-    };
-
-    let lib_str = read_to_string("src/lib.rs").unwrap();
-
-    // Iterate over the desired module names.
-    for line in lib_str.lines() {
-        if !line.starts_with("pub mod ") && !line.starts_with("mod ") {
-            continue;
-        }
-        let len = line.len();
-
-        let name;
-        if line.starts_with("pub mod ") {
-            name = &line[8..len - 1]; // Remove keywords and semi-colon
-        } else {
-            name = &line[4..len - 1]; // Remove keywords and semi-colon
-        }
-
-        // Build the paths to relevant files.
-        let src_fname = &format!("proto/{}.proto", name);
-        let dest_fname = &format!("src/{}.rs", name);
-        let src = Path::new(src_fname);
-        let dest = Path::new(dest_fname);
-        // Get the contents of the existing generated file.
-        let mut existing = "".to_string();
-        if dest.exists() {
-            // Removing CRLF line endings if present.
-            existing = read_to_string(dest).unwrap().replace("\r\n", "\n");
-        }
-
-        println!("Regenerating {} from {}", dest.display(), src.display());
-
-        // Parse the proto files as the protobuf-codegen-pure crate does.
-        let p = parse_and_typecheck(&[&Path::new("proto")], &[src]).expect("protoc");
-        // But generate them with the protobuf-codegen crate directly.
-        // Then we can keep the result in-memory.
-        let result = protobuf_codegen::gen(&p.file_descriptors, &p.relative_paths, &customizations);
-        // Protoc result as a byte array.
-        let new = &result.first().unwrap().content;
-        // Convert to utf8 to compare with existing.
-        let new = std::str::from_utf8(&new).unwrap();
-        // Save newly generated file if changed.
-        if new != existing {
-            write(dest, &new).unwrap();
-        }
-    }
+    cleanup();
+    compile();
+    generate_mod_rs();
 }

+ 4 - 0
protocol/proto/mod.rs

@@ -0,0 +1,4 @@
+// generated protobuf files will be included here. See build.rs for details
+#![allow(renamed_and_removed_lints)]
+
+include!(env!("PROTO_MOD_RS"));

+ 0 - 5647
protocol/src/authentication.rs

@@ -1,5647 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `authentication.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientResponseEncrypted {
-    // message fields
-    login_credentials: ::protobuf::SingularPtrField<LoginCredentials>,
-    account_creation: ::std::option::Option<AccountCreation>,
-    fingerprint_response: ::protobuf::SingularPtrField<FingerprintResponseUnion>,
-    peer_ticket: ::protobuf::SingularPtrField<PeerTicketUnion>,
-    system_info: ::protobuf::SingularPtrField<SystemInfo>,
-    platform_model: ::protobuf::SingularField<::std::string::String>,
-    version_string: ::protobuf::SingularField<::std::string::String>,
-    appkey: ::protobuf::SingularPtrField<LibspotifyAppKey>,
-    client_info: ::protobuf::SingularPtrField<ClientInfo>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientResponseEncrypted {
-    fn default() -> &'a ClientResponseEncrypted {
-        <ClientResponseEncrypted as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientResponseEncrypted {
-    pub fn new() -> ClientResponseEncrypted {
-        ::std::default::Default::default()
-    }
-
-    // required .LoginCredentials login_credentials = 10;
-
-    pub fn get_login_credentials(&self) -> &LoginCredentials {
-        self.login_credentials
-            .as_ref()
-            .unwrap_or_else(|| LoginCredentials::default_instance())
-    }
-    pub fn clear_login_credentials(&mut self) {
-        self.login_credentials.clear();
-    }
-
-    pub fn has_login_credentials(&self) -> bool {
-        self.login_credentials.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_login_credentials(&mut self, v: LoginCredentials) {
-        self.login_credentials = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_login_credentials(&mut self) -> &mut LoginCredentials {
-        if self.login_credentials.is_none() {
-            self.login_credentials.set_default();
-        }
-        self.login_credentials.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_login_credentials(&mut self) -> LoginCredentials {
-        self.login_credentials
-            .take()
-            .unwrap_or_else(|| LoginCredentials::new())
-    }
-
-    // optional .AccountCreation account_creation = 20;
-
-    pub fn get_account_creation(&self) -> AccountCreation {
-        self.account_creation
-            .unwrap_or(AccountCreation::ACCOUNT_CREATION_ALWAYS_PROMPT)
-    }
-    pub fn clear_account_creation(&mut self) {
-        self.account_creation = ::std::option::Option::None;
-    }
-
-    pub fn has_account_creation(&self) -> bool {
-        self.account_creation.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_account_creation(&mut self, v: AccountCreation) {
-        self.account_creation = ::std::option::Option::Some(v);
-    }
-
-    // optional .FingerprintResponseUnion fingerprint_response = 30;
-
-    pub fn get_fingerprint_response(&self) -> &FingerprintResponseUnion {
-        self.fingerprint_response
-            .as_ref()
-            .unwrap_or_else(|| FingerprintResponseUnion::default_instance())
-    }
-    pub fn clear_fingerprint_response(&mut self) {
-        self.fingerprint_response.clear();
-    }
-
-    pub fn has_fingerprint_response(&self) -> bool {
-        self.fingerprint_response.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fingerprint_response(&mut self, v: FingerprintResponseUnion) {
-        self.fingerprint_response = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_fingerprint_response(&mut self) -> &mut FingerprintResponseUnion {
-        if self.fingerprint_response.is_none() {
-            self.fingerprint_response.set_default();
-        }
-        self.fingerprint_response.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_fingerprint_response(&mut self) -> FingerprintResponseUnion {
-        self.fingerprint_response
-            .take()
-            .unwrap_or_else(|| FingerprintResponseUnion::new())
-    }
-
-    // optional .PeerTicketUnion peer_ticket = 40;
-
-    pub fn get_peer_ticket(&self) -> &PeerTicketUnion {
-        self.peer_ticket
-            .as_ref()
-            .unwrap_or_else(|| PeerTicketUnion::default_instance())
-    }
-    pub fn clear_peer_ticket(&mut self) {
-        self.peer_ticket.clear();
-    }
-
-    pub fn has_peer_ticket(&self) -> bool {
-        self.peer_ticket.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_peer_ticket(&mut self, v: PeerTicketUnion) {
-        self.peer_ticket = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_peer_ticket(&mut self) -> &mut PeerTicketUnion {
-        if self.peer_ticket.is_none() {
-            self.peer_ticket.set_default();
-        }
-        self.peer_ticket.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_peer_ticket(&mut self) -> PeerTicketUnion {
-        self.peer_ticket
-            .take()
-            .unwrap_or_else(|| PeerTicketUnion::new())
-    }
-
-    // required .SystemInfo system_info = 50;
-
-    pub fn get_system_info(&self) -> &SystemInfo {
-        self.system_info
-            .as_ref()
-            .unwrap_or_else(|| SystemInfo::default_instance())
-    }
-    pub fn clear_system_info(&mut self) {
-        self.system_info.clear();
-    }
-
-    pub fn has_system_info(&self) -> bool {
-        self.system_info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_system_info(&mut self, v: SystemInfo) {
-        self.system_info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_system_info(&mut self) -> &mut SystemInfo {
-        if self.system_info.is_none() {
-            self.system_info.set_default();
-        }
-        self.system_info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_system_info(&mut self) -> SystemInfo {
-        self.system_info.take().unwrap_or_else(|| SystemInfo::new())
-    }
-
-    // optional string platform_model = 60;
-
-    pub fn get_platform_model(&self) -> &str {
-        match self.platform_model.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_platform_model(&mut self) {
-        self.platform_model.clear();
-    }
-
-    pub fn has_platform_model(&self) -> bool {
-        self.platform_model.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_platform_model(&mut self, v: ::std::string::String) {
-        self.platform_model = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_platform_model(&mut self) -> &mut ::std::string::String {
-        if self.platform_model.is_none() {
-            self.platform_model.set_default();
-        }
-        self.platform_model.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_platform_model(&mut self) -> ::std::string::String {
-        self.platform_model
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string version_string = 70;
-
-    pub fn get_version_string(&self) -> &str {
-        match self.version_string.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_version_string(&mut self) {
-        self.version_string.clear();
-    }
-
-    pub fn has_version_string(&self) -> bool {
-        self.version_string.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_version_string(&mut self, v: ::std::string::String) {
-        self.version_string = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_version_string(&mut self) -> &mut ::std::string::String {
-        if self.version_string.is_none() {
-            self.version_string.set_default();
-        }
-        self.version_string.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_version_string(&mut self) -> ::std::string::String {
-        self.version_string
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .LibspotifyAppKey appkey = 80;
-
-    pub fn get_appkey(&self) -> &LibspotifyAppKey {
-        self.appkey
-            .as_ref()
-            .unwrap_or_else(|| LibspotifyAppKey::default_instance())
-    }
-    pub fn clear_appkey(&mut self) {
-        self.appkey.clear();
-    }
-
-    pub fn has_appkey(&self) -> bool {
-        self.appkey.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_appkey(&mut self, v: LibspotifyAppKey) {
-        self.appkey = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_appkey(&mut self) -> &mut LibspotifyAppKey {
-        if self.appkey.is_none() {
-            self.appkey.set_default();
-        }
-        self.appkey.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_appkey(&mut self) -> LibspotifyAppKey {
-        self.appkey
-            .take()
-            .unwrap_or_else(|| LibspotifyAppKey::new())
-    }
-
-    // optional .ClientInfo client_info = 90;
-
-    pub fn get_client_info(&self) -> &ClientInfo {
-        self.client_info
-            .as_ref()
-            .unwrap_or_else(|| ClientInfo::default_instance())
-    }
-    pub fn clear_client_info(&mut self) {
-        self.client_info.clear();
-    }
-
-    pub fn has_client_info(&self) -> bool {
-        self.client_info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_client_info(&mut self, v: ClientInfo) {
-        self.client_info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_client_info(&mut self) -> &mut ClientInfo {
-        if self.client_info.is_none() {
-            self.client_info.set_default();
-        }
-        self.client_info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_client_info(&mut self) -> ClientInfo {
-        self.client_info.take().unwrap_or_else(|| ClientInfo::new())
-    }
-}
-
-impl ::protobuf::Message for ClientResponseEncrypted {
-    fn is_initialized(&self) -> bool {
-        if self.login_credentials.is_none() {
-            return false;
-        }
-        if self.system_info.is_none() {
-            return false;
-        }
-        for v in &self.login_credentials {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.fingerprint_response {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.peer_ticket {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.system_info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.appkey {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.client_info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.login_credentials,
-                    )?;
-                }
-                20 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.account_creation,
-                    20,
-                    &mut self.unknown_fields,
-                )?,
-                30 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.fingerprint_response,
-                    )?;
-                }
-                40 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.peer_ticket,
-                    )?;
-                }
-                50 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.system_info,
-                    )?;
-                }
-                60 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.platform_model,
-                    )?;
-                }
-                70 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.version_string,
-                    )?;
-                }
-                80 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.appkey)?;
-                }
-                90 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.client_info,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.login_credentials.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.account_creation {
-            my_size += ::protobuf::rt::enum_size(20, v);
-        }
-        if let Some(ref v) = self.fingerprint_response.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.peer_ticket.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.system_info.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.platform_model.as_ref() {
-            my_size += ::protobuf::rt::string_size(60, &v);
-        }
-        if let Some(ref v) = self.version_string.as_ref() {
-            my_size += ::protobuf::rt::string_size(70, &v);
-        }
-        if let Some(ref v) = self.appkey.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.client_info.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.login_credentials.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.account_creation {
-            os.write_enum(20, v.value())?;
-        }
-        if let Some(ref v) = self.fingerprint_response.as_ref() {
-            os.write_tag(30, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.peer_ticket.as_ref() {
-            os.write_tag(40, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.system_info.as_ref() {
-            os.write_tag(50, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.platform_model.as_ref() {
-            os.write_string(60, &v)?;
-        }
-        if let Some(ref v) = self.version_string.as_ref() {
-            os.write_string(70, &v)?;
-        }
-        if let Some(ref v) = self.appkey.as_ref() {
-            os.write_tag(80, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.client_info.as_ref() {
-            os.write_tag(90, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientResponseEncrypted {
-        ClientResponseEncrypted::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCredentials>,
-                    >(
-                        "login_credentials",
-                        |m: &ClientResponseEncrypted| &m.login_credentials,
-                        |m: &mut ClientResponseEncrypted| &mut m.login_credentials,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AccountCreation>,
-                >(
-                    "account_creation",
-                    |m: &ClientResponseEncrypted| &m.account_creation,
-                    |m: &mut ClientResponseEncrypted| &mut m.account_creation,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintResponseUnion>,
-                    >(
-                        "fingerprint_response",
-                        |m: &ClientResponseEncrypted| &m.fingerprint_response,
-                        |m: &mut ClientResponseEncrypted| &mut m.fingerprint_response,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PeerTicketUnion>,
-                    >(
-                        "peer_ticket",
-                        |m: &ClientResponseEncrypted| &m.peer_ticket,
-                        |m: &mut ClientResponseEncrypted| &mut m.peer_ticket,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<SystemInfo>,
-                    >(
-                        "system_info",
-                        |m: &ClientResponseEncrypted| &m.system_info,
-                        |m: &mut ClientResponseEncrypted| &mut m.system_info,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "platform_model",
-                        |m: &ClientResponseEncrypted| &m.platform_model,
-                        |m: &mut ClientResponseEncrypted| &mut m.platform_model,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "version_string",
-                        |m: &ClientResponseEncrypted| &m.version_string,
-                        |m: &mut ClientResponseEncrypted| &mut m.version_string,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LibspotifyAppKey>,
-                    >(
-                        "appkey",
-                        |m: &ClientResponseEncrypted| &m.appkey,
-                        |m: &mut ClientResponseEncrypted| &mut m.appkey,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ClientInfo>,
-                    >(
-                        "client_info",
-                        |m: &ClientResponseEncrypted| &m.client_info,
-                        |m: &mut ClientResponseEncrypted| &mut m.client_info,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientResponseEncrypted>(
-                    "ClientResponseEncrypted",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientResponseEncrypted {
-        static mut instance: ::protobuf::lazy::Lazy<ClientResponseEncrypted> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientResponseEncrypted::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientResponseEncrypted {
-    fn clear(&mut self) {
-        self.login_credentials.clear();
-        self.account_creation = ::std::option::Option::None;
-        self.fingerprint_response.clear();
-        self.peer_ticket.clear();
-        self.system_info.clear();
-        self.platform_model.clear();
-        self.version_string.clear();
-        self.appkey.clear();
-        self.client_info.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientResponseEncrypted {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientResponseEncrypted {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCredentials {
-    // message fields
-    username: ::protobuf::SingularField<::std::string::String>,
-    typ: ::std::option::Option<AuthenticationType>,
-    auth_data: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCredentials {
-    fn default() -> &'a LoginCredentials {
-        <LoginCredentials as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCredentials {
-    pub fn new() -> LoginCredentials {
-        ::std::default::Default::default()
-    }
-
-    // optional string username = 10;
-
-    pub fn get_username(&self) -> &str {
-        match self.username.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_username(&mut self) {
-        self.username.clear();
-    }
-
-    pub fn has_username(&self) -> bool {
-        self.username.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_username(&mut self, v: ::std::string::String) {
-        self.username = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_username(&mut self) -> &mut ::std::string::String {
-        if self.username.is_none() {
-            self.username.set_default();
-        }
-        self.username.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_username(&mut self) -> ::std::string::String {
-        self.username
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // required .AuthenticationType typ = 20;
-
-    pub fn get_typ(&self) -> AuthenticationType {
-        self.typ
-            .unwrap_or(AuthenticationType::AUTHENTICATION_USER_PASS)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: AuthenticationType) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // optional bytes auth_data = 30;
-
-    pub fn get_auth_data(&self) -> &[u8] {
-        match self.auth_data.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_auth_data(&mut self) {
-        self.auth_data.clear();
-    }
-
-    pub fn has_auth_data(&self) -> bool {
-        self.auth_data.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_auth_data(&mut self, v: ::std::vec::Vec<u8>) {
-        self.auth_data = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_auth_data(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.auth_data.is_none() {
-            self.auth_data.set_default();
-        }
-        self.auth_data.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_auth_data(&mut self) -> ::std::vec::Vec<u8> {
-        self.auth_data
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCredentials {
-    fn is_initialized(&self) -> bool {
-        if self.typ.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.username)?;
-                }
-                20 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    20,
-                    &mut self.unknown_fields,
-                )?,
-                30 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.auth_data)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.username.as_ref() {
-            my_size += ::protobuf::rt::string_size(10, &v);
-        }
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(20, v);
-        }
-        if let Some(ref v) = self.auth_data.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(30, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.username.as_ref() {
-            os.write_string(10, &v)?;
-        }
-        if let Some(v) = self.typ {
-            os.write_enum(20, v.value())?;
-        }
-        if let Some(ref v) = self.auth_data.as_ref() {
-            os.write_bytes(30, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCredentials {
-        LoginCredentials::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "username",
-                        |m: &LoginCredentials| &m.username,
-                        |m: &mut LoginCredentials| &mut m.username,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AuthenticationType>,
-                >(
-                    "typ",
-                    |m: &LoginCredentials| &m.typ,
-                    |m: &mut LoginCredentials| &mut m.typ,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "auth_data",
-                        |m: &LoginCredentials| &m.auth_data,
-                        |m: &mut LoginCredentials| &mut m.auth_data,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LoginCredentials>(
-                    "LoginCredentials",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCredentials {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCredentials> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCredentials::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCredentials {
-    fn clear(&mut self) {
-        self.username.clear();
-        self.typ = ::std::option::Option::None;
-        self.auth_data.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCredentials {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCredentials {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintResponseUnion {
-    // message fields
-    grain: ::protobuf::SingularPtrField<FingerprintGrainResponse>,
-    hmac_ripemd: ::protobuf::SingularPtrField<FingerprintHmacRipemdResponse>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintResponseUnion {
-    fn default() -> &'a FingerprintResponseUnion {
-        <FingerprintResponseUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintResponseUnion {
-    pub fn new() -> FingerprintResponseUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .FingerprintGrainResponse grain = 10;
-
-    pub fn get_grain(&self) -> &FingerprintGrainResponse {
-        self.grain
-            .as_ref()
-            .unwrap_or_else(|| FingerprintGrainResponse::default_instance())
-    }
-    pub fn clear_grain(&mut self) {
-        self.grain.clear();
-    }
-
-    pub fn has_grain(&self) -> bool {
-        self.grain.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_grain(&mut self, v: FingerprintGrainResponse) {
-        self.grain = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_grain(&mut self) -> &mut FingerprintGrainResponse {
-        if self.grain.is_none() {
-            self.grain.set_default();
-        }
-        self.grain.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_grain(&mut self) -> FingerprintGrainResponse {
-        self.grain
-            .take()
-            .unwrap_or_else(|| FingerprintGrainResponse::new())
-    }
-
-    // optional .FingerprintHmacRipemdResponse hmac_ripemd = 20;
-
-    pub fn get_hmac_ripemd(&self) -> &FingerprintHmacRipemdResponse {
-        self.hmac_ripemd
-            .as_ref()
-            .unwrap_or_else(|| FingerprintHmacRipemdResponse::default_instance())
-    }
-    pub fn clear_hmac_ripemd(&mut self) {
-        self.hmac_ripemd.clear();
-    }
-
-    pub fn has_hmac_ripemd(&self) -> bool {
-        self.hmac_ripemd.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hmac_ripemd(&mut self, v: FingerprintHmacRipemdResponse) {
-        self.hmac_ripemd = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hmac_ripemd(&mut self) -> &mut FingerprintHmacRipemdResponse {
-        if self.hmac_ripemd.is_none() {
-            self.hmac_ripemd.set_default();
-        }
-        self.hmac_ripemd.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hmac_ripemd(&mut self) -> FingerprintHmacRipemdResponse {
-        self.hmac_ripemd
-            .take()
-            .unwrap_or_else(|| FingerprintHmacRipemdResponse::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintResponseUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.grain {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.hmac_ripemd {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.grain)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.hmac_ripemd,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.grain.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.hmac_ripemd.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.grain.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.hmac_ripemd.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintResponseUnion {
-        FingerprintResponseUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintGrainResponse>,
-                    >(
-                        "grain",
-                        |m: &FingerprintResponseUnion| &m.grain,
-                        |m: &mut FingerprintResponseUnion| &mut m.grain,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintHmacRipemdResponse>,
-                    >(
-                        "hmac_ripemd",
-                        |m: &FingerprintResponseUnion| &m.hmac_ripemd,
-                        |m: &mut FingerprintResponseUnion| &mut m.hmac_ripemd,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintResponseUnion>(
-                    "FingerprintResponseUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintResponseUnion {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintResponseUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintResponseUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintResponseUnion {
-    fn clear(&mut self) {
-        self.grain.clear();
-        self.hmac_ripemd.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintResponseUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintResponseUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintGrainResponse {
-    // message fields
-    encrypted_key: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintGrainResponse {
-    fn default() -> &'a FingerprintGrainResponse {
-        <FingerprintGrainResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintGrainResponse {
-    pub fn new() -> FingerprintGrainResponse {
-        ::std::default::Default::default()
-    }
-
-    // required bytes encrypted_key = 10;
-
-    pub fn get_encrypted_key(&self) -> &[u8] {
-        match self.encrypted_key.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_encrypted_key(&mut self) {
-        self.encrypted_key.clear();
-    }
-
-    pub fn has_encrypted_key(&self) -> bool {
-        self.encrypted_key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_encrypted_key(&mut self, v: ::std::vec::Vec<u8>) {
-        self.encrypted_key = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_encrypted_key(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.encrypted_key.is_none() {
-            self.encrypted_key.set_default();
-        }
-        self.encrypted_key.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_encrypted_key(&mut self) -> ::std::vec::Vec<u8> {
-        self.encrypted_key
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintGrainResponse {
-    fn is_initialized(&self) -> bool {
-        if self.encrypted_key.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.encrypted_key,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.encrypted_key.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.encrypted_key.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintGrainResponse {
-        FingerprintGrainResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "encrypted_key",
-                        |m: &FingerprintGrainResponse| &m.encrypted_key,
-                        |m: &mut FingerprintGrainResponse| &mut m.encrypted_key,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintGrainResponse>(
-                    "FingerprintGrainResponse",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintGrainResponse {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintGrainResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintGrainResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintGrainResponse {
-    fn clear(&mut self) {
-        self.encrypted_key.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintGrainResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintGrainResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintHmacRipemdResponse {
-    // message fields
-    hmac: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintHmacRipemdResponse {
-    fn default() -> &'a FingerprintHmacRipemdResponse {
-        <FingerprintHmacRipemdResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintHmacRipemdResponse {
-    pub fn new() -> FingerprintHmacRipemdResponse {
-        ::std::default::Default::default()
-    }
-
-    // required bytes hmac = 10;
-
-    pub fn get_hmac(&self) -> &[u8] {
-        match self.hmac.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_hmac(&mut self) {
-        self.hmac.clear();
-    }
-
-    pub fn has_hmac(&self) -> bool {
-        self.hmac.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hmac(&mut self, v: ::std::vec::Vec<u8>) {
-        self.hmac = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hmac(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.hmac.is_none() {
-            self.hmac.set_default();
-        }
-        self.hmac.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hmac(&mut self) -> ::std::vec::Vec<u8> {
-        self.hmac.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintHmacRipemdResponse {
-    fn is_initialized(&self) -> bool {
-        if self.hmac.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.hmac)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.hmac.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.hmac.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintHmacRipemdResponse {
-        FingerprintHmacRipemdResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>(
-                    "hmac",
-                    |m: &FingerprintHmacRipemdResponse| { &m.hmac },
-                    |m: &mut FingerprintHmacRipemdResponse| { &mut m.hmac },
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintHmacRipemdResponse>(
-                    "FingerprintHmacRipemdResponse",
-                    fields,
-                    file_descriptor_proto()
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintHmacRipemdResponse {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintHmacRipemdResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintHmacRipemdResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintHmacRipemdResponse {
-    fn clear(&mut self) {
-        self.hmac.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintHmacRipemdResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintHmacRipemdResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PeerTicketUnion {
-    // message fields
-    public_key: ::protobuf::SingularPtrField<PeerTicketPublicKey>,
-    old_ticket: ::protobuf::SingularPtrField<PeerTicketOld>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PeerTicketUnion {
-    fn default() -> &'a PeerTicketUnion {
-        <PeerTicketUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PeerTicketUnion {
-    pub fn new() -> PeerTicketUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .PeerTicketPublicKey public_key = 10;
-
-    pub fn get_public_key(&self) -> &PeerTicketPublicKey {
-        self.public_key
-            .as_ref()
-            .unwrap_or_else(|| PeerTicketPublicKey::default_instance())
-    }
-    pub fn clear_public_key(&mut self) {
-        self.public_key.clear();
-    }
-
-    pub fn has_public_key(&self) -> bool {
-        self.public_key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_public_key(&mut self, v: PeerTicketPublicKey) {
-        self.public_key = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_public_key(&mut self) -> &mut PeerTicketPublicKey {
-        if self.public_key.is_none() {
-            self.public_key.set_default();
-        }
-        self.public_key.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_public_key(&mut self) -> PeerTicketPublicKey {
-        self.public_key
-            .take()
-            .unwrap_or_else(|| PeerTicketPublicKey::new())
-    }
-
-    // optional .PeerTicketOld old_ticket = 20;
-
-    pub fn get_old_ticket(&self) -> &PeerTicketOld {
-        self.old_ticket
-            .as_ref()
-            .unwrap_or_else(|| PeerTicketOld::default_instance())
-    }
-    pub fn clear_old_ticket(&mut self) {
-        self.old_ticket.clear();
-    }
-
-    pub fn has_old_ticket(&self) -> bool {
-        self.old_ticket.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_old_ticket(&mut self, v: PeerTicketOld) {
-        self.old_ticket = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_old_ticket(&mut self) -> &mut PeerTicketOld {
-        if self.old_ticket.is_none() {
-            self.old_ticket.set_default();
-        }
-        self.old_ticket.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_old_ticket(&mut self) -> PeerTicketOld {
-        self.old_ticket
-            .take()
-            .unwrap_or_else(|| PeerTicketOld::new())
-    }
-}
-
-impl ::protobuf::Message for PeerTicketUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.public_key {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.old_ticket {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.public_key,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.old_ticket,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.public_key.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.old_ticket.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.public_key.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.old_ticket.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PeerTicketUnion {
-        PeerTicketUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PeerTicketPublicKey>,
-                    >(
-                        "public_key",
-                        |m: &PeerTicketUnion| &m.public_key,
-                        |m: &mut PeerTicketUnion| &mut m.public_key,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PeerTicketOld>,
-                    >(
-                        "old_ticket",
-                        |m: &PeerTicketUnion| &m.old_ticket,
-                        |m: &mut PeerTicketUnion| &mut m.old_ticket,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PeerTicketUnion>(
-                    "PeerTicketUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PeerTicketUnion {
-        static mut instance: ::protobuf::lazy::Lazy<PeerTicketUnion> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PeerTicketUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for PeerTicketUnion {
-    fn clear(&mut self) {
-        self.public_key.clear();
-        self.old_ticket.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PeerTicketUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PeerTicketUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PeerTicketPublicKey {
-    // message fields
-    public_key: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PeerTicketPublicKey {
-    fn default() -> &'a PeerTicketPublicKey {
-        <PeerTicketPublicKey as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PeerTicketPublicKey {
-    pub fn new() -> PeerTicketPublicKey {
-        ::std::default::Default::default()
-    }
-
-    // required bytes public_key = 10;
-
-    pub fn get_public_key(&self) -> &[u8] {
-        match self.public_key.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_public_key(&mut self) {
-        self.public_key.clear();
-    }
-
-    pub fn has_public_key(&self) -> bool {
-        self.public_key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_public_key(&mut self, v: ::std::vec::Vec<u8>) {
-        self.public_key = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_public_key(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.public_key.is_none() {
-            self.public_key.set_default();
-        }
-        self.public_key.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_public_key(&mut self) -> ::std::vec::Vec<u8> {
-        self.public_key
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for PeerTicketPublicKey {
-    fn is_initialized(&self) -> bool {
-        if self.public_key.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.public_key)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.public_key.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.public_key.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PeerTicketPublicKey {
-        PeerTicketPublicKey::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "public_key",
-                        |m: &PeerTicketPublicKey| &m.public_key,
-                        |m: &mut PeerTicketPublicKey| &mut m.public_key,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PeerTicketPublicKey>(
-                    "PeerTicketPublicKey",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PeerTicketPublicKey {
-        static mut instance: ::protobuf::lazy::Lazy<PeerTicketPublicKey> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PeerTicketPublicKey::new) }
-    }
-}
-
-impl ::protobuf::Clear for PeerTicketPublicKey {
-    fn clear(&mut self) {
-        self.public_key.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PeerTicketPublicKey {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PeerTicketPublicKey {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PeerTicketOld {
-    // message fields
-    peer_ticket: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    peer_ticket_signature: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PeerTicketOld {
-    fn default() -> &'a PeerTicketOld {
-        <PeerTicketOld as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PeerTicketOld {
-    pub fn new() -> PeerTicketOld {
-        ::std::default::Default::default()
-    }
-
-    // required bytes peer_ticket = 10;
-
-    pub fn get_peer_ticket(&self) -> &[u8] {
-        match self.peer_ticket.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_peer_ticket(&mut self) {
-        self.peer_ticket.clear();
-    }
-
-    pub fn has_peer_ticket(&self) -> bool {
-        self.peer_ticket.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_peer_ticket(&mut self, v: ::std::vec::Vec<u8>) {
-        self.peer_ticket = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_peer_ticket(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.peer_ticket.is_none() {
-            self.peer_ticket.set_default();
-        }
-        self.peer_ticket.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_peer_ticket(&mut self) -> ::std::vec::Vec<u8> {
-        self.peer_ticket
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required bytes peer_ticket_signature = 20;
-
-    pub fn get_peer_ticket_signature(&self) -> &[u8] {
-        match self.peer_ticket_signature.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_peer_ticket_signature(&mut self) {
-        self.peer_ticket_signature.clear();
-    }
-
-    pub fn has_peer_ticket_signature(&self) -> bool {
-        self.peer_ticket_signature.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_peer_ticket_signature(&mut self, v: ::std::vec::Vec<u8>) {
-        self.peer_ticket_signature = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_peer_ticket_signature(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.peer_ticket_signature.is_none() {
-            self.peer_ticket_signature.set_default();
-        }
-        self.peer_ticket_signature.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_peer_ticket_signature(&mut self) -> ::std::vec::Vec<u8> {
-        self.peer_ticket_signature
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for PeerTicketOld {
-    fn is_initialized(&self) -> bool {
-        if self.peer_ticket.is_none() {
-            return false;
-        }
-        if self.peer_ticket_signature.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.peer_ticket)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.peer_ticket_signature,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.peer_ticket.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        if let Some(ref v) = self.peer_ticket_signature.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(20, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.peer_ticket.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        if let Some(ref v) = self.peer_ticket_signature.as_ref() {
-            os.write_bytes(20, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PeerTicketOld {
-        PeerTicketOld::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "peer_ticket",
-                        |m: &PeerTicketOld| &m.peer_ticket,
-                        |m: &mut PeerTicketOld| &mut m.peer_ticket,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "peer_ticket_signature",
-                        |m: &PeerTicketOld| &m.peer_ticket_signature,
-                        |m: &mut PeerTicketOld| &mut m.peer_ticket_signature,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PeerTicketOld>(
-                    "PeerTicketOld",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PeerTicketOld {
-        static mut instance: ::protobuf::lazy::Lazy<PeerTicketOld> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PeerTicketOld::new) }
-    }
-}
-
-impl ::protobuf::Clear for PeerTicketOld {
-    fn clear(&mut self) {
-        self.peer_ticket.clear();
-        self.peer_ticket_signature.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PeerTicketOld {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PeerTicketOld {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct SystemInfo {
-    // message fields
-    cpu_family: ::std::option::Option<CpuFamily>,
-    cpu_subtype: ::std::option::Option<u32>,
-    cpu_ext: ::std::option::Option<u32>,
-    brand: ::std::option::Option<Brand>,
-    brand_flags: ::std::option::Option<u32>,
-    os: ::std::option::Option<Os>,
-    os_version: ::std::option::Option<u32>,
-    os_ext: ::std::option::Option<u32>,
-    system_information_string: ::protobuf::SingularField<::std::string::String>,
-    device_id: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a SystemInfo {
-    fn default() -> &'a SystemInfo {
-        <SystemInfo as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl SystemInfo {
-    pub fn new() -> SystemInfo {
-        ::std::default::Default::default()
-    }
-
-    // required .CpuFamily cpu_family = 10;
-
-    pub fn get_cpu_family(&self) -> CpuFamily {
-        self.cpu_family.unwrap_or(CpuFamily::CPU_UNKNOWN)
-    }
-    pub fn clear_cpu_family(&mut self) {
-        self.cpu_family = ::std::option::Option::None;
-    }
-
-    pub fn has_cpu_family(&self) -> bool {
-        self.cpu_family.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cpu_family(&mut self, v: CpuFamily) {
-        self.cpu_family = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 cpu_subtype = 20;
-
-    pub fn get_cpu_subtype(&self) -> u32 {
-        self.cpu_subtype.unwrap_or(0)
-    }
-    pub fn clear_cpu_subtype(&mut self) {
-        self.cpu_subtype = ::std::option::Option::None;
-    }
-
-    pub fn has_cpu_subtype(&self) -> bool {
-        self.cpu_subtype.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cpu_subtype(&mut self, v: u32) {
-        self.cpu_subtype = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 cpu_ext = 30;
-
-    pub fn get_cpu_ext(&self) -> u32 {
-        self.cpu_ext.unwrap_or(0)
-    }
-    pub fn clear_cpu_ext(&mut self) {
-        self.cpu_ext = ::std::option::Option::None;
-    }
-
-    pub fn has_cpu_ext(&self) -> bool {
-        self.cpu_ext.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cpu_ext(&mut self, v: u32) {
-        self.cpu_ext = ::std::option::Option::Some(v);
-    }
-
-    // optional .Brand brand = 40;
-
-    pub fn get_brand(&self) -> Brand {
-        self.brand.unwrap_or(Brand::BRAND_UNBRANDED)
-    }
-    pub fn clear_brand(&mut self) {
-        self.brand = ::std::option::Option::None;
-    }
-
-    pub fn has_brand(&self) -> bool {
-        self.brand.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_brand(&mut self, v: Brand) {
-        self.brand = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 brand_flags = 50;
-
-    pub fn get_brand_flags(&self) -> u32 {
-        self.brand_flags.unwrap_or(0)
-    }
-    pub fn clear_brand_flags(&mut self) {
-        self.brand_flags = ::std::option::Option::None;
-    }
-
-    pub fn has_brand_flags(&self) -> bool {
-        self.brand_flags.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_brand_flags(&mut self, v: u32) {
-        self.brand_flags = ::std::option::Option::Some(v);
-    }
-
-    // required .Os os = 60;
-
-    pub fn get_os(&self) -> Os {
-        self.os.unwrap_or(Os::OS_UNKNOWN)
-    }
-    pub fn clear_os(&mut self) {
-        self.os = ::std::option::Option::None;
-    }
-
-    pub fn has_os(&self) -> bool {
-        self.os.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_os(&mut self, v: Os) {
-        self.os = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 os_version = 70;
-
-    pub fn get_os_version(&self) -> u32 {
-        self.os_version.unwrap_or(0)
-    }
-    pub fn clear_os_version(&mut self) {
-        self.os_version = ::std::option::Option::None;
-    }
-
-    pub fn has_os_version(&self) -> bool {
-        self.os_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_os_version(&mut self, v: u32) {
-        self.os_version = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 os_ext = 80;
-
-    pub fn get_os_ext(&self) -> u32 {
-        self.os_ext.unwrap_or(0)
-    }
-    pub fn clear_os_ext(&mut self) {
-        self.os_ext = ::std::option::Option::None;
-    }
-
-    pub fn has_os_ext(&self) -> bool {
-        self.os_ext.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_os_ext(&mut self, v: u32) {
-        self.os_ext = ::std::option::Option::Some(v);
-    }
-
-    // optional string system_information_string = 90;
-
-    pub fn get_system_information_string(&self) -> &str {
-        match self.system_information_string.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_system_information_string(&mut self) {
-        self.system_information_string.clear();
-    }
-
-    pub fn has_system_information_string(&self) -> bool {
-        self.system_information_string.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_system_information_string(&mut self, v: ::std::string::String) {
-        self.system_information_string = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_system_information_string(&mut self) -> &mut ::std::string::String {
-        if self.system_information_string.is_none() {
-            self.system_information_string.set_default();
-        }
-        self.system_information_string.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_system_information_string(&mut self) -> ::std::string::String {
-        self.system_information_string
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string device_id = 100;
-
-    pub fn get_device_id(&self) -> &str {
-        match self.device_id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_device_id(&mut self) {
-        self.device_id.clear();
-    }
-
-    pub fn has_device_id(&self) -> bool {
-        self.device_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_device_id(&mut self, v: ::std::string::String) {
-        self.device_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_device_id(&mut self) -> &mut ::std::string::String {
-        if self.device_id.is_none() {
-            self.device_id.set_default();
-        }
-        self.device_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_device_id(&mut self) -> ::std::string::String {
-        self.device_id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for SystemInfo {
-    fn is_initialized(&self) -> bool {
-        if self.cpu_family.is_none() {
-            return false;
-        }
-        if self.os.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.cpu_family,
-                    10,
-                    &mut self.unknown_fields,
-                )?,
-                20 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.cpu_subtype = ::std::option::Option::Some(tmp);
-                }
-                30 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.cpu_ext = ::std::option::Option::Some(tmp);
-                }
-                40 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.brand,
-                    40,
-                    &mut self.unknown_fields,
-                )?,
-                50 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.brand_flags = ::std::option::Option::Some(tmp);
-                }
-                60 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.os,
-                    60,
-                    &mut self.unknown_fields,
-                )?,
-                70 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.os_version = ::std::option::Option::Some(tmp);
-                }
-                80 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.os_ext = ::std::option::Option::Some(tmp);
-                }
-                90 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.system_information_string,
-                    )?;
-                }
-                100 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.device_id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.cpu_family {
-            my_size += ::protobuf::rt::enum_size(10, v);
-        }
-        if let Some(v) = self.cpu_subtype {
-            my_size += ::protobuf::rt::value_size(20, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.cpu_ext {
-            my_size += ::protobuf::rt::value_size(30, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.brand {
-            my_size += ::protobuf::rt::enum_size(40, v);
-        }
-        if let Some(v) = self.brand_flags {
-            my_size += ::protobuf::rt::value_size(50, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.os {
-            my_size += ::protobuf::rt::enum_size(60, v);
-        }
-        if let Some(v) = self.os_version {
-            my_size += ::protobuf::rt::value_size(70, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.os_ext {
-            my_size += ::protobuf::rt::value_size(80, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.system_information_string.as_ref() {
-            my_size += ::protobuf::rt::string_size(90, &v);
-        }
-        if let Some(ref v) = self.device_id.as_ref() {
-            my_size += ::protobuf::rt::string_size(100, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.cpu_family {
-            os.write_enum(10, v.value())?;
-        }
-        if let Some(v) = self.cpu_subtype {
-            os.write_uint32(20, v)?;
-        }
-        if let Some(v) = self.cpu_ext {
-            os.write_uint32(30, v)?;
-        }
-        if let Some(v) = self.brand {
-            os.write_enum(40, v.value())?;
-        }
-        if let Some(v) = self.brand_flags {
-            os.write_uint32(50, v)?;
-        }
-        if let Some(v) = self.os {
-            os.write_enum(60, v.value())?;
-        }
-        if let Some(v) = self.os_version {
-            os.write_uint32(70, v)?;
-        }
-        if let Some(v) = self.os_ext {
-            os.write_uint32(80, v)?;
-        }
-        if let Some(ref v) = self.system_information_string.as_ref() {
-            os.write_string(90, &v)?;
-        }
-        if let Some(ref v) = self.device_id.as_ref() {
-            os.write_string(100, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> SystemInfo {
-        SystemInfo::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<CpuFamily>,
-                >(
-                    "cpu_family",
-                    |m: &SystemInfo| &m.cpu_family,
-                    |m: &mut SystemInfo| &mut m.cpu_family,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "cpu_subtype",
-                    |m: &SystemInfo| &m.cpu_subtype,
-                    |m: &mut SystemInfo| &mut m.cpu_subtype,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "cpu_ext",
-                    |m: &SystemInfo| &m.cpu_ext,
-                    |m: &mut SystemInfo| &mut m.cpu_ext,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Brand>,
-                >(
-                    "brand",
-                    |m: &SystemInfo| &m.brand,
-                    |m: &mut SystemInfo| &mut m.brand,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "brand_flags",
-                    |m: &SystemInfo| &m.brand_flags,
-                    |m: &mut SystemInfo| &mut m.brand_flags,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Os>,
-                >(
-                    "os",
-                    |m: &SystemInfo| &m.os,
-                    |m: &mut SystemInfo| &mut m.os,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "os_version",
-                    |m: &SystemInfo| &m.os_version,
-                    |m: &mut SystemInfo| &mut m.os_version,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "os_ext",
-                    |m: &SystemInfo| &m.os_ext,
-                    |m: &mut SystemInfo| &mut m.os_ext,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "system_information_string",
-                        |m: &SystemInfo| &m.system_information_string,
-                        |m: &mut SystemInfo| &mut m.system_information_string,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "device_id",
-                        |m: &SystemInfo| &m.device_id,
-                        |m: &mut SystemInfo| &mut m.device_id,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<SystemInfo>(
-                    "SystemInfo",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static SystemInfo {
-        static mut instance: ::protobuf::lazy::Lazy<SystemInfo> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(SystemInfo::new) }
-    }
-}
-
-impl ::protobuf::Clear for SystemInfo {
-    fn clear(&mut self) {
-        self.cpu_family = ::std::option::Option::None;
-        self.cpu_subtype = ::std::option::Option::None;
-        self.cpu_ext = ::std::option::Option::None;
-        self.brand = ::std::option::Option::None;
-        self.brand_flags = ::std::option::Option::None;
-        self.os = ::std::option::Option::None;
-        self.os_version = ::std::option::Option::None;
-        self.os_ext = ::std::option::Option::None;
-        self.system_information_string.clear();
-        self.device_id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for SystemInfo {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for SystemInfo {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LibspotifyAppKey {
-    // message fields
-    version: ::std::option::Option<u32>,
-    devkey: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    signature: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    useragent: ::protobuf::SingularField<::std::string::String>,
-    callback_hash: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LibspotifyAppKey {
-    fn default() -> &'a LibspotifyAppKey {
-        <LibspotifyAppKey as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LibspotifyAppKey {
-    pub fn new() -> LibspotifyAppKey {
-        ::std::default::Default::default()
-    }
-
-    // required uint32 version = 1;
-
-    pub fn get_version(&self) -> u32 {
-        self.version.unwrap_or(0)
-    }
-    pub fn clear_version(&mut self) {
-        self.version = ::std::option::Option::None;
-    }
-
-    pub fn has_version(&self) -> bool {
-        self.version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_version(&mut self, v: u32) {
-        self.version = ::std::option::Option::Some(v);
-    }
-
-    // required bytes devkey = 2;
-
-    pub fn get_devkey(&self) -> &[u8] {
-        match self.devkey.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_devkey(&mut self) {
-        self.devkey.clear();
-    }
-
-    pub fn has_devkey(&self) -> bool {
-        self.devkey.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_devkey(&mut self, v: ::std::vec::Vec<u8>) {
-        self.devkey = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_devkey(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.devkey.is_none() {
-            self.devkey.set_default();
-        }
-        self.devkey.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_devkey(&mut self) -> ::std::vec::Vec<u8> {
-        self.devkey.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required bytes signature = 3;
-
-    pub fn get_signature(&self) -> &[u8] {
-        match self.signature.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_signature(&mut self) {
-        self.signature.clear();
-    }
-
-    pub fn has_signature(&self) -> bool {
-        self.signature.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_signature(&mut self, v: ::std::vec::Vec<u8>) {
-        self.signature = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_signature(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.signature.is_none() {
-            self.signature.set_default();
-        }
-        self.signature.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_signature(&mut self) -> ::std::vec::Vec<u8> {
-        self.signature
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required string useragent = 4;
-
-    pub fn get_useragent(&self) -> &str {
-        match self.useragent.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_useragent(&mut self) {
-        self.useragent.clear();
-    }
-
-    pub fn has_useragent(&self) -> bool {
-        self.useragent.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_useragent(&mut self, v: ::std::string::String) {
-        self.useragent = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_useragent(&mut self) -> &mut ::std::string::String {
-        if self.useragent.is_none() {
-            self.useragent.set_default();
-        }
-        self.useragent.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_useragent(&mut self) -> ::std::string::String {
-        self.useragent
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // required bytes callback_hash = 5;
-
-    pub fn get_callback_hash(&self) -> &[u8] {
-        match self.callback_hash.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_callback_hash(&mut self) {
-        self.callback_hash.clear();
-    }
-
-    pub fn has_callback_hash(&self) -> bool {
-        self.callback_hash.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_callback_hash(&mut self, v: ::std::vec::Vec<u8>) {
-        self.callback_hash = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_callback_hash(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.callback_hash.is_none() {
-            self.callback_hash.set_default();
-        }
-        self.callback_hash.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_callback_hash(&mut self) -> ::std::vec::Vec<u8> {
-        self.callback_hash
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for LibspotifyAppKey {
-    fn is_initialized(&self) -> bool {
-        if self.version.is_none() {
-            return false;
-        }
-        if self.devkey.is_none() {
-            return false;
-        }
-        if self.signature.is_none() {
-            return false;
-        }
-        if self.useragent.is_none() {
-            return false;
-        }
-        if self.callback_hash.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.version = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.devkey)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.signature)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.useragent)?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.callback_hash,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.version {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.devkey.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(2, &v);
-        }
-        if let Some(ref v) = self.signature.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(3, &v);
-        }
-        if let Some(ref v) = self.useragent.as_ref() {
-            my_size += ::protobuf::rt::string_size(4, &v);
-        }
-        if let Some(ref v) = self.callback_hash.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(5, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.version {
-            os.write_uint32(1, v)?;
-        }
-        if let Some(ref v) = self.devkey.as_ref() {
-            os.write_bytes(2, &v)?;
-        }
-        if let Some(ref v) = self.signature.as_ref() {
-            os.write_bytes(3, &v)?;
-        }
-        if let Some(ref v) = self.useragent.as_ref() {
-            os.write_string(4, &v)?;
-        }
-        if let Some(ref v) = self.callback_hash.as_ref() {
-            os.write_bytes(5, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LibspotifyAppKey {
-        LibspotifyAppKey::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "version",
-                    |m: &LibspotifyAppKey| &m.version,
-                    |m: &mut LibspotifyAppKey| &mut m.version,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "devkey",
-                        |m: &LibspotifyAppKey| &m.devkey,
-                        |m: &mut LibspotifyAppKey| &mut m.devkey,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "signature",
-                        |m: &LibspotifyAppKey| &m.signature,
-                        |m: &mut LibspotifyAppKey| &mut m.signature,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "useragent",
-                        |m: &LibspotifyAppKey| &m.useragent,
-                        |m: &mut LibspotifyAppKey| &mut m.useragent,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "callback_hash",
-                        |m: &LibspotifyAppKey| &m.callback_hash,
-                        |m: &mut LibspotifyAppKey| &mut m.callback_hash,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LibspotifyAppKey>(
-                    "LibspotifyAppKey",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LibspotifyAppKey {
-        static mut instance: ::protobuf::lazy::Lazy<LibspotifyAppKey> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LibspotifyAppKey::new) }
-    }
-}
-
-impl ::protobuf::Clear for LibspotifyAppKey {
-    fn clear(&mut self) {
-        self.version = ::std::option::Option::None;
-        self.devkey.clear();
-        self.signature.clear();
-        self.useragent.clear();
-        self.callback_hash.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LibspotifyAppKey {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LibspotifyAppKey {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientInfo {
-    // message fields
-    limited: ::std::option::Option<bool>,
-    fb: ::protobuf::SingularPtrField<ClientInfoFacebook>,
-    language: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientInfo {
-    fn default() -> &'a ClientInfo {
-        <ClientInfo as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientInfo {
-    pub fn new() -> ClientInfo {
-        ::std::default::Default::default()
-    }
-
-    // optional bool limited = 1;
-
-    pub fn get_limited(&self) -> bool {
-        self.limited.unwrap_or(false)
-    }
-    pub fn clear_limited(&mut self) {
-        self.limited = ::std::option::Option::None;
-    }
-
-    pub fn has_limited(&self) -> bool {
-        self.limited.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_limited(&mut self, v: bool) {
-        self.limited = ::std::option::Option::Some(v);
-    }
-
-    // optional .ClientInfoFacebook fb = 2;
-
-    pub fn get_fb(&self) -> &ClientInfoFacebook {
-        self.fb
-            .as_ref()
-            .unwrap_or_else(|| ClientInfoFacebook::default_instance())
-    }
-    pub fn clear_fb(&mut self) {
-        self.fb.clear();
-    }
-
-    pub fn has_fb(&self) -> bool {
-        self.fb.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fb(&mut self, v: ClientInfoFacebook) {
-        self.fb = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_fb(&mut self) -> &mut ClientInfoFacebook {
-        if self.fb.is_none() {
-            self.fb.set_default();
-        }
-        self.fb.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_fb(&mut self) -> ClientInfoFacebook {
-        self.fb.take().unwrap_or_else(|| ClientInfoFacebook::new())
-    }
-
-    // optional string language = 3;
-
-    pub fn get_language(&self) -> &str {
-        match self.language.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_language(&mut self) {
-        self.language.clear();
-    }
-
-    pub fn has_language(&self) -> bool {
-        self.language.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_language(&mut self, v: ::std::string::String) {
-        self.language = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_language(&mut self) -> &mut ::std::string::String {
-        if self.language.is_none() {
-            self.language.set_default();
-        }
-        self.language.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_language(&mut self) -> ::std::string::String {
-        self.language
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for ClientInfo {
-    fn is_initialized(&self) -> bool {
-        for v in &self.fb {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.limited = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.fb)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.language)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.limited {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.fb.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            my_size += ::protobuf::rt::string_size(3, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.limited {
-            os.write_bool(1, v)?;
-        }
-        if let Some(ref v) = self.fb.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            os.write_string(3, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientInfo {
-        ClientInfo::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "limited",
-                    |m: &ClientInfo| &m.limited,
-                    |m: &mut ClientInfo| &mut m.limited,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ClientInfoFacebook>,
-                    >(
-                        "fb", |m: &ClientInfo| &m.fb, |m: &mut ClientInfo| &mut m.fb
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "language",
-                        |m: &ClientInfo| &m.language,
-                        |m: &mut ClientInfo| &mut m.language,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientInfo>(
-                    "ClientInfo",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientInfo {
-        static mut instance: ::protobuf::lazy::Lazy<ClientInfo> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientInfo::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientInfo {
-    fn clear(&mut self) {
-        self.limited = ::std::option::Option::None;
-        self.fb.clear();
-        self.language.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientInfo {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientInfo {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientInfoFacebook {
-    // message fields
-    machine_id: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientInfoFacebook {
-    fn default() -> &'a ClientInfoFacebook {
-        <ClientInfoFacebook as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientInfoFacebook {
-    pub fn new() -> ClientInfoFacebook {
-        ::std::default::Default::default()
-    }
-
-    // optional string machine_id = 1;
-
-    pub fn get_machine_id(&self) -> &str {
-        match self.machine_id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_machine_id(&mut self) {
-        self.machine_id.clear();
-    }
-
-    pub fn has_machine_id(&self) -> bool {
-        self.machine_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_machine_id(&mut self, v: ::std::string::String) {
-        self.machine_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_machine_id(&mut self) -> &mut ::std::string::String {
-        if self.machine_id.is_none() {
-            self.machine_id.set_default();
-        }
-        self.machine_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_machine_id(&mut self) -> ::std::string::String {
-        self.machine_id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for ClientInfoFacebook {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.machine_id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.machine_id.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.machine_id.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientInfoFacebook {
-        ClientInfoFacebook::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "machine_id",
-                        |m: &ClientInfoFacebook| &m.machine_id,
-                        |m: &mut ClientInfoFacebook| &mut m.machine_id,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientInfoFacebook>(
-                    "ClientInfoFacebook",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientInfoFacebook {
-        static mut instance: ::protobuf::lazy::Lazy<ClientInfoFacebook> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientInfoFacebook::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientInfoFacebook {
-    fn clear(&mut self) {
-        self.machine_id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientInfoFacebook {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientInfoFacebook {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct APWelcome {
-    // message fields
-    canonical_username: ::protobuf::SingularField<::std::string::String>,
-    account_type_logged_in: ::std::option::Option<AccountType>,
-    credentials_type_logged_in: ::std::option::Option<AccountType>,
-    reusable_auth_credentials_type: ::std::option::Option<AuthenticationType>,
-    reusable_auth_credentials: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    lfs_secret: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    account_info: ::protobuf::SingularPtrField<AccountInfo>,
-    fb: ::protobuf::SingularPtrField<AccountInfoFacebook>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a APWelcome {
-    fn default() -> &'a APWelcome {
-        <APWelcome as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl APWelcome {
-    pub fn new() -> APWelcome {
-        ::std::default::Default::default()
-    }
-
-    // required string canonical_username = 10;
-
-    pub fn get_canonical_username(&self) -> &str {
-        match self.canonical_username.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_canonical_username(&mut self) {
-        self.canonical_username.clear();
-    }
-
-    pub fn has_canonical_username(&self) -> bool {
-        self.canonical_username.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_canonical_username(&mut self, v: ::std::string::String) {
-        self.canonical_username = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_canonical_username(&mut self) -> &mut ::std::string::String {
-        if self.canonical_username.is_none() {
-            self.canonical_username.set_default();
-        }
-        self.canonical_username.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_canonical_username(&mut self) -> ::std::string::String {
-        self.canonical_username
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // required .AccountType account_type_logged_in = 20;
-
-    pub fn get_account_type_logged_in(&self) -> AccountType {
-        self.account_type_logged_in.unwrap_or(AccountType::Spotify)
-    }
-    pub fn clear_account_type_logged_in(&mut self) {
-        self.account_type_logged_in = ::std::option::Option::None;
-    }
-
-    pub fn has_account_type_logged_in(&self) -> bool {
-        self.account_type_logged_in.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_account_type_logged_in(&mut self, v: AccountType) {
-        self.account_type_logged_in = ::std::option::Option::Some(v);
-    }
-
-    // required .AccountType credentials_type_logged_in = 25;
-
-    pub fn get_credentials_type_logged_in(&self) -> AccountType {
-        self.credentials_type_logged_in
-            .unwrap_or(AccountType::Spotify)
-    }
-    pub fn clear_credentials_type_logged_in(&mut self) {
-        self.credentials_type_logged_in = ::std::option::Option::None;
-    }
-
-    pub fn has_credentials_type_logged_in(&self) -> bool {
-        self.credentials_type_logged_in.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_credentials_type_logged_in(&mut self, v: AccountType) {
-        self.credentials_type_logged_in = ::std::option::Option::Some(v);
-    }
-
-    // required .AuthenticationType reusable_auth_credentials_type = 30;
-
-    pub fn get_reusable_auth_credentials_type(&self) -> AuthenticationType {
-        self.reusable_auth_credentials_type
-            .unwrap_or(AuthenticationType::AUTHENTICATION_USER_PASS)
-    }
-    pub fn clear_reusable_auth_credentials_type(&mut self) {
-        self.reusable_auth_credentials_type = ::std::option::Option::None;
-    }
-
-    pub fn has_reusable_auth_credentials_type(&self) -> bool {
-        self.reusable_auth_credentials_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_reusable_auth_credentials_type(&mut self, v: AuthenticationType) {
-        self.reusable_auth_credentials_type = ::std::option::Option::Some(v);
-    }
-
-    // required bytes reusable_auth_credentials = 40;
-
-    pub fn get_reusable_auth_credentials(&self) -> &[u8] {
-        match self.reusable_auth_credentials.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_reusable_auth_credentials(&mut self) {
-        self.reusable_auth_credentials.clear();
-    }
-
-    pub fn has_reusable_auth_credentials(&self) -> bool {
-        self.reusable_auth_credentials.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_reusable_auth_credentials(&mut self, v: ::std::vec::Vec<u8>) {
-        self.reusable_auth_credentials = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_reusable_auth_credentials(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.reusable_auth_credentials.is_none() {
-            self.reusable_auth_credentials.set_default();
-        }
-        self.reusable_auth_credentials.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_reusable_auth_credentials(&mut self) -> ::std::vec::Vec<u8> {
-        self.reusable_auth_credentials
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes lfs_secret = 50;
-
-    pub fn get_lfs_secret(&self) -> &[u8] {
-        match self.lfs_secret.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_lfs_secret(&mut self) {
-        self.lfs_secret.clear();
-    }
-
-    pub fn has_lfs_secret(&self) -> bool {
-        self.lfs_secret.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_lfs_secret(&mut self, v: ::std::vec::Vec<u8>) {
-        self.lfs_secret = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_lfs_secret(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.lfs_secret.is_none() {
-            self.lfs_secret.set_default();
-        }
-        self.lfs_secret.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_lfs_secret(&mut self) -> ::std::vec::Vec<u8> {
-        self.lfs_secret
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .AccountInfo account_info = 60;
-
-    pub fn get_account_info(&self) -> &AccountInfo {
-        self.account_info
-            .as_ref()
-            .unwrap_or_else(|| AccountInfo::default_instance())
-    }
-    pub fn clear_account_info(&mut self) {
-        self.account_info.clear();
-    }
-
-    pub fn has_account_info(&self) -> bool {
-        self.account_info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_account_info(&mut self, v: AccountInfo) {
-        self.account_info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_account_info(&mut self) -> &mut AccountInfo {
-        if self.account_info.is_none() {
-            self.account_info.set_default();
-        }
-        self.account_info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_account_info(&mut self) -> AccountInfo {
-        self.account_info
-            .take()
-            .unwrap_or_else(|| AccountInfo::new())
-    }
-
-    // optional .AccountInfoFacebook fb = 70;
-
-    pub fn get_fb(&self) -> &AccountInfoFacebook {
-        self.fb
-            .as_ref()
-            .unwrap_or_else(|| AccountInfoFacebook::default_instance())
-    }
-    pub fn clear_fb(&mut self) {
-        self.fb.clear();
-    }
-
-    pub fn has_fb(&self) -> bool {
-        self.fb.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fb(&mut self, v: AccountInfoFacebook) {
-        self.fb = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_fb(&mut self) -> &mut AccountInfoFacebook {
-        if self.fb.is_none() {
-            self.fb.set_default();
-        }
-        self.fb.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_fb(&mut self) -> AccountInfoFacebook {
-        self.fb.take().unwrap_or_else(|| AccountInfoFacebook::new())
-    }
-}
-
-impl ::protobuf::Message for APWelcome {
-    fn is_initialized(&self) -> bool {
-        if self.canonical_username.is_none() {
-            return false;
-        }
-        if self.account_type_logged_in.is_none() {
-            return false;
-        }
-        if self.credentials_type_logged_in.is_none() {
-            return false;
-        }
-        if self.reusable_auth_credentials_type.is_none() {
-            return false;
-        }
-        if self.reusable_auth_credentials.is_none() {
-            return false;
-        }
-        for v in &self.account_info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.fb {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.canonical_username,
-                    )?;
-                }
-                20 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.account_type_logged_in,
-                    20,
-                    &mut self.unknown_fields,
-                )?,
-                25 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.credentials_type_logged_in,
-                    25,
-                    &mut self.unknown_fields,
-                )?,
-                30 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.reusable_auth_credentials_type,
-                    30,
-                    &mut self.unknown_fields,
-                )?,
-                40 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.reusable_auth_credentials,
-                    )?;
-                }
-                50 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.lfs_secret)?;
-                }
-                60 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.account_info,
-                    )?;
-                }
-                70 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.fb)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.canonical_username.as_ref() {
-            my_size += ::protobuf::rt::string_size(10, &v);
-        }
-        if let Some(v) = self.account_type_logged_in {
-            my_size += ::protobuf::rt::enum_size(20, v);
-        }
-        if let Some(v) = self.credentials_type_logged_in {
-            my_size += ::protobuf::rt::enum_size(25, v);
-        }
-        if let Some(v) = self.reusable_auth_credentials_type {
-            my_size += ::protobuf::rt::enum_size(30, v);
-        }
-        if let Some(ref v) = self.reusable_auth_credentials.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(40, &v);
-        }
-        if let Some(ref v) = self.lfs_secret.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(50, &v);
-        }
-        if let Some(ref v) = self.account_info.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.fb.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.canonical_username.as_ref() {
-            os.write_string(10, &v)?;
-        }
-        if let Some(v) = self.account_type_logged_in {
-            os.write_enum(20, v.value())?;
-        }
-        if let Some(v) = self.credentials_type_logged_in {
-            os.write_enum(25, v.value())?;
-        }
-        if let Some(v) = self.reusable_auth_credentials_type {
-            os.write_enum(30, v.value())?;
-        }
-        if let Some(ref v) = self.reusable_auth_credentials.as_ref() {
-            os.write_bytes(40, &v)?;
-        }
-        if let Some(ref v) = self.lfs_secret.as_ref() {
-            os.write_bytes(50, &v)?;
-        }
-        if let Some(ref v) = self.account_info.as_ref() {
-            os.write_tag(60, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.fb.as_ref() {
-            os.write_tag(70, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> APWelcome {
-        APWelcome::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "canonical_username",
-                        |m: &APWelcome| &m.canonical_username,
-                        |m: &mut APWelcome| &mut m.canonical_username,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AccountType>,
-                >(
-                    "account_type_logged_in",
-                    |m: &APWelcome| &m.account_type_logged_in,
-                    |m: &mut APWelcome| &mut m.account_type_logged_in,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AccountType>,
-                >(
-                    "credentials_type_logged_in",
-                    |m: &APWelcome| &m.credentials_type_logged_in,
-                    |m: &mut APWelcome| &mut m.credentials_type_logged_in,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AuthenticationType>,
-                >(
-                    "reusable_auth_credentials_type",
-                    |m: &APWelcome| &m.reusable_auth_credentials_type,
-                    |m: &mut APWelcome| &mut m.reusable_auth_credentials_type,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "reusable_auth_credentials",
-                        |m: &APWelcome| &m.reusable_auth_credentials,
-                        |m: &mut APWelcome| &mut m.reusable_auth_credentials,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "lfs_secret",
-                        |m: &APWelcome| &m.lfs_secret,
-                        |m: &mut APWelcome| &mut m.lfs_secret,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AccountInfo>,
-                    >(
-                        "account_info",
-                        |m: &APWelcome| &m.account_info,
-                        |m: &mut APWelcome| &mut m.account_info,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AccountInfoFacebook>,
-                    >(
-                        "fb", |m: &APWelcome| &m.fb, |m: &mut APWelcome| &mut m.fb
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<APWelcome>(
-                    "APWelcome",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static APWelcome {
-        static mut instance: ::protobuf::lazy::Lazy<APWelcome> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(APWelcome::new) }
-    }
-}
-
-impl ::protobuf::Clear for APWelcome {
-    fn clear(&mut self) {
-        self.canonical_username.clear();
-        self.account_type_logged_in = ::std::option::Option::None;
-        self.credentials_type_logged_in = ::std::option::Option::None;
-        self.reusable_auth_credentials_type = ::std::option::Option::None;
-        self.reusable_auth_credentials.clear();
-        self.lfs_secret.clear();
-        self.account_info.clear();
-        self.fb.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for APWelcome {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for APWelcome {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct AccountInfo {
-    // message fields
-    spotify: ::protobuf::SingularPtrField<AccountInfoSpotify>,
-    facebook: ::protobuf::SingularPtrField<AccountInfoFacebook>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a AccountInfo {
-    fn default() -> &'a AccountInfo {
-        <AccountInfo as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl AccountInfo {
-    pub fn new() -> AccountInfo {
-        ::std::default::Default::default()
-    }
-
-    // optional .AccountInfoSpotify spotify = 1;
-
-    pub fn get_spotify(&self) -> &AccountInfoSpotify {
-        self.spotify
-            .as_ref()
-            .unwrap_or_else(|| AccountInfoSpotify::default_instance())
-    }
-    pub fn clear_spotify(&mut self) {
-        self.spotify.clear();
-    }
-
-    pub fn has_spotify(&self) -> bool {
-        self.spotify.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_spotify(&mut self, v: AccountInfoSpotify) {
-        self.spotify = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_spotify(&mut self) -> &mut AccountInfoSpotify {
-        if self.spotify.is_none() {
-            self.spotify.set_default();
-        }
-        self.spotify.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_spotify(&mut self) -> AccountInfoSpotify {
-        self.spotify
-            .take()
-            .unwrap_or_else(|| AccountInfoSpotify::new())
-    }
-
-    // optional .AccountInfoFacebook facebook = 2;
-
-    pub fn get_facebook(&self) -> &AccountInfoFacebook {
-        self.facebook
-            .as_ref()
-            .unwrap_or_else(|| AccountInfoFacebook::default_instance())
-    }
-    pub fn clear_facebook(&mut self) {
-        self.facebook.clear();
-    }
-
-    pub fn has_facebook(&self) -> bool {
-        self.facebook.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_facebook(&mut self, v: AccountInfoFacebook) {
-        self.facebook = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_facebook(&mut self) -> &mut AccountInfoFacebook {
-        if self.facebook.is_none() {
-            self.facebook.set_default();
-        }
-        self.facebook.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_facebook(&mut self) -> AccountInfoFacebook {
-        self.facebook
-            .take()
-            .unwrap_or_else(|| AccountInfoFacebook::new())
-    }
-}
-
-impl ::protobuf::Message for AccountInfo {
-    fn is_initialized(&self) -> bool {
-        for v in &self.spotify {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.facebook {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.spotify)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.facebook)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.spotify.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.facebook.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.spotify.as_ref() {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.facebook.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> AccountInfo {
-        AccountInfo::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AccountInfoSpotify>,
-                    >(
-                        "spotify",
-                        |m: &AccountInfo| &m.spotify,
-                        |m: &mut AccountInfo| &mut m.spotify,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AccountInfoFacebook>,
-                    >(
-                        "facebook",
-                        |m: &AccountInfo| &m.facebook,
-                        |m: &mut AccountInfo| &mut m.facebook,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<AccountInfo>(
-                    "AccountInfo",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static AccountInfo {
-        static mut instance: ::protobuf::lazy::Lazy<AccountInfo> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(AccountInfo::new) }
-    }
-}
-
-impl ::protobuf::Clear for AccountInfo {
-    fn clear(&mut self) {
-        self.spotify.clear();
-        self.facebook.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for AccountInfo {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AccountInfo {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct AccountInfoSpotify {
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a AccountInfoSpotify {
-    fn default() -> &'a AccountInfoSpotify {
-        <AccountInfoSpotify as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl AccountInfoSpotify {
-    pub fn new() -> AccountInfoSpotify {
-        ::std::default::Default::default()
-    }
-}
-
-impl ::protobuf::Message for AccountInfoSpotify {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> AccountInfoSpotify {
-        AccountInfoSpotify::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<AccountInfoSpotify>(
-                    "AccountInfoSpotify",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static AccountInfoSpotify {
-        static mut instance: ::protobuf::lazy::Lazy<AccountInfoSpotify> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(AccountInfoSpotify::new) }
-    }
-}
-
-impl ::protobuf::Clear for AccountInfoSpotify {
-    fn clear(&mut self) {
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for AccountInfoSpotify {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AccountInfoSpotify {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct AccountInfoFacebook {
-    // message fields
-    access_token: ::protobuf::SingularField<::std::string::String>,
-    machine_id: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a AccountInfoFacebook {
-    fn default() -> &'a AccountInfoFacebook {
-        <AccountInfoFacebook as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl AccountInfoFacebook {
-    pub fn new() -> AccountInfoFacebook {
-        ::std::default::Default::default()
-    }
-
-    // optional string access_token = 1;
-
-    pub fn get_access_token(&self) -> &str {
-        match self.access_token.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_access_token(&mut self) {
-        self.access_token.clear();
-    }
-
-    pub fn has_access_token(&self) -> bool {
-        self.access_token.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_access_token(&mut self, v: ::std::string::String) {
-        self.access_token = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_access_token(&mut self) -> &mut ::std::string::String {
-        if self.access_token.is_none() {
-            self.access_token.set_default();
-        }
-        self.access_token.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_access_token(&mut self) -> ::std::string::String {
-        self.access_token
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string machine_id = 2;
-
-    pub fn get_machine_id(&self) -> &str {
-        match self.machine_id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_machine_id(&mut self) {
-        self.machine_id.clear();
-    }
-
-    pub fn has_machine_id(&self) -> bool {
-        self.machine_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_machine_id(&mut self, v: ::std::string::String) {
-        self.machine_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_machine_id(&mut self) -> &mut ::std::string::String {
-        if self.machine_id.is_none() {
-            self.machine_id.set_default();
-        }
-        self.machine_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_machine_id(&mut self) -> ::std::string::String {
-        self.machine_id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for AccountInfoFacebook {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.access_token,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.machine_id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.access_token.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.machine_id.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.access_token.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.machine_id.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> AccountInfoFacebook {
-        AccountInfoFacebook::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "access_token",
-                        |m: &AccountInfoFacebook| &m.access_token,
-                        |m: &mut AccountInfoFacebook| &mut m.access_token,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "machine_id",
-                        |m: &AccountInfoFacebook| &m.machine_id,
-                        |m: &mut AccountInfoFacebook| &mut m.machine_id,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<AccountInfoFacebook>(
-                    "AccountInfoFacebook",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static AccountInfoFacebook {
-        static mut instance: ::protobuf::lazy::Lazy<AccountInfoFacebook> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(AccountInfoFacebook::new) }
-    }
-}
-
-impl ::protobuf::Clear for AccountInfoFacebook {
-    fn clear(&mut self) {
-        self.access_token.clear();
-        self.machine_id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for AccountInfoFacebook {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AccountInfoFacebook {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum AuthenticationType {
-    AUTHENTICATION_USER_PASS = 0,
-    AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS = 1,
-    AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS = 2,
-    AUTHENTICATION_SPOTIFY_TOKEN = 3,
-    AUTHENTICATION_FACEBOOK_TOKEN = 4,
-}
-
-impl ::protobuf::ProtobufEnum for AuthenticationType {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<AuthenticationType> {
-        match value {
-            0 => ::std::option::Option::Some(AuthenticationType::AUTHENTICATION_USER_PASS),
-            1 => ::std::option::Option::Some(
-                AuthenticationType::AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS,
-            ),
-            2 => ::std::option::Option::Some(
-                AuthenticationType::AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS,
-            ),
-            3 => ::std::option::Option::Some(AuthenticationType::AUTHENTICATION_SPOTIFY_TOKEN),
-            4 => ::std::option::Option::Some(AuthenticationType::AUTHENTICATION_FACEBOOK_TOKEN),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [AuthenticationType] = &[
-            AuthenticationType::AUTHENTICATION_USER_PASS,
-            AuthenticationType::AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS,
-            AuthenticationType::AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS,
-            AuthenticationType::AUTHENTICATION_SPOTIFY_TOKEN,
-            AuthenticationType::AUTHENTICATION_FACEBOOK_TOKEN,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<AuthenticationType>(
-                    "AuthenticationType",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for AuthenticationType {}
-
-impl ::std::default::Default for AuthenticationType {
-    fn default() -> Self {
-        AuthenticationType::AUTHENTICATION_USER_PASS
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AuthenticationType {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum AccountCreation {
-    ACCOUNT_CREATION_ALWAYS_PROMPT = 1,
-    ACCOUNT_CREATION_ALWAYS_CREATE = 3,
-}
-
-impl ::protobuf::ProtobufEnum for AccountCreation {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<AccountCreation> {
-        match value {
-            1 => ::std::option::Option::Some(AccountCreation::ACCOUNT_CREATION_ALWAYS_PROMPT),
-            3 => ::std::option::Option::Some(AccountCreation::ACCOUNT_CREATION_ALWAYS_CREATE),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [AccountCreation] = &[
-            AccountCreation::ACCOUNT_CREATION_ALWAYS_PROMPT,
-            AccountCreation::ACCOUNT_CREATION_ALWAYS_CREATE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<AccountCreation>(
-                    "AccountCreation",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for AccountCreation {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for AccountCreation {
-    fn default() -> Self {
-        AccountCreation::ACCOUNT_CREATION_ALWAYS_PROMPT
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AccountCreation {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum CpuFamily {
-    CPU_UNKNOWN = 0,
-    CPU_X86 = 1,
-    CPU_X86_64 = 2,
-    CPU_PPC = 3,
-    CPU_PPC_64 = 4,
-    CPU_ARM = 5,
-    CPU_IA64 = 6,
-    CPU_SH = 7,
-    CPU_MIPS = 8,
-    CPU_BLACKFIN = 9,
-}
-
-impl ::protobuf::ProtobufEnum for CpuFamily {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<CpuFamily> {
-        match value {
-            0 => ::std::option::Option::Some(CpuFamily::CPU_UNKNOWN),
-            1 => ::std::option::Option::Some(CpuFamily::CPU_X86),
-            2 => ::std::option::Option::Some(CpuFamily::CPU_X86_64),
-            3 => ::std::option::Option::Some(CpuFamily::CPU_PPC),
-            4 => ::std::option::Option::Some(CpuFamily::CPU_PPC_64),
-            5 => ::std::option::Option::Some(CpuFamily::CPU_ARM),
-            6 => ::std::option::Option::Some(CpuFamily::CPU_IA64),
-            7 => ::std::option::Option::Some(CpuFamily::CPU_SH),
-            8 => ::std::option::Option::Some(CpuFamily::CPU_MIPS),
-            9 => ::std::option::Option::Some(CpuFamily::CPU_BLACKFIN),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [CpuFamily] = &[
-            CpuFamily::CPU_UNKNOWN,
-            CpuFamily::CPU_X86,
-            CpuFamily::CPU_X86_64,
-            CpuFamily::CPU_PPC,
-            CpuFamily::CPU_PPC_64,
-            CpuFamily::CPU_ARM,
-            CpuFamily::CPU_IA64,
-            CpuFamily::CPU_SH,
-            CpuFamily::CPU_MIPS,
-            CpuFamily::CPU_BLACKFIN,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<CpuFamily>(
-                    "CpuFamily",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for CpuFamily {}
-
-impl ::std::default::Default for CpuFamily {
-    fn default() -> Self {
-        CpuFamily::CPU_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CpuFamily {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Brand {
-    BRAND_UNBRANDED = 0,
-    BRAND_INQ = 1,
-    BRAND_HTC = 2,
-    BRAND_NOKIA = 3,
-}
-
-impl ::protobuf::ProtobufEnum for Brand {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Brand> {
-        match value {
-            0 => ::std::option::Option::Some(Brand::BRAND_UNBRANDED),
-            1 => ::std::option::Option::Some(Brand::BRAND_INQ),
-            2 => ::std::option::Option::Some(Brand::BRAND_HTC),
-            3 => ::std::option::Option::Some(Brand::BRAND_NOKIA),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Brand] = &[
-            Brand::BRAND_UNBRANDED,
-            Brand::BRAND_INQ,
-            Brand::BRAND_HTC,
-            Brand::BRAND_NOKIA,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Brand>(
-                    "Brand",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Brand {}
-
-impl ::std::default::Default for Brand {
-    fn default() -> Self {
-        Brand::BRAND_UNBRANDED
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Brand {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Os {
-    OS_UNKNOWN = 0,
-    OS_WINDOWS = 1,
-    OS_OSX = 2,
-    OS_IPHONE = 3,
-    OS_S60 = 4,
-    OS_LINUX = 5,
-    OS_WINDOWS_CE = 6,
-    OS_ANDROID = 7,
-    OS_PALM = 8,
-    OS_FREEBSD = 9,
-    OS_BLACKBERRY = 10,
-    OS_SONOS = 11,
-    OS_LOGITECH = 12,
-    OS_WP7 = 13,
-    OS_ONKYO = 14,
-    OS_PHILIPS = 15,
-    OS_WD = 16,
-    OS_VOLVO = 17,
-    OS_TIVO = 18,
-    OS_AWOX = 19,
-    OS_MEEGO = 20,
-    OS_QNXNTO = 21,
-    OS_BCO = 22,
-}
-
-impl ::protobuf::ProtobufEnum for Os {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Os> {
-        match value {
-            0 => ::std::option::Option::Some(Os::OS_UNKNOWN),
-            1 => ::std::option::Option::Some(Os::OS_WINDOWS),
-            2 => ::std::option::Option::Some(Os::OS_OSX),
-            3 => ::std::option::Option::Some(Os::OS_IPHONE),
-            4 => ::std::option::Option::Some(Os::OS_S60),
-            5 => ::std::option::Option::Some(Os::OS_LINUX),
-            6 => ::std::option::Option::Some(Os::OS_WINDOWS_CE),
-            7 => ::std::option::Option::Some(Os::OS_ANDROID),
-            8 => ::std::option::Option::Some(Os::OS_PALM),
-            9 => ::std::option::Option::Some(Os::OS_FREEBSD),
-            10 => ::std::option::Option::Some(Os::OS_BLACKBERRY),
-            11 => ::std::option::Option::Some(Os::OS_SONOS),
-            12 => ::std::option::Option::Some(Os::OS_LOGITECH),
-            13 => ::std::option::Option::Some(Os::OS_WP7),
-            14 => ::std::option::Option::Some(Os::OS_ONKYO),
-            15 => ::std::option::Option::Some(Os::OS_PHILIPS),
-            16 => ::std::option::Option::Some(Os::OS_WD),
-            17 => ::std::option::Option::Some(Os::OS_VOLVO),
-            18 => ::std::option::Option::Some(Os::OS_TIVO),
-            19 => ::std::option::Option::Some(Os::OS_AWOX),
-            20 => ::std::option::Option::Some(Os::OS_MEEGO),
-            21 => ::std::option::Option::Some(Os::OS_QNXNTO),
-            22 => ::std::option::Option::Some(Os::OS_BCO),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Os] = &[
-            Os::OS_UNKNOWN,
-            Os::OS_WINDOWS,
-            Os::OS_OSX,
-            Os::OS_IPHONE,
-            Os::OS_S60,
-            Os::OS_LINUX,
-            Os::OS_WINDOWS_CE,
-            Os::OS_ANDROID,
-            Os::OS_PALM,
-            Os::OS_FREEBSD,
-            Os::OS_BLACKBERRY,
-            Os::OS_SONOS,
-            Os::OS_LOGITECH,
-            Os::OS_WP7,
-            Os::OS_ONKYO,
-            Os::OS_PHILIPS,
-            Os::OS_WD,
-            Os::OS_VOLVO,
-            Os::OS_TIVO,
-            Os::OS_AWOX,
-            Os::OS_MEEGO,
-            Os::OS_QNXNTO,
-            Os::OS_BCO,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Os>(
-                    "Os",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Os {}
-
-impl ::std::default::Default for Os {
-    fn default() -> Self {
-        Os::OS_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Os {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum AccountType {
-    Spotify = 0,
-    Facebook = 1,
-}
-
-impl ::protobuf::ProtobufEnum for AccountType {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<AccountType> {
-        match value {
-            0 => ::std::option::Option::Some(AccountType::Spotify),
-            1 => ::std::option::Option::Some(AccountType::Facebook),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [AccountType] = &[AccountType::Spotify, AccountType::Facebook];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<AccountType>(
-                    "AccountType",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for AccountType {}
-
-impl ::std::default::Default for AccountType {
-    fn default() -> Self {
-        AccountType::Spotify
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AccountType {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x14authentication.proto\x12\0\"\xfe\x02\n\x17ClientResponseEncrypted\
-    \x12.\n\x11login_credentials\x18\n\x20\x02(\x0b2\x11.LoginCredentialsB\0\
-    \x12,\n\x10account_creation\x18\x14\x20\x01(\x0e2\x10.AccountCreationB\0\
-    \x129\n\x14fingerprint_response\x18\x1e\x20\x01(\x0b2\x19.FingerprintRes\
-    ponseUnionB\0\x12'\n\x0bpeer_ticket\x18(\x20\x01(\x0b2\x10.PeerTicketUni\
-    onB\0\x12\"\n\x0bsystem_info\x182\x20\x02(\x0b2\x0b.SystemInfoB\0\x12\
-    \x18\n\x0eplatform_model\x18<\x20\x01(\tB\0\x12\x18\n\x0eversion_string\
-    \x18F\x20\x01(\tB\0\x12#\n\x06appkey\x18P\x20\x01(\x0b2\x11.LibspotifyAp\
-    pKeyB\0\x12\"\n\x0bclient_info\x18Z\x20\x01(\x0b2\x0b.ClientInfoB\0:\0\"\
-    a\n\x10LoginCredentials\x12\x12\n\x08username\x18\n\x20\x01(\tB\0\x12\"\
-    \n\x03typ\x18\x14\x20\x02(\x0e2\x13.AuthenticationTypeB\0\x12\x13\n\taut\
-    h_data\x18\x1e\x20\x01(\x0cB\0:\0\"\x7f\n\x18FingerprintResponseUnion\
-    \x12*\n\x05grain\x18\n\x20\x01(\x0b2\x19.FingerprintGrainResponseB\0\x12\
-    5\n\x0bhmac_ripemd\x18\x14\x20\x01(\x0b2\x1e.FingerprintHmacRipemdRespon\
-    seB\0:\0\"5\n\x18FingerprintGrainResponse\x12\x17\n\rencrypted_key\x18\n\
-    \x20\x02(\x0cB\0:\0\"1\n\x1dFingerprintHmacRipemdResponse\x12\x0e\n\x04h\
-    mac\x18\n\x20\x02(\x0cB\0:\0\"e\n\x0fPeerTicketUnion\x12*\n\npublic_key\
-    \x18\n\x20\x01(\x0b2\x14.PeerTicketPublicKeyB\0\x12$\n\nold_ticket\x18\
-    \x14\x20\x01(\x0b2\x0e.PeerTicketOldB\0:\0\"-\n\x13PeerTicketPublicKey\
-    \x12\x14\n\npublic_key\x18\n\x20\x02(\x0cB\0:\0\"I\n\rPeerTicketOld\x12\
-    \x15\n\x0bpeer_ticket\x18\n\x20\x02(\x0cB\0\x12\x1f\n\x15peer_ticket_sig\
-    nature\x18\x14\x20\x02(\x0cB\0:\0\"\xff\x01\n\nSystemInfo\x12\x20\n\ncpu\
-    _family\x18\n\x20\x02(\x0e2\n.CpuFamilyB\0\x12\x15\n\x0bcpu_subtype\x18\
-    \x14\x20\x01(\rB\0\x12\x11\n\x07cpu_ext\x18\x1e\x20\x01(\rB\0\x12\x17\n\
-    \x05brand\x18(\x20\x01(\x0e2\x06.BrandB\0\x12\x15\n\x0bbrand_flags\x182\
-    \x20\x01(\rB\0\x12\x11\n\x02os\x18<\x20\x02(\x0e2\x03.OsB\0\x12\x14\n\no\
-    s_version\x18F\x20\x01(\rB\0\x12\x10\n\x06os_ext\x18P\x20\x01(\rB\0\x12#\
-    \n\x19system_information_string\x18Z\x20\x01(\tB\0\x12\x13\n\tdevice_id\
-    \x18d\x20\x01(\tB\0:\0\"|\n\x10LibspotifyAppKey\x12\x11\n\x07version\x18\
-    \x01\x20\x02(\rB\0\x12\x10\n\x06devkey\x18\x02\x20\x02(\x0cB\0\x12\x13\n\
-    \tsignature\x18\x03\x20\x02(\x0cB\0\x12\x13\n\tuseragent\x18\x04\x20\x02\
-    (\tB\0\x12\x17\n\rcallback_hash\x18\x05\x20\x02(\x0cB\0:\0\"X\n\nClientI\
-    nfo\x12\x11\n\x07limited\x18\x01\x20\x01(\x08B\0\x12!\n\x02fb\x18\x02\
-    \x20\x01(\x0b2\x13.ClientInfoFacebookB\0\x12\x12\n\x08language\x18\x03\
-    \x20\x01(\tB\0:\0\",\n\x12ClientInfoFacebook\x12\x14\n\nmachine_id\x18\
-    \x01\x20\x01(\tB\0:\0\"\xd3\x02\n\tAPWelcome\x12\x1c\n\x12canonical_user\
-    name\x18\n\x20\x02(\tB\0\x12.\n\x16account_type_logged_in\x18\x14\x20\
-    \x02(\x0e2\x0c.AccountTypeB\0\x122\n\x1acredentials_type_logged_in\x18\
-    \x19\x20\x02(\x0e2\x0c.AccountTypeB\0\x12=\n\x1ereusable_auth_credential\
-    s_type\x18\x1e\x20\x02(\x0e2\x13.AuthenticationTypeB\0\x12#\n\x19reusabl\
-    e_auth_credentials\x18(\x20\x02(\x0cB\0\x12\x14\n\nlfs_secret\x182\x20\
-    \x01(\x0cB\0\x12$\n\x0caccount_info\x18<\x20\x01(\x0b2\x0c.AccountInfoB\
-    \0\x12\"\n\x02fb\x18F\x20\x01(\x0b2\x14.AccountInfoFacebookB\0:\0\"a\n\
-    \x0bAccountInfo\x12&\n\x07spotify\x18\x01\x20\x01(\x0b2\x13.AccountInfoS\
-    potifyB\0\x12(\n\x08facebook\x18\x02\x20\x01(\x0b2\x14.AccountInfoFacebo\
-    okB\0:\0\"\x16\n\x12AccountInfoSpotify:\0\"E\n\x13AccountInfoFacebook\
-    \x12\x16\n\x0caccess_token\x18\x01\x20\x01(\tB\0\x12\x14\n\nmachine_id\
-    \x18\x02\x20\x01(\tB\0:\0*\xd8\x01\n\x12AuthenticationType\x12\x1c\n\x18\
-    AUTHENTICATION_USER_PASS\x10\0\x12-\n)AUTHENTICATION_STORED_SPOTIFY_CRED\
-    ENTIALS\x10\x01\x12.\n*AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS\x10\
-    \x02\x12\x20\n\x1cAUTHENTICATION_SPOTIFY_TOKEN\x10\x03\x12!\n\x1dAUTHENT\
-    ICATION_FACEBOOK_TOKEN\x10\x04\x1a\0*[\n\x0fAccountCreation\x12\"\n\x1eA\
-    CCOUNT_CREATION_ALWAYS_PROMPT\x10\x01\x12\"\n\x1eACCOUNT_CREATION_ALWAYS\
-    _CREATE\x10\x03\x1a\0*\x9f\x01\n\tCpuFamily\x12\x0f\n\x0bCPU_UNKNOWN\x10\
-    \0\x12\x0b\n\x07CPU_X86\x10\x01\x12\x0e\n\nCPU_X86_64\x10\x02\x12\x0b\n\
-    \x07CPU_PPC\x10\x03\x12\x0e\n\nCPU_PPC_64\x10\x04\x12\x0b\n\x07CPU_ARM\
-    \x10\x05\x12\x0c\n\x08CPU_IA64\x10\x06\x12\n\n\x06CPU_SH\x10\x07\x12\x0c\
-    \n\x08CPU_MIPS\x10\x08\x12\x10\n\x0cCPU_BLACKFIN\x10\t\x1a\0*M\n\x05Bran\
-    d\x12\x13\n\x0fBRAND_UNBRANDED\x10\0\x12\r\n\tBRAND_INQ\x10\x01\x12\r\n\
-    \tBRAND_HTC\x10\x02\x12\x0f\n\x0bBRAND_NOKIA\x10\x03\x1a\0*\xd3\x02\n\
-    \x02Os\x12\x0e\n\nOS_UNKNOWN\x10\0\x12\x0e\n\nOS_WINDOWS\x10\x01\x12\n\n\
-    \x06OS_OSX\x10\x02\x12\r\n\tOS_IPHONE\x10\x03\x12\n\n\x06OS_S60\x10\x04\
-    \x12\x0c\n\x08OS_LINUX\x10\x05\x12\x11\n\rOS_WINDOWS_CE\x10\x06\x12\x0e\
-    \n\nOS_ANDROID\x10\x07\x12\x0b\n\x07OS_PALM\x10\x08\x12\x0e\n\nOS_FREEBS\
-    D\x10\t\x12\x11\n\rOS_BLACKBERRY\x10\n\x12\x0c\n\x08OS_SONOS\x10\x0b\x12\
-    \x0f\n\x0bOS_LOGITECH\x10\x0c\x12\n\n\x06OS_WP7\x10\r\x12\x0c\n\x08OS_ON\
-    KYO\x10\x0e\x12\x0e\n\nOS_PHILIPS\x10\x0f\x12\t\n\x05OS_WD\x10\x10\x12\
-    \x0c\n\x08OS_VOLVO\x10\x11\x12\x0b\n\x07OS_TIVO\x10\x12\x12\x0b\n\x07OS_\
-    AWOX\x10\x13\x12\x0c\n\x08OS_MEEGO\x10\x14\x12\r\n\tOS_QNXNTO\x10\x15\
-    \x12\n\n\x06OS_BCO\x10\x16\x1a\0**\n\x0bAccountType\x12\x0b\n\x07Spotify\
-    \x10\0\x12\x0c\n\x08Facebook\x10\x01\x1a\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 7589
protocol/src/keyexchange.rs

@@ -1,7589 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `keyexchange.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientHello {
-    // message fields
-    build_info: ::protobuf::SingularPtrField<BuildInfo>,
-    fingerprints_supported: ::std::vec::Vec<Fingerprint>,
-    cryptosuites_supported: ::std::vec::Vec<Cryptosuite>,
-    powschemes_supported: ::std::vec::Vec<Powscheme>,
-    login_crypto_hello: ::protobuf::SingularPtrField<LoginCryptoHelloUnion>,
-    client_nonce: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    padding: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    feature_set: ::protobuf::SingularPtrField<FeatureSet>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientHello {
-    fn default() -> &'a ClientHello {
-        <ClientHello as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientHello {
-    pub fn new() -> ClientHello {
-        ::std::default::Default::default()
-    }
-
-    // required .BuildInfo build_info = 10;
-
-    pub fn get_build_info(&self) -> &BuildInfo {
-        self.build_info
-            .as_ref()
-            .unwrap_or_else(|| BuildInfo::default_instance())
-    }
-    pub fn clear_build_info(&mut self) {
-        self.build_info.clear();
-    }
-
-    pub fn has_build_info(&self) -> bool {
-        self.build_info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_build_info(&mut self, v: BuildInfo) {
-        self.build_info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_build_info(&mut self) -> &mut BuildInfo {
-        if self.build_info.is_none() {
-            self.build_info.set_default();
-        }
-        self.build_info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_build_info(&mut self) -> BuildInfo {
-        self.build_info.take().unwrap_or_else(|| BuildInfo::new())
-    }
-
-    // repeated .Fingerprint fingerprints_supported = 20;
-
-    pub fn get_fingerprints_supported(&self) -> &[Fingerprint] {
-        &self.fingerprints_supported
-    }
-    pub fn clear_fingerprints_supported(&mut self) {
-        self.fingerprints_supported.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fingerprints_supported(&mut self, v: ::std::vec::Vec<Fingerprint>) {
-        self.fingerprints_supported = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_fingerprints_supported(&mut self) -> &mut ::std::vec::Vec<Fingerprint> {
-        &mut self.fingerprints_supported
-    }
-
-    // Take field
-    pub fn take_fingerprints_supported(&mut self) -> ::std::vec::Vec<Fingerprint> {
-        ::std::mem::replace(&mut self.fingerprints_supported, ::std::vec::Vec::new())
-    }
-
-    // repeated .Cryptosuite cryptosuites_supported = 30;
-
-    pub fn get_cryptosuites_supported(&self) -> &[Cryptosuite] {
-        &self.cryptosuites_supported
-    }
-    pub fn clear_cryptosuites_supported(&mut self) {
-        self.cryptosuites_supported.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cryptosuites_supported(&mut self, v: ::std::vec::Vec<Cryptosuite>) {
-        self.cryptosuites_supported = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_cryptosuites_supported(&mut self) -> &mut ::std::vec::Vec<Cryptosuite> {
-        &mut self.cryptosuites_supported
-    }
-
-    // Take field
-    pub fn take_cryptosuites_supported(&mut self) -> ::std::vec::Vec<Cryptosuite> {
-        ::std::mem::replace(&mut self.cryptosuites_supported, ::std::vec::Vec::new())
-    }
-
-    // repeated .Powscheme powschemes_supported = 40;
-
-    pub fn get_powschemes_supported(&self) -> &[Powscheme] {
-        &self.powschemes_supported
-    }
-    pub fn clear_powschemes_supported(&mut self) {
-        self.powschemes_supported.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_powschemes_supported(&mut self, v: ::std::vec::Vec<Powscheme>) {
-        self.powschemes_supported = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_powschemes_supported(&mut self) -> &mut ::std::vec::Vec<Powscheme> {
-        &mut self.powschemes_supported
-    }
-
-    // Take field
-    pub fn take_powschemes_supported(&mut self) -> ::std::vec::Vec<Powscheme> {
-        ::std::mem::replace(&mut self.powschemes_supported, ::std::vec::Vec::new())
-    }
-
-    // required .LoginCryptoHelloUnion login_crypto_hello = 50;
-
-    pub fn get_login_crypto_hello(&self) -> &LoginCryptoHelloUnion {
-        self.login_crypto_hello
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoHelloUnion::default_instance())
-    }
-    pub fn clear_login_crypto_hello(&mut self) {
-        self.login_crypto_hello.clear();
-    }
-
-    pub fn has_login_crypto_hello(&self) -> bool {
-        self.login_crypto_hello.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_login_crypto_hello(&mut self, v: LoginCryptoHelloUnion) {
-        self.login_crypto_hello = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_login_crypto_hello(&mut self) -> &mut LoginCryptoHelloUnion {
-        if self.login_crypto_hello.is_none() {
-            self.login_crypto_hello.set_default();
-        }
-        self.login_crypto_hello.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_login_crypto_hello(&mut self) -> LoginCryptoHelloUnion {
-        self.login_crypto_hello
-            .take()
-            .unwrap_or_else(|| LoginCryptoHelloUnion::new())
-    }
-
-    // required bytes client_nonce = 60;
-
-    pub fn get_client_nonce(&self) -> &[u8] {
-        match self.client_nonce.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_client_nonce(&mut self) {
-        self.client_nonce.clear();
-    }
-
-    pub fn has_client_nonce(&self) -> bool {
-        self.client_nonce.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_client_nonce(&mut self, v: ::std::vec::Vec<u8>) {
-        self.client_nonce = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_client_nonce(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.client_nonce.is_none() {
-            self.client_nonce.set_default();
-        }
-        self.client_nonce.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_client_nonce(&mut self) -> ::std::vec::Vec<u8> {
-        self.client_nonce
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes padding = 70;
-
-    pub fn get_padding(&self) -> &[u8] {
-        match self.padding.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_padding(&mut self) {
-        self.padding.clear();
-    }
-
-    pub fn has_padding(&self) -> bool {
-        self.padding.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_padding(&mut self, v: ::std::vec::Vec<u8>) {
-        self.padding = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_padding(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.padding.is_none() {
-            self.padding.set_default();
-        }
-        self.padding.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_padding(&mut self) -> ::std::vec::Vec<u8> {
-        self.padding
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .FeatureSet feature_set = 80;
-
-    pub fn get_feature_set(&self) -> &FeatureSet {
-        self.feature_set
-            .as_ref()
-            .unwrap_or_else(|| FeatureSet::default_instance())
-    }
-    pub fn clear_feature_set(&mut self) {
-        self.feature_set.clear();
-    }
-
-    pub fn has_feature_set(&self) -> bool {
-        self.feature_set.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_feature_set(&mut self, v: FeatureSet) {
-        self.feature_set = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_feature_set(&mut self) -> &mut FeatureSet {
-        if self.feature_set.is_none() {
-            self.feature_set.set_default();
-        }
-        self.feature_set.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_feature_set(&mut self) -> FeatureSet {
-        self.feature_set.take().unwrap_or_else(|| FeatureSet::new())
-    }
-}
-
-impl ::protobuf::Message for ClientHello {
-    fn is_initialized(&self) -> bool {
-        if self.build_info.is_none() {
-            return false;
-        }
-        if self.login_crypto_hello.is_none() {
-            return false;
-        }
-        if self.client_nonce.is_none() {
-            return false;
-        }
-        for v in &self.build_info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.login_crypto_hello {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.feature_set {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.build_info,
-                    )?;
-                }
-                20 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.fingerprints_supported,
-                    20,
-                    &mut self.unknown_fields,
-                )?,
-                30 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.cryptosuites_supported,
-                    30,
-                    &mut self.unknown_fields,
-                )?,
-                40 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.powschemes_supported,
-                    40,
-                    &mut self.unknown_fields,
-                )?,
-                50 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.login_crypto_hello,
-                    )?;
-                }
-                60 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.client_nonce,
-                    )?;
-                }
-                70 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.padding)?;
-                }
-                80 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.feature_set,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.build_info.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.fingerprints_supported {
-            my_size += ::protobuf::rt::enum_size(20, *value);
-        }
-        for value in &self.cryptosuites_supported {
-            my_size += ::protobuf::rt::enum_size(30, *value);
-        }
-        for value in &self.powschemes_supported {
-            my_size += ::protobuf::rt::enum_size(40, *value);
-        }
-        if let Some(ref v) = self.login_crypto_hello.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.client_nonce.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(60, &v);
-        }
-        if let Some(ref v) = self.padding.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(70, &v);
-        }
-        if let Some(ref v) = self.feature_set.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.build_info.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.fingerprints_supported {
-            os.write_enum(20, v.value())?;
-        }
-        for v in &self.cryptosuites_supported {
-            os.write_enum(30, v.value())?;
-        }
-        for v in &self.powschemes_supported {
-            os.write_enum(40, v.value())?;
-        }
-        if let Some(ref v) = self.login_crypto_hello.as_ref() {
-            os.write_tag(50, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.client_nonce.as_ref() {
-            os.write_bytes(60, &v)?;
-        }
-        if let Some(ref v) = self.padding.as_ref() {
-            os.write_bytes(70, &v)?;
-        }
-        if let Some(ref v) = self.feature_set.as_ref() {
-            os.write_tag(80, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientHello {
-        ClientHello::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<BuildInfo>,
-                    >(
-                        "build_info",
-                        |m: &ClientHello| &m.build_info,
-                        |m: &mut ClientHello| &mut m.build_info,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Fingerprint>,
-                >(
-                    "fingerprints_supported",
-                    |m: &ClientHello| &m.fingerprints_supported,
-                    |m: &mut ClientHello| &mut m.fingerprints_supported,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Cryptosuite>,
-                >(
-                    "cryptosuites_supported",
-                    |m: &ClientHello| &m.cryptosuites_supported,
-                    |m: &mut ClientHello| &mut m.cryptosuites_supported,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Powscheme>,
-                >(
-                    "powschemes_supported",
-                    |m: &ClientHello| &m.powschemes_supported,
-                    |m: &mut ClientHello| &mut m.powschemes_supported,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoHelloUnion>,
-                    >(
-                        "login_crypto_hello",
-                        |m: &ClientHello| &m.login_crypto_hello,
-                        |m: &mut ClientHello| &mut m.login_crypto_hello,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "client_nonce",
-                        |m: &ClientHello| &m.client_nonce,
-                        |m: &mut ClientHello| &mut m.client_nonce,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "padding",
-                        |m: &ClientHello| &m.padding,
-                        |m: &mut ClientHello| &mut m.padding,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FeatureSet>,
-                    >(
-                        "feature_set",
-                        |m: &ClientHello| &m.feature_set,
-                        |m: &mut ClientHello| &mut m.feature_set,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientHello>(
-                    "ClientHello",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientHello {
-        static mut instance: ::protobuf::lazy::Lazy<ClientHello> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientHello::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientHello {
-    fn clear(&mut self) {
-        self.build_info.clear();
-        self.fingerprints_supported.clear();
-        self.cryptosuites_supported.clear();
-        self.powschemes_supported.clear();
-        self.login_crypto_hello.clear();
-        self.client_nonce.clear();
-        self.padding.clear();
-        self.feature_set.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientHello {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientHello {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct BuildInfo {
-    // message fields
-    product: ::std::option::Option<Product>,
-    product_flags: ::std::vec::Vec<ProductFlags>,
-    platform: ::std::option::Option<Platform>,
-    version: ::std::option::Option<u64>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a BuildInfo {
-    fn default() -> &'a BuildInfo {
-        <BuildInfo as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl BuildInfo {
-    pub fn new() -> BuildInfo {
-        ::std::default::Default::default()
-    }
-
-    // required .Product product = 10;
-
-    pub fn get_product(&self) -> Product {
-        self.product.unwrap_or(Product::PRODUCT_CLIENT)
-    }
-    pub fn clear_product(&mut self) {
-        self.product = ::std::option::Option::None;
-    }
-
-    pub fn has_product(&self) -> bool {
-        self.product.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_product(&mut self, v: Product) {
-        self.product = ::std::option::Option::Some(v);
-    }
-
-    // repeated .ProductFlags product_flags = 20;
-
-    pub fn get_product_flags(&self) -> &[ProductFlags] {
-        &self.product_flags
-    }
-    pub fn clear_product_flags(&mut self) {
-        self.product_flags.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_product_flags(&mut self, v: ::std::vec::Vec<ProductFlags>) {
-        self.product_flags = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_product_flags(&mut self) -> &mut ::std::vec::Vec<ProductFlags> {
-        &mut self.product_flags
-    }
-
-    // Take field
-    pub fn take_product_flags(&mut self) -> ::std::vec::Vec<ProductFlags> {
-        ::std::mem::replace(&mut self.product_flags, ::std::vec::Vec::new())
-    }
-
-    // required .Platform platform = 30;
-
-    pub fn get_platform(&self) -> Platform {
-        self.platform.unwrap_or(Platform::PLATFORM_WIN32_X86)
-    }
-    pub fn clear_platform(&mut self) {
-        self.platform = ::std::option::Option::None;
-    }
-
-    pub fn has_platform(&self) -> bool {
-        self.platform.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_platform(&mut self, v: Platform) {
-        self.platform = ::std::option::Option::Some(v);
-    }
-
-    // required uint64 version = 40;
-
-    pub fn get_version(&self) -> u64 {
-        self.version.unwrap_or(0)
-    }
-    pub fn clear_version(&mut self) {
-        self.version = ::std::option::Option::None;
-    }
-
-    pub fn has_version(&self) -> bool {
-        self.version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_version(&mut self, v: u64) {
-        self.version = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for BuildInfo {
-    fn is_initialized(&self) -> bool {
-        if self.product.is_none() {
-            return false;
-        }
-        if self.platform.is_none() {
-            return false;
-        }
-        if self.version.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.product,
-                    10,
-                    &mut self.unknown_fields,
-                )?,
-                20 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.product_flags,
-                    20,
-                    &mut self.unknown_fields,
-                )?,
-                30 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.platform,
-                    30,
-                    &mut self.unknown_fields,
-                )?,
-                40 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint64()?;
-                    self.version = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.product {
-            my_size += ::protobuf::rt::enum_size(10, v);
-        }
-        for value in &self.product_flags {
-            my_size += ::protobuf::rt::enum_size(20, *value);
-        }
-        if let Some(v) = self.platform {
-            my_size += ::protobuf::rt::enum_size(30, v);
-        }
-        if let Some(v) = self.version {
-            my_size += ::protobuf::rt::value_size(40, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.product {
-            os.write_enum(10, v.value())?;
-        }
-        for v in &self.product_flags {
-            os.write_enum(20, v.value())?;
-        }
-        if let Some(v) = self.platform {
-            os.write_enum(30, v.value())?;
-        }
-        if let Some(v) = self.version {
-            os.write_uint64(40, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> BuildInfo {
-        BuildInfo::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Product>,
-                >(
-                    "product",
-                    |m: &BuildInfo| &m.product,
-                    |m: &mut BuildInfo| &mut m.product,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ProductFlags>,
-                >(
-                    "product_flags",
-                    |m: &BuildInfo| &m.product_flags,
-                    |m: &mut BuildInfo| &mut m.product_flags,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Platform>,
-                >(
-                    "platform",
-                    |m: &BuildInfo| &m.platform,
-                    |m: &mut BuildInfo| &mut m.platform,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint64,
-                >(
-                    "version",
-                    |m: &BuildInfo| &m.version,
-                    |m: &mut BuildInfo| &mut m.version,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<BuildInfo>(
-                    "BuildInfo",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static BuildInfo {
-        static mut instance: ::protobuf::lazy::Lazy<BuildInfo> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(BuildInfo::new) }
-    }
-}
-
-impl ::protobuf::Clear for BuildInfo {
-    fn clear(&mut self) {
-        self.product = ::std::option::Option::None;
-        self.product_flags.clear();
-        self.platform = ::std::option::Option::None;
-        self.version = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for BuildInfo {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for BuildInfo {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoHelloUnion {
-    // message fields
-    diffie_hellman: ::protobuf::SingularPtrField<LoginCryptoDiffieHellmanHello>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoHelloUnion {
-    fn default() -> &'a LoginCryptoHelloUnion {
-        <LoginCryptoHelloUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoHelloUnion {
-    pub fn new() -> LoginCryptoHelloUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .LoginCryptoDiffieHellmanHello diffie_hellman = 10;
-
-    pub fn get_diffie_hellman(&self) -> &LoginCryptoDiffieHellmanHello {
-        self.diffie_hellman
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanHello::default_instance())
-    }
-    pub fn clear_diffie_hellman(&mut self) {
-        self.diffie_hellman.clear();
-    }
-
-    pub fn has_diffie_hellman(&self) -> bool {
-        self.diffie_hellman.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_diffie_hellman(&mut self, v: LoginCryptoDiffieHellmanHello) {
-        self.diffie_hellman = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_diffie_hellman(&mut self) -> &mut LoginCryptoDiffieHellmanHello {
-        if self.diffie_hellman.is_none() {
-            self.diffie_hellman.set_default();
-        }
-        self.diffie_hellman.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_diffie_hellman(&mut self) -> LoginCryptoDiffieHellmanHello {
-        self.diffie_hellman
-            .take()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanHello::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoHelloUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.diffie_hellman {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.diffie_hellman,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoHelloUnion {
-        LoginCryptoHelloUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoDiffieHellmanHello>,
-                    >(
-                        "diffie_hellman",
-                        |m: &LoginCryptoHelloUnion| &m.diffie_hellman,
-                        |m: &mut LoginCryptoHelloUnion| &mut m.diffie_hellman,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LoginCryptoHelloUnion>(
-                    "LoginCryptoHelloUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoHelloUnion {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoHelloUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoHelloUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoHelloUnion {
-    fn clear(&mut self) {
-        self.diffie_hellman.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoHelloUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoHelloUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoDiffieHellmanHello {
-    // message fields
-    gc: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    server_keys_known: ::std::option::Option<u32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoDiffieHellmanHello {
-    fn default() -> &'a LoginCryptoDiffieHellmanHello {
-        <LoginCryptoDiffieHellmanHello as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoDiffieHellmanHello {
-    pub fn new() -> LoginCryptoDiffieHellmanHello {
-        ::std::default::Default::default()
-    }
-
-    // required bytes gc = 10;
-
-    pub fn get_gc(&self) -> &[u8] {
-        match self.gc.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gc(&mut self) {
-        self.gc.clear();
-    }
-
-    pub fn has_gc(&self) -> bool {
-        self.gc.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gc(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gc = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gc(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gc.is_none() {
-            self.gc.set_default();
-        }
-        self.gc.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gc(&mut self) -> ::std::vec::Vec<u8> {
-        self.gc.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required uint32 server_keys_known = 20;
-
-    pub fn get_server_keys_known(&self) -> u32 {
-        self.server_keys_known.unwrap_or(0)
-    }
-    pub fn clear_server_keys_known(&mut self) {
-        self.server_keys_known = ::std::option::Option::None;
-    }
-
-    pub fn has_server_keys_known(&self) -> bool {
-        self.server_keys_known.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_server_keys_known(&mut self, v: u32) {
-        self.server_keys_known = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoDiffieHellmanHello {
-    fn is_initialized(&self) -> bool {
-        if self.gc.is_none() {
-            return false;
-        }
-        if self.server_keys_known.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gc)?;
-                }
-                20 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.server_keys_known = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gc.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        if let Some(v) = self.server_keys_known {
-            my_size += ::protobuf::rt::value_size(20, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gc.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        if let Some(v) = self.server_keys_known {
-            os.write_uint32(20, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoDiffieHellmanHello {
-        LoginCryptoDiffieHellmanHello::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>(
-                    "gc",
-                    |m: &LoginCryptoDiffieHellmanHello| { &m.gc },
-                    |m: &mut LoginCryptoDiffieHellmanHello| { &mut m.gc },
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>(
-                    "server_keys_known",
-                    |m: &LoginCryptoDiffieHellmanHello| { &m.server_keys_known },
-                    |m: &mut LoginCryptoDiffieHellmanHello| { &mut m.server_keys_known },
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LoginCryptoDiffieHellmanHello>(
-                    "LoginCryptoDiffieHellmanHello",
-                    fields,
-                    file_descriptor_proto()
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoDiffieHellmanHello {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoDiffieHellmanHello> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoDiffieHellmanHello::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoDiffieHellmanHello {
-    fn clear(&mut self) {
-        self.gc.clear();
-        self.server_keys_known = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoDiffieHellmanHello {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoDiffieHellmanHello {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FeatureSet {
-    // message fields
-    autoupdate2: ::std::option::Option<bool>,
-    current_location: ::std::option::Option<bool>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FeatureSet {
-    fn default() -> &'a FeatureSet {
-        <FeatureSet as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FeatureSet {
-    pub fn new() -> FeatureSet {
-        ::std::default::Default::default()
-    }
-
-    // optional bool autoupdate2 = 1;
-
-    pub fn get_autoupdate2(&self) -> bool {
-        self.autoupdate2.unwrap_or(false)
-    }
-    pub fn clear_autoupdate2(&mut self) {
-        self.autoupdate2 = ::std::option::Option::None;
-    }
-
-    pub fn has_autoupdate2(&self) -> bool {
-        self.autoupdate2.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_autoupdate2(&mut self, v: bool) {
-        self.autoupdate2 = ::std::option::Option::Some(v);
-    }
-
-    // optional bool current_location = 2;
-
-    pub fn get_current_location(&self) -> bool {
-        self.current_location.unwrap_or(false)
-    }
-    pub fn clear_current_location(&mut self) {
-        self.current_location = ::std::option::Option::None;
-    }
-
-    pub fn has_current_location(&self) -> bool {
-        self.current_location.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_current_location(&mut self, v: bool) {
-        self.current_location = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for FeatureSet {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.autoupdate2 = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.current_location = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.autoupdate2 {
-            my_size += 2;
-        }
-        if let Some(v) = self.current_location {
-            my_size += 2;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.autoupdate2 {
-            os.write_bool(1, v)?;
-        }
-        if let Some(v) = self.current_location {
-            os.write_bool(2, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FeatureSet {
-        FeatureSet::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "autoupdate2",
-                    |m: &FeatureSet| &m.autoupdate2,
-                    |m: &mut FeatureSet| &mut m.autoupdate2,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "current_location",
-                    |m: &FeatureSet| &m.current_location,
-                    |m: &mut FeatureSet| &mut m.current_location,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FeatureSet>(
-                    "FeatureSet",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FeatureSet {
-        static mut instance: ::protobuf::lazy::Lazy<FeatureSet> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FeatureSet::new) }
-    }
-}
-
-impl ::protobuf::Clear for FeatureSet {
-    fn clear(&mut self) {
-        self.autoupdate2 = ::std::option::Option::None;
-        self.current_location = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FeatureSet {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FeatureSet {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct APResponseMessage {
-    // message fields
-    challenge: ::protobuf::SingularPtrField<APChallenge>,
-    upgrade: ::protobuf::SingularPtrField<UpgradeRequiredMessage>,
-    login_failed: ::protobuf::SingularPtrField<APLoginFailed>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a APResponseMessage {
-    fn default() -> &'a APResponseMessage {
-        <APResponseMessage as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl APResponseMessage {
-    pub fn new() -> APResponseMessage {
-        ::std::default::Default::default()
-    }
-
-    // optional .APChallenge challenge = 10;
-
-    pub fn get_challenge(&self) -> &APChallenge {
-        self.challenge
-            .as_ref()
-            .unwrap_or_else(|| APChallenge::default_instance())
-    }
-    pub fn clear_challenge(&mut self) {
-        self.challenge.clear();
-    }
-
-    pub fn has_challenge(&self) -> bool {
-        self.challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_challenge(&mut self, v: APChallenge) {
-        self.challenge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_challenge(&mut self) -> &mut APChallenge {
-        if self.challenge.is_none() {
-            self.challenge.set_default();
-        }
-        self.challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_challenge(&mut self) -> APChallenge {
-        self.challenge.take().unwrap_or_else(|| APChallenge::new())
-    }
-
-    // optional .UpgradeRequiredMessage upgrade = 20;
-
-    pub fn get_upgrade(&self) -> &UpgradeRequiredMessage {
-        self.upgrade
-            .as_ref()
-            .unwrap_or_else(|| UpgradeRequiredMessage::default_instance())
-    }
-    pub fn clear_upgrade(&mut self) {
-        self.upgrade.clear();
-    }
-
-    pub fn has_upgrade(&self) -> bool {
-        self.upgrade.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_upgrade(&mut self, v: UpgradeRequiredMessage) {
-        self.upgrade = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_upgrade(&mut self) -> &mut UpgradeRequiredMessage {
-        if self.upgrade.is_none() {
-            self.upgrade.set_default();
-        }
-        self.upgrade.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_upgrade(&mut self) -> UpgradeRequiredMessage {
-        self.upgrade
-            .take()
-            .unwrap_or_else(|| UpgradeRequiredMessage::new())
-    }
-
-    // optional .APLoginFailed login_failed = 30;
-
-    pub fn get_login_failed(&self) -> &APLoginFailed {
-        self.login_failed
-            .as_ref()
-            .unwrap_or_else(|| APLoginFailed::default_instance())
-    }
-    pub fn clear_login_failed(&mut self) {
-        self.login_failed.clear();
-    }
-
-    pub fn has_login_failed(&self) -> bool {
-        self.login_failed.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_login_failed(&mut self, v: APLoginFailed) {
-        self.login_failed = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_login_failed(&mut self) -> &mut APLoginFailed {
-        if self.login_failed.is_none() {
-            self.login_failed.set_default();
-        }
-        self.login_failed.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_login_failed(&mut self) -> APLoginFailed {
-        self.login_failed
-            .take()
-            .unwrap_or_else(|| APLoginFailed::new())
-    }
-}
-
-impl ::protobuf::Message for APResponseMessage {
-    fn is_initialized(&self) -> bool {
-        for v in &self.challenge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.upgrade {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.login_failed {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.challenge)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.upgrade)?;
-                }
-                30 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.login_failed,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.challenge.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.upgrade.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.login_failed.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.challenge.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.upgrade.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.login_failed.as_ref() {
-            os.write_tag(30, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> APResponseMessage {
-        APResponseMessage::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<APChallenge>,
-                    >(
-                        "challenge",
-                        |m: &APResponseMessage| &m.challenge,
-                        |m: &mut APResponseMessage| &mut m.challenge,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<UpgradeRequiredMessage>,
-                    >(
-                        "upgrade",
-                        |m: &APResponseMessage| &m.upgrade,
-                        |m: &mut APResponseMessage| &mut m.upgrade,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<APLoginFailed>,
-                    >(
-                        "login_failed",
-                        |m: &APResponseMessage| &m.login_failed,
-                        |m: &mut APResponseMessage| &mut m.login_failed,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<APResponseMessage>(
-                    "APResponseMessage",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static APResponseMessage {
-        static mut instance: ::protobuf::lazy::Lazy<APResponseMessage> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(APResponseMessage::new) }
-    }
-}
-
-impl ::protobuf::Clear for APResponseMessage {
-    fn clear(&mut self) {
-        self.challenge.clear();
-        self.upgrade.clear();
-        self.login_failed.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for APResponseMessage {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for APResponseMessage {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct APChallenge {
-    // message fields
-    login_crypto_challenge: ::protobuf::SingularPtrField<LoginCryptoChallengeUnion>,
-    fingerprint_challenge: ::protobuf::SingularPtrField<FingerprintChallengeUnion>,
-    pow_challenge: ::protobuf::SingularPtrField<PoWChallengeUnion>,
-    crypto_challenge: ::protobuf::SingularPtrField<CryptoChallengeUnion>,
-    server_nonce: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    padding: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a APChallenge {
-    fn default() -> &'a APChallenge {
-        <APChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl APChallenge {
-    pub fn new() -> APChallenge {
-        ::std::default::Default::default()
-    }
-
-    // required .LoginCryptoChallengeUnion login_crypto_challenge = 10;
-
-    pub fn get_login_crypto_challenge(&self) -> &LoginCryptoChallengeUnion {
-        self.login_crypto_challenge
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoChallengeUnion::default_instance())
-    }
-    pub fn clear_login_crypto_challenge(&mut self) {
-        self.login_crypto_challenge.clear();
-    }
-
-    pub fn has_login_crypto_challenge(&self) -> bool {
-        self.login_crypto_challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_login_crypto_challenge(&mut self, v: LoginCryptoChallengeUnion) {
-        self.login_crypto_challenge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_login_crypto_challenge(&mut self) -> &mut LoginCryptoChallengeUnion {
-        if self.login_crypto_challenge.is_none() {
-            self.login_crypto_challenge.set_default();
-        }
-        self.login_crypto_challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_login_crypto_challenge(&mut self) -> LoginCryptoChallengeUnion {
-        self.login_crypto_challenge
-            .take()
-            .unwrap_or_else(|| LoginCryptoChallengeUnion::new())
-    }
-
-    // required .FingerprintChallengeUnion fingerprint_challenge = 20;
-
-    pub fn get_fingerprint_challenge(&self) -> &FingerprintChallengeUnion {
-        self.fingerprint_challenge
-            .as_ref()
-            .unwrap_or_else(|| FingerprintChallengeUnion::default_instance())
-    }
-    pub fn clear_fingerprint_challenge(&mut self) {
-        self.fingerprint_challenge.clear();
-    }
-
-    pub fn has_fingerprint_challenge(&self) -> bool {
-        self.fingerprint_challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fingerprint_challenge(&mut self, v: FingerprintChallengeUnion) {
-        self.fingerprint_challenge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_fingerprint_challenge(&mut self) -> &mut FingerprintChallengeUnion {
-        if self.fingerprint_challenge.is_none() {
-            self.fingerprint_challenge.set_default();
-        }
-        self.fingerprint_challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_fingerprint_challenge(&mut self) -> FingerprintChallengeUnion {
-        self.fingerprint_challenge
-            .take()
-            .unwrap_or_else(|| FingerprintChallengeUnion::new())
-    }
-
-    // required .PoWChallengeUnion pow_challenge = 30;
-
-    pub fn get_pow_challenge(&self) -> &PoWChallengeUnion {
-        self.pow_challenge
-            .as_ref()
-            .unwrap_or_else(|| PoWChallengeUnion::default_instance())
-    }
-    pub fn clear_pow_challenge(&mut self) {
-        self.pow_challenge.clear();
-    }
-
-    pub fn has_pow_challenge(&self) -> bool {
-        self.pow_challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pow_challenge(&mut self, v: PoWChallengeUnion) {
-        self.pow_challenge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_pow_challenge(&mut self) -> &mut PoWChallengeUnion {
-        if self.pow_challenge.is_none() {
-            self.pow_challenge.set_default();
-        }
-        self.pow_challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_pow_challenge(&mut self) -> PoWChallengeUnion {
-        self.pow_challenge
-            .take()
-            .unwrap_or_else(|| PoWChallengeUnion::new())
-    }
-
-    // required .CryptoChallengeUnion crypto_challenge = 40;
-
-    pub fn get_crypto_challenge(&self) -> &CryptoChallengeUnion {
-        self.crypto_challenge
-            .as_ref()
-            .unwrap_or_else(|| CryptoChallengeUnion::default_instance())
-    }
-    pub fn clear_crypto_challenge(&mut self) {
-        self.crypto_challenge.clear();
-    }
-
-    pub fn has_crypto_challenge(&self) -> bool {
-        self.crypto_challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_crypto_challenge(&mut self, v: CryptoChallengeUnion) {
-        self.crypto_challenge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_crypto_challenge(&mut self) -> &mut CryptoChallengeUnion {
-        if self.crypto_challenge.is_none() {
-            self.crypto_challenge.set_default();
-        }
-        self.crypto_challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_crypto_challenge(&mut self) -> CryptoChallengeUnion {
-        self.crypto_challenge
-            .take()
-            .unwrap_or_else(|| CryptoChallengeUnion::new())
-    }
-
-    // required bytes server_nonce = 50;
-
-    pub fn get_server_nonce(&self) -> &[u8] {
-        match self.server_nonce.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_server_nonce(&mut self) {
-        self.server_nonce.clear();
-    }
-
-    pub fn has_server_nonce(&self) -> bool {
-        self.server_nonce.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_server_nonce(&mut self, v: ::std::vec::Vec<u8>) {
-        self.server_nonce = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_server_nonce(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.server_nonce.is_none() {
-            self.server_nonce.set_default();
-        }
-        self.server_nonce.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_server_nonce(&mut self) -> ::std::vec::Vec<u8> {
-        self.server_nonce
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes padding = 60;
-
-    pub fn get_padding(&self) -> &[u8] {
-        match self.padding.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_padding(&mut self) {
-        self.padding.clear();
-    }
-
-    pub fn has_padding(&self) -> bool {
-        self.padding.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_padding(&mut self, v: ::std::vec::Vec<u8>) {
-        self.padding = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_padding(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.padding.is_none() {
-            self.padding.set_default();
-        }
-        self.padding.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_padding(&mut self) -> ::std::vec::Vec<u8> {
-        self.padding
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for APChallenge {
-    fn is_initialized(&self) -> bool {
-        if self.login_crypto_challenge.is_none() {
-            return false;
-        }
-        if self.fingerprint_challenge.is_none() {
-            return false;
-        }
-        if self.pow_challenge.is_none() {
-            return false;
-        }
-        if self.crypto_challenge.is_none() {
-            return false;
-        }
-        if self.server_nonce.is_none() {
-            return false;
-        }
-        for v in &self.login_crypto_challenge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.fingerprint_challenge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.pow_challenge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.crypto_challenge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.login_crypto_challenge,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.fingerprint_challenge,
-                    )?;
-                }
-                30 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.pow_challenge,
-                    )?;
-                }
-                40 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.crypto_challenge,
-                    )?;
-                }
-                50 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.server_nonce,
-                    )?;
-                }
-                60 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.padding)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.login_crypto_challenge.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.fingerprint_challenge.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.pow_challenge.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.crypto_challenge.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.server_nonce.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(50, &v);
-        }
-        if let Some(ref v) = self.padding.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(60, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.login_crypto_challenge.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.fingerprint_challenge.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.pow_challenge.as_ref() {
-            os.write_tag(30, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.crypto_challenge.as_ref() {
-            os.write_tag(40, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.server_nonce.as_ref() {
-            os.write_bytes(50, &v)?;
-        }
-        if let Some(ref v) = self.padding.as_ref() {
-            os.write_bytes(60, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> APChallenge {
-        APChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoChallengeUnion>,
-                    >(
-                        "login_crypto_challenge",
-                        |m: &APChallenge| &m.login_crypto_challenge,
-                        |m: &mut APChallenge| &mut m.login_crypto_challenge,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintChallengeUnion>,
-                    >(
-                        "fingerprint_challenge",
-                        |m: &APChallenge| &m.fingerprint_challenge,
-                        |m: &mut APChallenge| &mut m.fingerprint_challenge,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PoWChallengeUnion>,
-                    >(
-                        "pow_challenge",
-                        |m: &APChallenge| &m.pow_challenge,
-                        |m: &mut APChallenge| &mut m.pow_challenge,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoChallengeUnion>,
-                    >(
-                        "crypto_challenge",
-                        |m: &APChallenge| &m.crypto_challenge,
-                        |m: &mut APChallenge| &mut m.crypto_challenge,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "server_nonce",
-                        |m: &APChallenge| &m.server_nonce,
-                        |m: &mut APChallenge| &mut m.server_nonce,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "padding",
-                        |m: &APChallenge| &m.padding,
-                        |m: &mut APChallenge| &mut m.padding,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<APChallenge>(
-                    "APChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static APChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<APChallenge> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(APChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for APChallenge {
-    fn clear(&mut self) {
-        self.login_crypto_challenge.clear();
-        self.fingerprint_challenge.clear();
-        self.pow_challenge.clear();
-        self.crypto_challenge.clear();
-        self.server_nonce.clear();
-        self.padding.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for APChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for APChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoChallengeUnion {
-    // message fields
-    diffie_hellman: ::protobuf::SingularPtrField<LoginCryptoDiffieHellmanChallenge>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoChallengeUnion {
-    fn default() -> &'a LoginCryptoChallengeUnion {
-        <LoginCryptoChallengeUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoChallengeUnion {
-    pub fn new() -> LoginCryptoChallengeUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .LoginCryptoDiffieHellmanChallenge diffie_hellman = 10;
-
-    pub fn get_diffie_hellman(&self) -> &LoginCryptoDiffieHellmanChallenge {
-        self.diffie_hellman
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanChallenge::default_instance())
-    }
-    pub fn clear_diffie_hellman(&mut self) {
-        self.diffie_hellman.clear();
-    }
-
-    pub fn has_diffie_hellman(&self) -> bool {
-        self.diffie_hellman.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_diffie_hellman(&mut self, v: LoginCryptoDiffieHellmanChallenge) {
-        self.diffie_hellman = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_diffie_hellman(&mut self) -> &mut LoginCryptoDiffieHellmanChallenge {
-        if self.diffie_hellman.is_none() {
-            self.diffie_hellman.set_default();
-        }
-        self.diffie_hellman.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_diffie_hellman(&mut self) -> LoginCryptoDiffieHellmanChallenge {
-        self.diffie_hellman
-            .take()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanChallenge::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoChallengeUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.diffie_hellman {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.diffie_hellman,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoChallengeUnion {
-        LoginCryptoChallengeUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoDiffieHellmanChallenge>,
-                    >(
-                        "diffie_hellman",
-                        |m: &LoginCryptoChallengeUnion| &m.diffie_hellman,
-                        |m: &mut LoginCryptoChallengeUnion| &mut m.diffie_hellman,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LoginCryptoChallengeUnion>(
-                    "LoginCryptoChallengeUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoChallengeUnion {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoChallengeUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoChallengeUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoChallengeUnion {
-    fn clear(&mut self) {
-        self.diffie_hellman.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoChallengeUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoChallengeUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoDiffieHellmanChallenge {
-    // message fields
-    gs: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    server_signature_key: ::std::option::Option<i32>,
-    gs_signature: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoDiffieHellmanChallenge {
-    fn default() -> &'a LoginCryptoDiffieHellmanChallenge {
-        <LoginCryptoDiffieHellmanChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoDiffieHellmanChallenge {
-    pub fn new() -> LoginCryptoDiffieHellmanChallenge {
-        ::std::default::Default::default()
-    }
-
-    // required bytes gs = 10;
-
-    pub fn get_gs(&self) -> &[u8] {
-        match self.gs.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gs(&mut self) {
-        self.gs.clear();
-    }
-
-    pub fn has_gs(&self) -> bool {
-        self.gs.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gs(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gs = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gs(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gs.is_none() {
-            self.gs.set_default();
-        }
-        self.gs.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gs(&mut self) -> ::std::vec::Vec<u8> {
-        self.gs.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required int32 server_signature_key = 20;
-
-    pub fn get_server_signature_key(&self) -> i32 {
-        self.server_signature_key.unwrap_or(0)
-    }
-    pub fn clear_server_signature_key(&mut self) {
-        self.server_signature_key = ::std::option::Option::None;
-    }
-
-    pub fn has_server_signature_key(&self) -> bool {
-        self.server_signature_key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_server_signature_key(&mut self, v: i32) {
-        self.server_signature_key = ::std::option::Option::Some(v);
-    }
-
-    // required bytes gs_signature = 30;
-
-    pub fn get_gs_signature(&self) -> &[u8] {
-        match self.gs_signature.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gs_signature(&mut self) {
-        self.gs_signature.clear();
-    }
-
-    pub fn has_gs_signature(&self) -> bool {
-        self.gs_signature.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gs_signature(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gs_signature = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gs_signature(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gs_signature.is_none() {
-            self.gs_signature.set_default();
-        }
-        self.gs_signature.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gs_signature(&mut self) -> ::std::vec::Vec<u8> {
-        self.gs_signature
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoDiffieHellmanChallenge {
-    fn is_initialized(&self) -> bool {
-        if self.gs.is_none() {
-            return false;
-        }
-        if self.server_signature_key.is_none() {
-            return false;
-        }
-        if self.gs_signature.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gs)?;
-                }
-                20 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.server_signature_key = ::std::option::Option::Some(tmp);
-                }
-                30 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.gs_signature,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gs.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        if let Some(v) = self.server_signature_key {
-            my_size += ::protobuf::rt::value_size(20, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.gs_signature.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(30, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gs.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        if let Some(v) = self.server_signature_key {
-            os.write_int32(20, v)?;
-        }
-        if let Some(ref v) = self.gs_signature.as_ref() {
-            os.write_bytes(30, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoDiffieHellmanChallenge {
-        LoginCryptoDiffieHellmanChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "gs",
-                        |m: &LoginCryptoDiffieHellmanChallenge| &m.gs,
-                        |m: &mut LoginCryptoDiffieHellmanChallenge| &mut m.gs,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "server_signature_key",
-                    |m: &LoginCryptoDiffieHellmanChallenge| &m.server_signature_key,
-                    |m: &mut LoginCryptoDiffieHellmanChallenge| &mut m.server_signature_key,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "gs_signature",
-                        |m: &LoginCryptoDiffieHellmanChallenge| &m.gs_signature,
-                        |m: &mut LoginCryptoDiffieHellmanChallenge| &mut m.gs_signature,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<
-                    LoginCryptoDiffieHellmanChallenge,
-                >(
-                    "LoginCryptoDiffieHellmanChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoDiffieHellmanChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoDiffieHellmanChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoDiffieHellmanChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoDiffieHellmanChallenge {
-    fn clear(&mut self) {
-        self.gs.clear();
-        self.server_signature_key = ::std::option::Option::None;
-        self.gs_signature.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoDiffieHellmanChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoDiffieHellmanChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintChallengeUnion {
-    // message fields
-    grain: ::protobuf::SingularPtrField<FingerprintGrainChallenge>,
-    hmac_ripemd: ::protobuf::SingularPtrField<FingerprintHmacRipemdChallenge>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintChallengeUnion {
-    fn default() -> &'a FingerprintChallengeUnion {
-        <FingerprintChallengeUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintChallengeUnion {
-    pub fn new() -> FingerprintChallengeUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .FingerprintGrainChallenge grain = 10;
-
-    pub fn get_grain(&self) -> &FingerprintGrainChallenge {
-        self.grain
-            .as_ref()
-            .unwrap_or_else(|| FingerprintGrainChallenge::default_instance())
-    }
-    pub fn clear_grain(&mut self) {
-        self.grain.clear();
-    }
-
-    pub fn has_grain(&self) -> bool {
-        self.grain.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_grain(&mut self, v: FingerprintGrainChallenge) {
-        self.grain = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_grain(&mut self) -> &mut FingerprintGrainChallenge {
-        if self.grain.is_none() {
-            self.grain.set_default();
-        }
-        self.grain.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_grain(&mut self) -> FingerprintGrainChallenge {
-        self.grain
-            .take()
-            .unwrap_or_else(|| FingerprintGrainChallenge::new())
-    }
-
-    // optional .FingerprintHmacRipemdChallenge hmac_ripemd = 20;
-
-    pub fn get_hmac_ripemd(&self) -> &FingerprintHmacRipemdChallenge {
-        self.hmac_ripemd
-            .as_ref()
-            .unwrap_or_else(|| FingerprintHmacRipemdChallenge::default_instance())
-    }
-    pub fn clear_hmac_ripemd(&mut self) {
-        self.hmac_ripemd.clear();
-    }
-
-    pub fn has_hmac_ripemd(&self) -> bool {
-        self.hmac_ripemd.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hmac_ripemd(&mut self, v: FingerprintHmacRipemdChallenge) {
-        self.hmac_ripemd = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hmac_ripemd(&mut self) -> &mut FingerprintHmacRipemdChallenge {
-        if self.hmac_ripemd.is_none() {
-            self.hmac_ripemd.set_default();
-        }
-        self.hmac_ripemd.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hmac_ripemd(&mut self) -> FingerprintHmacRipemdChallenge {
-        self.hmac_ripemd
-            .take()
-            .unwrap_or_else(|| FingerprintHmacRipemdChallenge::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintChallengeUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.grain {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.hmac_ripemd {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.grain)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.hmac_ripemd,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.grain.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.hmac_ripemd.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.grain.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.hmac_ripemd.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintChallengeUnion {
-        FingerprintChallengeUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintGrainChallenge>,
-                    >(
-                        "grain",
-                        |m: &FingerprintChallengeUnion| &m.grain,
-                        |m: &mut FingerprintChallengeUnion| &mut m.grain,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<FingerprintHmacRipemdChallenge>,
-                    >(
-                        "hmac_ripemd",
-                        |m: &FingerprintChallengeUnion| &m.hmac_ripemd,
-                        |m: &mut FingerprintChallengeUnion| &mut m.hmac_ripemd,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintChallengeUnion>(
-                    "FingerprintChallengeUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintChallengeUnion {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintChallengeUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintChallengeUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintChallengeUnion {
-    fn clear(&mut self) {
-        self.grain.clear();
-        self.hmac_ripemd.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintChallengeUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintChallengeUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintGrainChallenge {
-    // message fields
-    kek: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintGrainChallenge {
-    fn default() -> &'a FingerprintGrainChallenge {
-        <FingerprintGrainChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintGrainChallenge {
-    pub fn new() -> FingerprintGrainChallenge {
-        ::std::default::Default::default()
-    }
-
-    // required bytes kek = 10;
-
-    pub fn get_kek(&self) -> &[u8] {
-        match self.kek.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_kek(&mut self) {
-        self.kek.clear();
-    }
-
-    pub fn has_kek(&self) -> bool {
-        self.kek.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_kek(&mut self, v: ::std::vec::Vec<u8>) {
-        self.kek = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_kek(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.kek.is_none() {
-            self.kek.set_default();
-        }
-        self.kek.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_kek(&mut self) -> ::std::vec::Vec<u8> {
-        self.kek.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintGrainChallenge {
-    fn is_initialized(&self) -> bool {
-        if self.kek.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.kek)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.kek.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.kek.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintGrainChallenge {
-        FingerprintGrainChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "kek",
-                        |m: &FingerprintGrainChallenge| &m.kek,
-                        |m: &mut FingerprintGrainChallenge| &mut m.kek,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintGrainChallenge>(
-                    "FingerprintGrainChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintGrainChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintGrainChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintGrainChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintGrainChallenge {
-    fn clear(&mut self) {
-        self.kek.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintGrainChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintGrainChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct FingerprintHmacRipemdChallenge {
-    // message fields
-    challenge: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a FingerprintHmacRipemdChallenge {
-    fn default() -> &'a FingerprintHmacRipemdChallenge {
-        <FingerprintHmacRipemdChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl FingerprintHmacRipemdChallenge {
-    pub fn new() -> FingerprintHmacRipemdChallenge {
-        ::std::default::Default::default()
-    }
-
-    // required bytes challenge = 10;
-
-    pub fn get_challenge(&self) -> &[u8] {
-        match self.challenge.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_challenge(&mut self) {
-        self.challenge.clear();
-    }
-
-    pub fn has_challenge(&self) -> bool {
-        self.challenge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_challenge(&mut self, v: ::std::vec::Vec<u8>) {
-        self.challenge = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_challenge(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.challenge.is_none() {
-            self.challenge.set_default();
-        }
-        self.challenge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_challenge(&mut self) -> ::std::vec::Vec<u8> {
-        self.challenge
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for FingerprintHmacRipemdChallenge {
-    fn is_initialized(&self) -> bool {
-        if self.challenge.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.challenge)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.challenge.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.challenge.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> FingerprintHmacRipemdChallenge {
-        FingerprintHmacRipemdChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>(
-                    "challenge",
-                    |m: &FingerprintHmacRipemdChallenge| { &m.challenge },
-                    |m: &mut FingerprintHmacRipemdChallenge| { &mut m.challenge },
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<FingerprintHmacRipemdChallenge>(
-                    "FingerprintHmacRipemdChallenge",
-                    fields,
-                    file_descriptor_proto()
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static FingerprintHmacRipemdChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<FingerprintHmacRipemdChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(FingerprintHmacRipemdChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for FingerprintHmacRipemdChallenge {
-    fn clear(&mut self) {
-        self.challenge.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for FingerprintHmacRipemdChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for FingerprintHmacRipemdChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PoWChallengeUnion {
-    // message fields
-    hash_cash: ::protobuf::SingularPtrField<PoWHashCashChallenge>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PoWChallengeUnion {
-    fn default() -> &'a PoWChallengeUnion {
-        <PoWChallengeUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PoWChallengeUnion {
-    pub fn new() -> PoWChallengeUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .PoWHashCashChallenge hash_cash = 10;
-
-    pub fn get_hash_cash(&self) -> &PoWHashCashChallenge {
-        self.hash_cash
-            .as_ref()
-            .unwrap_or_else(|| PoWHashCashChallenge::default_instance())
-    }
-    pub fn clear_hash_cash(&mut self) {
-        self.hash_cash.clear();
-    }
-
-    pub fn has_hash_cash(&self) -> bool {
-        self.hash_cash.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hash_cash(&mut self, v: PoWHashCashChallenge) {
-        self.hash_cash = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hash_cash(&mut self) -> &mut PoWHashCashChallenge {
-        if self.hash_cash.is_none() {
-            self.hash_cash.set_default();
-        }
-        self.hash_cash.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hash_cash(&mut self) -> PoWHashCashChallenge {
-        self.hash_cash
-            .take()
-            .unwrap_or_else(|| PoWHashCashChallenge::new())
-    }
-}
-
-impl ::protobuf::Message for PoWChallengeUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.hash_cash {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.hash_cash)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.hash_cash.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.hash_cash.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PoWChallengeUnion {
-        PoWChallengeUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PoWHashCashChallenge>,
-                    >(
-                        "hash_cash",
-                        |m: &PoWChallengeUnion| &m.hash_cash,
-                        |m: &mut PoWChallengeUnion| &mut m.hash_cash,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PoWChallengeUnion>(
-                    "PoWChallengeUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PoWChallengeUnion {
-        static mut instance: ::protobuf::lazy::Lazy<PoWChallengeUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PoWChallengeUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for PoWChallengeUnion {
-    fn clear(&mut self) {
-        self.hash_cash.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PoWChallengeUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PoWChallengeUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PoWHashCashChallenge {
-    // message fields
-    prefix: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    length: ::std::option::Option<i32>,
-    target: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PoWHashCashChallenge {
-    fn default() -> &'a PoWHashCashChallenge {
-        <PoWHashCashChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PoWHashCashChallenge {
-    pub fn new() -> PoWHashCashChallenge {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes prefix = 10;
-
-    pub fn get_prefix(&self) -> &[u8] {
-        match self.prefix.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_prefix(&mut self) {
-        self.prefix.clear();
-    }
-
-    pub fn has_prefix(&self) -> bool {
-        self.prefix.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_prefix(&mut self, v: ::std::vec::Vec<u8>) {
-        self.prefix = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_prefix(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.prefix.is_none() {
-            self.prefix.set_default();
-        }
-        self.prefix.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_prefix(&mut self) -> ::std::vec::Vec<u8> {
-        self.prefix.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional int32 length = 20;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 target = 30;
-
-    pub fn get_target(&self) -> i32 {
-        self.target.unwrap_or(0)
-    }
-    pub fn clear_target(&mut self) {
-        self.target = ::std::option::Option::None;
-    }
-
-    pub fn has_target(&self) -> bool {
-        self.target.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_target(&mut self, v: i32) {
-        self.target = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for PoWHashCashChallenge {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.prefix)?;
-                }
-                20 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                30 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.target = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.prefix.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(20, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.target {
-            my_size += ::protobuf::rt::value_size(30, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.prefix.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(20, v)?;
-        }
-        if let Some(v) = self.target {
-            os.write_int32(30, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PoWHashCashChallenge {
-        PoWHashCashChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "prefix",
-                        |m: &PoWHashCashChallenge| &m.prefix,
-                        |m: &mut PoWHashCashChallenge| &mut m.prefix,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length",
-                    |m: &PoWHashCashChallenge| &m.length,
-                    |m: &mut PoWHashCashChallenge| &mut m.length,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "target",
-                    |m: &PoWHashCashChallenge| &m.target,
-                    |m: &mut PoWHashCashChallenge| &mut m.target,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PoWHashCashChallenge>(
-                    "PoWHashCashChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PoWHashCashChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<PoWHashCashChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PoWHashCashChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for PoWHashCashChallenge {
-    fn clear(&mut self) {
-        self.prefix.clear();
-        self.length = ::std::option::Option::None;
-        self.target = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PoWHashCashChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PoWHashCashChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoChallengeUnion {
-    // message fields
-    shannon: ::protobuf::SingularPtrField<CryptoShannonChallenge>,
-    rc4_sha1_hmac: ::protobuf::SingularPtrField<CryptoRc4Sha1HmacChallenge>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoChallengeUnion {
-    fn default() -> &'a CryptoChallengeUnion {
-        <CryptoChallengeUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoChallengeUnion {
-    pub fn new() -> CryptoChallengeUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .CryptoShannonChallenge shannon = 10;
-
-    pub fn get_shannon(&self) -> &CryptoShannonChallenge {
-        self.shannon
-            .as_ref()
-            .unwrap_or_else(|| CryptoShannonChallenge::default_instance())
-    }
-    pub fn clear_shannon(&mut self) {
-        self.shannon.clear();
-    }
-
-    pub fn has_shannon(&self) -> bool {
-        self.shannon.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_shannon(&mut self, v: CryptoShannonChallenge) {
-        self.shannon = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_shannon(&mut self) -> &mut CryptoShannonChallenge {
-        if self.shannon.is_none() {
-            self.shannon.set_default();
-        }
-        self.shannon.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_shannon(&mut self) -> CryptoShannonChallenge {
-        self.shannon
-            .take()
-            .unwrap_or_else(|| CryptoShannonChallenge::new())
-    }
-
-    // optional .CryptoRc4Sha1HmacChallenge rc4_sha1_hmac = 20;
-
-    pub fn get_rc4_sha1_hmac(&self) -> &CryptoRc4Sha1HmacChallenge {
-        self.rc4_sha1_hmac
-            .as_ref()
-            .unwrap_or_else(|| CryptoRc4Sha1HmacChallenge::default_instance())
-    }
-    pub fn clear_rc4_sha1_hmac(&mut self) {
-        self.rc4_sha1_hmac.clear();
-    }
-
-    pub fn has_rc4_sha1_hmac(&self) -> bool {
-        self.rc4_sha1_hmac.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_rc4_sha1_hmac(&mut self, v: CryptoRc4Sha1HmacChallenge) {
-        self.rc4_sha1_hmac = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_rc4_sha1_hmac(&mut self) -> &mut CryptoRc4Sha1HmacChallenge {
-        if self.rc4_sha1_hmac.is_none() {
-            self.rc4_sha1_hmac.set_default();
-        }
-        self.rc4_sha1_hmac.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_rc4_sha1_hmac(&mut self) -> CryptoRc4Sha1HmacChallenge {
-        self.rc4_sha1_hmac
-            .take()
-            .unwrap_or_else(|| CryptoRc4Sha1HmacChallenge::new())
-    }
-}
-
-impl ::protobuf::Message for CryptoChallengeUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.shannon {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.rc4_sha1_hmac {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.shannon)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.rc4_sha1_hmac,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.shannon.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.rc4_sha1_hmac.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.shannon.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.rc4_sha1_hmac.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoChallengeUnion {
-        CryptoChallengeUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoShannonChallenge>,
-                    >(
-                        "shannon",
-                        |m: &CryptoChallengeUnion| &m.shannon,
-                        |m: &mut CryptoChallengeUnion| &mut m.shannon,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoRc4Sha1HmacChallenge>,
-                    >(
-                        "rc4_sha1_hmac",
-                        |m: &CryptoChallengeUnion| &m.rc4_sha1_hmac,
-                        |m: &mut CryptoChallengeUnion| &mut m.rc4_sha1_hmac,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoChallengeUnion>(
-                    "CryptoChallengeUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoChallengeUnion {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoChallengeUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoChallengeUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoChallengeUnion {
-    fn clear(&mut self) {
-        self.shannon.clear();
-        self.rc4_sha1_hmac.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoChallengeUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoChallengeUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoShannonChallenge {
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoShannonChallenge {
-    fn default() -> &'a CryptoShannonChallenge {
-        <CryptoShannonChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoShannonChallenge {
-    pub fn new() -> CryptoShannonChallenge {
-        ::std::default::Default::default()
-    }
-}
-
-impl ::protobuf::Message for CryptoShannonChallenge {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoShannonChallenge {
-        CryptoShannonChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoShannonChallenge>(
-                    "CryptoShannonChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoShannonChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoShannonChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoShannonChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoShannonChallenge {
-    fn clear(&mut self) {
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoShannonChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoShannonChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoRc4Sha1HmacChallenge {
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoRc4Sha1HmacChallenge {
-    fn default() -> &'a CryptoRc4Sha1HmacChallenge {
-        <CryptoRc4Sha1HmacChallenge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoRc4Sha1HmacChallenge {
-    pub fn new() -> CryptoRc4Sha1HmacChallenge {
-        ::std::default::Default::default()
-    }
-}
-
-impl ::protobuf::Message for CryptoRc4Sha1HmacChallenge {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoRc4Sha1HmacChallenge {
-        CryptoRc4Sha1HmacChallenge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let fields = ::std::vec::Vec::new();
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoRc4Sha1HmacChallenge>(
-                    "CryptoRc4Sha1HmacChallenge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoRc4Sha1HmacChallenge {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoRc4Sha1HmacChallenge> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoRc4Sha1HmacChallenge::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoRc4Sha1HmacChallenge {
-    fn clear(&mut self) {
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoRc4Sha1HmacChallenge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoRc4Sha1HmacChallenge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct UpgradeRequiredMessage {
-    // message fields
-    upgrade_signed_part: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    signature: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    http_suffix: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a UpgradeRequiredMessage {
-    fn default() -> &'a UpgradeRequiredMessage {
-        <UpgradeRequiredMessage as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl UpgradeRequiredMessage {
-    pub fn new() -> UpgradeRequiredMessage {
-        ::std::default::Default::default()
-    }
-
-    // required bytes upgrade_signed_part = 10;
-
-    pub fn get_upgrade_signed_part(&self) -> &[u8] {
-        match self.upgrade_signed_part.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_upgrade_signed_part(&mut self) {
-        self.upgrade_signed_part.clear();
-    }
-
-    pub fn has_upgrade_signed_part(&self) -> bool {
-        self.upgrade_signed_part.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_upgrade_signed_part(&mut self, v: ::std::vec::Vec<u8>) {
-        self.upgrade_signed_part = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_upgrade_signed_part(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.upgrade_signed_part.is_none() {
-            self.upgrade_signed_part.set_default();
-        }
-        self.upgrade_signed_part.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_upgrade_signed_part(&mut self) -> ::std::vec::Vec<u8> {
-        self.upgrade_signed_part
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // required bytes signature = 20;
-
-    pub fn get_signature(&self) -> &[u8] {
-        match self.signature.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_signature(&mut self) {
-        self.signature.clear();
-    }
-
-    pub fn has_signature(&self) -> bool {
-        self.signature.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_signature(&mut self, v: ::std::vec::Vec<u8>) {
-        self.signature = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_signature(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.signature.is_none() {
-            self.signature.set_default();
-        }
-        self.signature.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_signature(&mut self) -> ::std::vec::Vec<u8> {
-        self.signature
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string http_suffix = 30;
-
-    pub fn get_http_suffix(&self) -> &str {
-        match self.http_suffix.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_http_suffix(&mut self) {
-        self.http_suffix.clear();
-    }
-
-    pub fn has_http_suffix(&self) -> bool {
-        self.http_suffix.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_http_suffix(&mut self, v: ::std::string::String) {
-        self.http_suffix = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_http_suffix(&mut self) -> &mut ::std::string::String {
-        if self.http_suffix.is_none() {
-            self.http_suffix.set_default();
-        }
-        self.http_suffix.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_http_suffix(&mut self) -> ::std::string::String {
-        self.http_suffix
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for UpgradeRequiredMessage {
-    fn is_initialized(&self) -> bool {
-        if self.upgrade_signed_part.is_none() {
-            return false;
-        }
-        if self.signature.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.upgrade_signed_part,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.signature)?;
-                }
-                30 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.http_suffix,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.upgrade_signed_part.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        if let Some(ref v) = self.signature.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(20, &v);
-        }
-        if let Some(ref v) = self.http_suffix.as_ref() {
-            my_size += ::protobuf::rt::string_size(30, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.upgrade_signed_part.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        if let Some(ref v) = self.signature.as_ref() {
-            os.write_bytes(20, &v)?;
-        }
-        if let Some(ref v) = self.http_suffix.as_ref() {
-            os.write_string(30, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> UpgradeRequiredMessage {
-        UpgradeRequiredMessage::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "upgrade_signed_part",
-                        |m: &UpgradeRequiredMessage| &m.upgrade_signed_part,
-                        |m: &mut UpgradeRequiredMessage| &mut m.upgrade_signed_part,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "signature",
-                        |m: &UpgradeRequiredMessage| &m.signature,
-                        |m: &mut UpgradeRequiredMessage| &mut m.signature,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "http_suffix",
-                        |m: &UpgradeRequiredMessage| &m.http_suffix,
-                        |m: &mut UpgradeRequiredMessage| &mut m.http_suffix,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<UpgradeRequiredMessage>(
-                    "UpgradeRequiredMessage",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static UpgradeRequiredMessage {
-        static mut instance: ::protobuf::lazy::Lazy<UpgradeRequiredMessage> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(UpgradeRequiredMessage::new) }
-    }
-}
-
-impl ::protobuf::Clear for UpgradeRequiredMessage {
-    fn clear(&mut self) {
-        self.upgrade_signed_part.clear();
-        self.signature.clear();
-        self.http_suffix.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for UpgradeRequiredMessage {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for UpgradeRequiredMessage {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct APLoginFailed {
-    // message fields
-    error_code: ::std::option::Option<ErrorCode>,
-    retry_delay: ::std::option::Option<i32>,
-    expiry: ::std::option::Option<i32>,
-    error_description: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a APLoginFailed {
-    fn default() -> &'a APLoginFailed {
-        <APLoginFailed as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl APLoginFailed {
-    pub fn new() -> APLoginFailed {
-        ::std::default::Default::default()
-    }
-
-    // required .ErrorCode error_code = 10;
-
-    pub fn get_error_code(&self) -> ErrorCode {
-        self.error_code.unwrap_or(ErrorCode::ProtocolError)
-    }
-    pub fn clear_error_code(&mut self) {
-        self.error_code = ::std::option::Option::None;
-    }
-
-    pub fn has_error_code(&self) -> bool {
-        self.error_code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_error_code(&mut self, v: ErrorCode) {
-        self.error_code = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 retry_delay = 20;
-
-    pub fn get_retry_delay(&self) -> i32 {
-        self.retry_delay.unwrap_or(0)
-    }
-    pub fn clear_retry_delay(&mut self) {
-        self.retry_delay = ::std::option::Option::None;
-    }
-
-    pub fn has_retry_delay(&self) -> bool {
-        self.retry_delay.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_retry_delay(&mut self, v: i32) {
-        self.retry_delay = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 expiry = 30;
-
-    pub fn get_expiry(&self) -> i32 {
-        self.expiry.unwrap_or(0)
-    }
-    pub fn clear_expiry(&mut self) {
-        self.expiry = ::std::option::Option::None;
-    }
-
-    pub fn has_expiry(&self) -> bool {
-        self.expiry.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_expiry(&mut self, v: i32) {
-        self.expiry = ::std::option::Option::Some(v);
-    }
-
-    // optional string error_description = 40;
-
-    pub fn get_error_description(&self) -> &str {
-        match self.error_description.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_error_description(&mut self) {
-        self.error_description.clear();
-    }
-
-    pub fn has_error_description(&self) -> bool {
-        self.error_description.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_error_description(&mut self, v: ::std::string::String) {
-        self.error_description = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_error_description(&mut self) -> &mut ::std::string::String {
-        if self.error_description.is_none() {
-            self.error_description.set_default();
-        }
-        self.error_description.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_error_description(&mut self) -> ::std::string::String {
-        self.error_description
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for APLoginFailed {
-    fn is_initialized(&self) -> bool {
-        if self.error_code.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.error_code,
-                    10,
-                    &mut self.unknown_fields,
-                )?,
-                20 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.retry_delay = ::std::option::Option::Some(tmp);
-                }
-                30 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.expiry = ::std::option::Option::Some(tmp);
-                }
-                40 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.error_description,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.error_code {
-            my_size += ::protobuf::rt::enum_size(10, v);
-        }
-        if let Some(v) = self.retry_delay {
-            my_size += ::protobuf::rt::value_size(20, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.expiry {
-            my_size += ::protobuf::rt::value_size(30, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.error_description.as_ref() {
-            my_size += ::protobuf::rt::string_size(40, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.error_code {
-            os.write_enum(10, v.value())?;
-        }
-        if let Some(v) = self.retry_delay {
-            os.write_int32(20, v)?;
-        }
-        if let Some(v) = self.expiry {
-            os.write_int32(30, v)?;
-        }
-        if let Some(ref v) = self.error_description.as_ref() {
-            os.write_string(40, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> APLoginFailed {
-        APLoginFailed::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ErrorCode>,
-                >(
-                    "error_code",
-                    |m: &APLoginFailed| &m.error_code,
-                    |m: &mut APLoginFailed| &mut m.error_code,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "retry_delay",
-                    |m: &APLoginFailed| &m.retry_delay,
-                    |m: &mut APLoginFailed| &mut m.retry_delay,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "expiry",
-                    |m: &APLoginFailed| &m.expiry,
-                    |m: &mut APLoginFailed| &mut m.expiry,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "error_description",
-                        |m: &APLoginFailed| &m.error_description,
-                        |m: &mut APLoginFailed| &mut m.error_description,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<APLoginFailed>(
-                    "APLoginFailed",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static APLoginFailed {
-        static mut instance: ::protobuf::lazy::Lazy<APLoginFailed> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(APLoginFailed::new) }
-    }
-}
-
-impl ::protobuf::Clear for APLoginFailed {
-    fn clear(&mut self) {
-        self.error_code = ::std::option::Option::None;
-        self.retry_delay = ::std::option::Option::None;
-        self.expiry = ::std::option::Option::None;
-        self.error_description.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for APLoginFailed {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for APLoginFailed {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientResponsePlaintext {
-    // message fields
-    login_crypto_response: ::protobuf::SingularPtrField<LoginCryptoResponseUnion>,
-    pow_response: ::protobuf::SingularPtrField<PoWResponseUnion>,
-    crypto_response: ::protobuf::SingularPtrField<CryptoResponseUnion>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientResponsePlaintext {
-    fn default() -> &'a ClientResponsePlaintext {
-        <ClientResponsePlaintext as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientResponsePlaintext {
-    pub fn new() -> ClientResponsePlaintext {
-        ::std::default::Default::default()
-    }
-
-    // required .LoginCryptoResponseUnion login_crypto_response = 10;
-
-    pub fn get_login_crypto_response(&self) -> &LoginCryptoResponseUnion {
-        self.login_crypto_response
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoResponseUnion::default_instance())
-    }
-    pub fn clear_login_crypto_response(&mut self) {
-        self.login_crypto_response.clear();
-    }
-
-    pub fn has_login_crypto_response(&self) -> bool {
-        self.login_crypto_response.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_login_crypto_response(&mut self, v: LoginCryptoResponseUnion) {
-        self.login_crypto_response = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_login_crypto_response(&mut self) -> &mut LoginCryptoResponseUnion {
-        if self.login_crypto_response.is_none() {
-            self.login_crypto_response.set_default();
-        }
-        self.login_crypto_response.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_login_crypto_response(&mut self) -> LoginCryptoResponseUnion {
-        self.login_crypto_response
-            .take()
-            .unwrap_or_else(|| LoginCryptoResponseUnion::new())
-    }
-
-    // required .PoWResponseUnion pow_response = 20;
-
-    pub fn get_pow_response(&self) -> &PoWResponseUnion {
-        self.pow_response
-            .as_ref()
-            .unwrap_or_else(|| PoWResponseUnion::default_instance())
-    }
-    pub fn clear_pow_response(&mut self) {
-        self.pow_response.clear();
-    }
-
-    pub fn has_pow_response(&self) -> bool {
-        self.pow_response.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pow_response(&mut self, v: PoWResponseUnion) {
-        self.pow_response = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_pow_response(&mut self) -> &mut PoWResponseUnion {
-        if self.pow_response.is_none() {
-            self.pow_response.set_default();
-        }
-        self.pow_response.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_pow_response(&mut self) -> PoWResponseUnion {
-        self.pow_response
-            .take()
-            .unwrap_or_else(|| PoWResponseUnion::new())
-    }
-
-    // required .CryptoResponseUnion crypto_response = 30;
-
-    pub fn get_crypto_response(&self) -> &CryptoResponseUnion {
-        self.crypto_response
-            .as_ref()
-            .unwrap_or_else(|| CryptoResponseUnion::default_instance())
-    }
-    pub fn clear_crypto_response(&mut self) {
-        self.crypto_response.clear();
-    }
-
-    pub fn has_crypto_response(&self) -> bool {
-        self.crypto_response.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_crypto_response(&mut self, v: CryptoResponseUnion) {
-        self.crypto_response = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_crypto_response(&mut self) -> &mut CryptoResponseUnion {
-        if self.crypto_response.is_none() {
-            self.crypto_response.set_default();
-        }
-        self.crypto_response.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_crypto_response(&mut self) -> CryptoResponseUnion {
-        self.crypto_response
-            .take()
-            .unwrap_or_else(|| CryptoResponseUnion::new())
-    }
-}
-
-impl ::protobuf::Message for ClientResponsePlaintext {
-    fn is_initialized(&self) -> bool {
-        if self.login_crypto_response.is_none() {
-            return false;
-        }
-        if self.pow_response.is_none() {
-            return false;
-        }
-        if self.crypto_response.is_none() {
-            return false;
-        }
-        for v in &self.login_crypto_response {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.pow_response {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.crypto_response {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.login_crypto_response,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.pow_response,
-                    )?;
-                }
-                30 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.crypto_response,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.login_crypto_response.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.pow_response.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.crypto_response.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.login_crypto_response.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.pow_response.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.crypto_response.as_ref() {
-            os.write_tag(30, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientResponsePlaintext {
-        ClientResponsePlaintext::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoResponseUnion>,
-                    >(
-                        "login_crypto_response",
-                        |m: &ClientResponsePlaintext| &m.login_crypto_response,
-                        |m: &mut ClientResponsePlaintext| &mut m.login_crypto_response,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PoWResponseUnion>,
-                    >(
-                        "pow_response",
-                        |m: &ClientResponsePlaintext| &m.pow_response,
-                        |m: &mut ClientResponsePlaintext| &mut m.pow_response,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoResponseUnion>,
-                    >(
-                        "crypto_response",
-                        |m: &ClientResponsePlaintext| &m.crypto_response,
-                        |m: &mut ClientResponsePlaintext| &mut m.crypto_response,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientResponsePlaintext>(
-                    "ClientResponsePlaintext",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientResponsePlaintext {
-        static mut instance: ::protobuf::lazy::Lazy<ClientResponsePlaintext> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientResponsePlaintext::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientResponsePlaintext {
-    fn clear(&mut self) {
-        self.login_crypto_response.clear();
-        self.pow_response.clear();
-        self.crypto_response.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientResponsePlaintext {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientResponsePlaintext {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoResponseUnion {
-    // message fields
-    diffie_hellman: ::protobuf::SingularPtrField<LoginCryptoDiffieHellmanResponse>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoResponseUnion {
-    fn default() -> &'a LoginCryptoResponseUnion {
-        <LoginCryptoResponseUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoResponseUnion {
-    pub fn new() -> LoginCryptoResponseUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .LoginCryptoDiffieHellmanResponse diffie_hellman = 10;
-
-    pub fn get_diffie_hellman(&self) -> &LoginCryptoDiffieHellmanResponse {
-        self.diffie_hellman
-            .as_ref()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanResponse::default_instance())
-    }
-    pub fn clear_diffie_hellman(&mut self) {
-        self.diffie_hellman.clear();
-    }
-
-    pub fn has_diffie_hellman(&self) -> bool {
-        self.diffie_hellman.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_diffie_hellman(&mut self, v: LoginCryptoDiffieHellmanResponse) {
-        self.diffie_hellman = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_diffie_hellman(&mut self) -> &mut LoginCryptoDiffieHellmanResponse {
-        if self.diffie_hellman.is_none() {
-            self.diffie_hellman.set_default();
-        }
-        self.diffie_hellman.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_diffie_hellman(&mut self) -> LoginCryptoDiffieHellmanResponse {
-        self.diffie_hellman
-            .take()
-            .unwrap_or_else(|| LoginCryptoDiffieHellmanResponse::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoResponseUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.diffie_hellman {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.diffie_hellman,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.diffie_hellman.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoResponseUnion {
-        LoginCryptoResponseUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<LoginCryptoDiffieHellmanResponse>,
-                    >(
-                        "diffie_hellman",
-                        |m: &LoginCryptoResponseUnion| &m.diffie_hellman,
-                        |m: &mut LoginCryptoResponseUnion| &mut m.diffie_hellman,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<LoginCryptoResponseUnion>(
-                    "LoginCryptoResponseUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoResponseUnion {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoResponseUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoResponseUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoResponseUnion {
-    fn clear(&mut self) {
-        self.diffie_hellman.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoResponseUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoResponseUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct LoginCryptoDiffieHellmanResponse {
-    // message fields
-    hmac: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a LoginCryptoDiffieHellmanResponse {
-    fn default() -> &'a LoginCryptoDiffieHellmanResponse {
-        <LoginCryptoDiffieHellmanResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl LoginCryptoDiffieHellmanResponse {
-    pub fn new() -> LoginCryptoDiffieHellmanResponse {
-        ::std::default::Default::default()
-    }
-
-    // required bytes hmac = 10;
-
-    pub fn get_hmac(&self) -> &[u8] {
-        match self.hmac.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_hmac(&mut self) {
-        self.hmac.clear();
-    }
-
-    pub fn has_hmac(&self) -> bool {
-        self.hmac.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hmac(&mut self, v: ::std::vec::Vec<u8>) {
-        self.hmac = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hmac(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.hmac.is_none() {
-            self.hmac.set_default();
-        }
-        self.hmac.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hmac(&mut self) -> ::std::vec::Vec<u8> {
-        self.hmac.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for LoginCryptoDiffieHellmanResponse {
-    fn is_initialized(&self) -> bool {
-        if self.hmac.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.hmac)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.hmac.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.hmac.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> LoginCryptoDiffieHellmanResponse {
-        LoginCryptoDiffieHellmanResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "hmac",
-                        |m: &LoginCryptoDiffieHellmanResponse| &m.hmac,
-                        |m: &mut LoginCryptoDiffieHellmanResponse| &mut m.hmac,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<
-                    LoginCryptoDiffieHellmanResponse,
-                >(
-                    "LoginCryptoDiffieHellmanResponse",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static LoginCryptoDiffieHellmanResponse {
-        static mut instance: ::protobuf::lazy::Lazy<LoginCryptoDiffieHellmanResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(LoginCryptoDiffieHellmanResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for LoginCryptoDiffieHellmanResponse {
-    fn clear(&mut self) {
-        self.hmac.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for LoginCryptoDiffieHellmanResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for LoginCryptoDiffieHellmanResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PoWResponseUnion {
-    // message fields
-    hash_cash: ::protobuf::SingularPtrField<PoWHashCashResponse>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PoWResponseUnion {
-    fn default() -> &'a PoWResponseUnion {
-        <PoWResponseUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PoWResponseUnion {
-    pub fn new() -> PoWResponseUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .PoWHashCashResponse hash_cash = 10;
-
-    pub fn get_hash_cash(&self) -> &PoWHashCashResponse {
-        self.hash_cash
-            .as_ref()
-            .unwrap_or_else(|| PoWHashCashResponse::default_instance())
-    }
-    pub fn clear_hash_cash(&mut self) {
-        self.hash_cash.clear();
-    }
-
-    pub fn has_hash_cash(&self) -> bool {
-        self.hash_cash.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hash_cash(&mut self, v: PoWHashCashResponse) {
-        self.hash_cash = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hash_cash(&mut self) -> &mut PoWHashCashResponse {
-        if self.hash_cash.is_none() {
-            self.hash_cash.set_default();
-        }
-        self.hash_cash.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hash_cash(&mut self) -> PoWHashCashResponse {
-        self.hash_cash
-            .take()
-            .unwrap_or_else(|| PoWHashCashResponse::new())
-    }
-}
-
-impl ::protobuf::Message for PoWResponseUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.hash_cash {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.hash_cash)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.hash_cash.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.hash_cash.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PoWResponseUnion {
-        PoWResponseUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<PoWHashCashResponse>,
-                    >(
-                        "hash_cash",
-                        |m: &PoWResponseUnion| &m.hash_cash,
-                        |m: &mut PoWResponseUnion| &mut m.hash_cash,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PoWResponseUnion>(
-                    "PoWResponseUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PoWResponseUnion {
-        static mut instance: ::protobuf::lazy::Lazy<PoWResponseUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PoWResponseUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for PoWResponseUnion {
-    fn clear(&mut self) {
-        self.hash_cash.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PoWResponseUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PoWResponseUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct PoWHashCashResponse {
-    // message fields
-    hash_suffix: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a PoWHashCashResponse {
-    fn default() -> &'a PoWHashCashResponse {
-        <PoWHashCashResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl PoWHashCashResponse {
-    pub fn new() -> PoWHashCashResponse {
-        ::std::default::Default::default()
-    }
-
-    // required bytes hash_suffix = 10;
-
-    pub fn get_hash_suffix(&self) -> &[u8] {
-        match self.hash_suffix.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_hash_suffix(&mut self) {
-        self.hash_suffix.clear();
-    }
-
-    pub fn has_hash_suffix(&self) -> bool {
-        self.hash_suffix.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hash_suffix(&mut self, v: ::std::vec::Vec<u8>) {
-        self.hash_suffix = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hash_suffix(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.hash_suffix.is_none() {
-            self.hash_suffix.set_default();
-        }
-        self.hash_suffix.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hash_suffix(&mut self) -> ::std::vec::Vec<u8> {
-        self.hash_suffix
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for PoWHashCashResponse {
-    fn is_initialized(&self) -> bool {
-        if self.hash_suffix.is_none() {
-            return false;
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.hash_suffix)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.hash_suffix.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.hash_suffix.as_ref() {
-            os.write_bytes(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> PoWHashCashResponse {
-        PoWHashCashResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "hash_suffix",
-                        |m: &PoWHashCashResponse| &m.hash_suffix,
-                        |m: &mut PoWHashCashResponse| &mut m.hash_suffix,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<PoWHashCashResponse>(
-                    "PoWHashCashResponse",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static PoWHashCashResponse {
-        static mut instance: ::protobuf::lazy::Lazy<PoWHashCashResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(PoWHashCashResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for PoWHashCashResponse {
-    fn clear(&mut self) {
-        self.hash_suffix.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for PoWHashCashResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PoWHashCashResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoResponseUnion {
-    // message fields
-    shannon: ::protobuf::SingularPtrField<CryptoShannonResponse>,
-    rc4_sha1_hmac: ::protobuf::SingularPtrField<CryptoRc4Sha1HmacResponse>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoResponseUnion {
-    fn default() -> &'a CryptoResponseUnion {
-        <CryptoResponseUnion as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoResponseUnion {
-    pub fn new() -> CryptoResponseUnion {
-        ::std::default::Default::default()
-    }
-
-    // optional .CryptoShannonResponse shannon = 10;
-
-    pub fn get_shannon(&self) -> &CryptoShannonResponse {
-        self.shannon
-            .as_ref()
-            .unwrap_or_else(|| CryptoShannonResponse::default_instance())
-    }
-    pub fn clear_shannon(&mut self) {
-        self.shannon.clear();
-    }
-
-    pub fn has_shannon(&self) -> bool {
-        self.shannon.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_shannon(&mut self, v: CryptoShannonResponse) {
-        self.shannon = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_shannon(&mut self) -> &mut CryptoShannonResponse {
-        if self.shannon.is_none() {
-            self.shannon.set_default();
-        }
-        self.shannon.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_shannon(&mut self) -> CryptoShannonResponse {
-        self.shannon
-            .take()
-            .unwrap_or_else(|| CryptoShannonResponse::new())
-    }
-
-    // optional .CryptoRc4Sha1HmacResponse rc4_sha1_hmac = 20;
-
-    pub fn get_rc4_sha1_hmac(&self) -> &CryptoRc4Sha1HmacResponse {
-        self.rc4_sha1_hmac
-            .as_ref()
-            .unwrap_or_else(|| CryptoRc4Sha1HmacResponse::default_instance())
-    }
-    pub fn clear_rc4_sha1_hmac(&mut self) {
-        self.rc4_sha1_hmac.clear();
-    }
-
-    pub fn has_rc4_sha1_hmac(&self) -> bool {
-        self.rc4_sha1_hmac.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_rc4_sha1_hmac(&mut self, v: CryptoRc4Sha1HmacResponse) {
-        self.rc4_sha1_hmac = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_rc4_sha1_hmac(&mut self) -> &mut CryptoRc4Sha1HmacResponse {
-        if self.rc4_sha1_hmac.is_none() {
-            self.rc4_sha1_hmac.set_default();
-        }
-        self.rc4_sha1_hmac.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_rc4_sha1_hmac(&mut self) -> CryptoRc4Sha1HmacResponse {
-        self.rc4_sha1_hmac
-            .take()
-            .unwrap_or_else(|| CryptoRc4Sha1HmacResponse::new())
-    }
-}
-
-impl ::protobuf::Message for CryptoResponseUnion {
-    fn is_initialized(&self) -> bool {
-        for v in &self.shannon {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.rc4_sha1_hmac {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                10 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.shannon)?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.rc4_sha1_hmac,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.shannon.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.rc4_sha1_hmac.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.shannon.as_ref() {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.rc4_sha1_hmac.as_ref() {
-            os.write_tag(20, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoResponseUnion {
-        CryptoResponseUnion::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoShannonResponse>,
-                    >(
-                        "shannon",
-                        |m: &CryptoResponseUnion| &m.shannon,
-                        |m: &mut CryptoResponseUnion| &mut m.shannon,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<CryptoRc4Sha1HmacResponse>,
-                    >(
-                        "rc4_sha1_hmac",
-                        |m: &CryptoResponseUnion| &m.rc4_sha1_hmac,
-                        |m: &mut CryptoResponseUnion| &mut m.rc4_sha1_hmac,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoResponseUnion>(
-                    "CryptoResponseUnion",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoResponseUnion {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoResponseUnion> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoResponseUnion::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoResponseUnion {
-    fn clear(&mut self) {
-        self.shannon.clear();
-        self.rc4_sha1_hmac.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoResponseUnion {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoResponseUnion {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoShannonResponse {
-    // message fields
-    dummy: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoShannonResponse {
-    fn default() -> &'a CryptoShannonResponse {
-        <CryptoShannonResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoShannonResponse {
-    pub fn new() -> CryptoShannonResponse {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 dummy = 1;
-
-    pub fn get_dummy(&self) -> i32 {
-        self.dummy.unwrap_or(0)
-    }
-    pub fn clear_dummy(&mut self) {
-        self.dummy = ::std::option::Option::None;
-    }
-
-    pub fn has_dummy(&self) -> bool {
-        self.dummy.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_dummy(&mut self, v: i32) {
-        self.dummy = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for CryptoShannonResponse {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.dummy = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.dummy {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.dummy {
-            os.write_int32(1, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoShannonResponse {
-        CryptoShannonResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "dummy",
-                    |m: &CryptoShannonResponse| &m.dummy,
-                    |m: &mut CryptoShannonResponse| &mut m.dummy,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoShannonResponse>(
-                    "CryptoShannonResponse",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoShannonResponse {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoShannonResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoShannonResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoShannonResponse {
-    fn clear(&mut self) {
-        self.dummy = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoShannonResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoShannonResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct CryptoRc4Sha1HmacResponse {
-    // message fields
-    dummy: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a CryptoRc4Sha1HmacResponse {
-    fn default() -> &'a CryptoRc4Sha1HmacResponse {
-        <CryptoRc4Sha1HmacResponse as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl CryptoRc4Sha1HmacResponse {
-    pub fn new() -> CryptoRc4Sha1HmacResponse {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 dummy = 1;
-
-    pub fn get_dummy(&self) -> i32 {
-        self.dummy.unwrap_or(0)
-    }
-    pub fn clear_dummy(&mut self) {
-        self.dummy = ::std::option::Option::None;
-    }
-
-    pub fn has_dummy(&self) -> bool {
-        self.dummy.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_dummy(&mut self, v: i32) {
-        self.dummy = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for CryptoRc4Sha1HmacResponse {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.dummy = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.dummy {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.dummy {
-            os.write_int32(1, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> CryptoRc4Sha1HmacResponse {
-        CryptoRc4Sha1HmacResponse::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "dummy",
-                    |m: &CryptoRc4Sha1HmacResponse| &m.dummy,
-                    |m: &mut CryptoRc4Sha1HmacResponse| &mut m.dummy,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<CryptoRc4Sha1HmacResponse>(
-                    "CryptoRc4Sha1HmacResponse",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static CryptoRc4Sha1HmacResponse {
-        static mut instance: ::protobuf::lazy::Lazy<CryptoRc4Sha1HmacResponse> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(CryptoRc4Sha1HmacResponse::new) }
-    }
-}
-
-impl ::protobuf::Clear for CryptoRc4Sha1HmacResponse {
-    fn clear(&mut self) {
-        self.dummy = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for CryptoRc4Sha1HmacResponse {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CryptoRc4Sha1HmacResponse {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Product {
-    PRODUCT_CLIENT = 0,
-    PRODUCT_LIBSPOTIFY = 1,
-    PRODUCT_MOBILE = 2,
-    PRODUCT_PARTNER = 3,
-    PRODUCT_LIBSPOTIFY_EMBEDDED = 5,
-}
-
-impl ::protobuf::ProtobufEnum for Product {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Product> {
-        match value {
-            0 => ::std::option::Option::Some(Product::PRODUCT_CLIENT),
-            1 => ::std::option::Option::Some(Product::PRODUCT_LIBSPOTIFY),
-            2 => ::std::option::Option::Some(Product::PRODUCT_MOBILE),
-            3 => ::std::option::Option::Some(Product::PRODUCT_PARTNER),
-            5 => ::std::option::Option::Some(Product::PRODUCT_LIBSPOTIFY_EMBEDDED),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Product] = &[
-            Product::PRODUCT_CLIENT,
-            Product::PRODUCT_LIBSPOTIFY,
-            Product::PRODUCT_MOBILE,
-            Product::PRODUCT_PARTNER,
-            Product::PRODUCT_LIBSPOTIFY_EMBEDDED,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Product>(
-                    "Product",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Product {}
-
-impl ::std::default::Default for Product {
-    fn default() -> Self {
-        Product::PRODUCT_CLIENT
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Product {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ProductFlags {
-    PRODUCT_FLAG_NONE = 0,
-    PRODUCT_FLAG_DEV_BUILD = 1,
-}
-
-impl ::protobuf::ProtobufEnum for ProductFlags {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ProductFlags> {
-        match value {
-            0 => ::std::option::Option::Some(ProductFlags::PRODUCT_FLAG_NONE),
-            1 => ::std::option::Option::Some(ProductFlags::PRODUCT_FLAG_DEV_BUILD),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ProductFlags] = &[
-            ProductFlags::PRODUCT_FLAG_NONE,
-            ProductFlags::PRODUCT_FLAG_DEV_BUILD,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ProductFlags>(
-                    "ProductFlags",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ProductFlags {}
-
-impl ::std::default::Default for ProductFlags {
-    fn default() -> Self {
-        ProductFlags::PRODUCT_FLAG_NONE
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ProductFlags {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Platform {
-    PLATFORM_WIN32_X86 = 0,
-    PLATFORM_OSX_X86 = 1,
-    PLATFORM_LINUX_X86 = 2,
-    PLATFORM_IPHONE_ARM = 3,
-    PLATFORM_S60_ARM = 4,
-    PLATFORM_OSX_PPC = 5,
-    PLATFORM_ANDROID_ARM = 6,
-    PLATFORM_WINDOWS_CE_ARM = 7,
-    PLATFORM_LINUX_X86_64 = 8,
-    PLATFORM_OSX_X86_64 = 9,
-    PLATFORM_PALM_ARM = 10,
-    PLATFORM_LINUX_SH = 11,
-    PLATFORM_FREEBSD_X86 = 12,
-    PLATFORM_FREEBSD_X86_64 = 13,
-    PLATFORM_BLACKBERRY_ARM = 14,
-    PLATFORM_SONOS = 15,
-    PLATFORM_LINUX_MIPS = 16,
-    PLATFORM_LINUX_ARM = 17,
-    PLATFORM_LOGITECH_ARM = 18,
-    PLATFORM_LINUX_BLACKFIN = 19,
-    PLATFORM_WP7_ARM = 20,
-    PLATFORM_ONKYO_ARM = 21,
-    PLATFORM_QNXNTO_ARM = 22,
-    PLATFORM_BCO_ARM = 23,
-}
-
-impl ::protobuf::ProtobufEnum for Platform {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Platform> {
-        match value {
-            0 => ::std::option::Option::Some(Platform::PLATFORM_WIN32_X86),
-            1 => ::std::option::Option::Some(Platform::PLATFORM_OSX_X86),
-            2 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_X86),
-            3 => ::std::option::Option::Some(Platform::PLATFORM_IPHONE_ARM),
-            4 => ::std::option::Option::Some(Platform::PLATFORM_S60_ARM),
-            5 => ::std::option::Option::Some(Platform::PLATFORM_OSX_PPC),
-            6 => ::std::option::Option::Some(Platform::PLATFORM_ANDROID_ARM),
-            7 => ::std::option::Option::Some(Platform::PLATFORM_WINDOWS_CE_ARM),
-            8 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_X86_64),
-            9 => ::std::option::Option::Some(Platform::PLATFORM_OSX_X86_64),
-            10 => ::std::option::Option::Some(Platform::PLATFORM_PALM_ARM),
-            11 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_SH),
-            12 => ::std::option::Option::Some(Platform::PLATFORM_FREEBSD_X86),
-            13 => ::std::option::Option::Some(Platform::PLATFORM_FREEBSD_X86_64),
-            14 => ::std::option::Option::Some(Platform::PLATFORM_BLACKBERRY_ARM),
-            15 => ::std::option::Option::Some(Platform::PLATFORM_SONOS),
-            16 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_MIPS),
-            17 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_ARM),
-            18 => ::std::option::Option::Some(Platform::PLATFORM_LOGITECH_ARM),
-            19 => ::std::option::Option::Some(Platform::PLATFORM_LINUX_BLACKFIN),
-            20 => ::std::option::Option::Some(Platform::PLATFORM_WP7_ARM),
-            21 => ::std::option::Option::Some(Platform::PLATFORM_ONKYO_ARM),
-            22 => ::std::option::Option::Some(Platform::PLATFORM_QNXNTO_ARM),
-            23 => ::std::option::Option::Some(Platform::PLATFORM_BCO_ARM),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Platform] = &[
-            Platform::PLATFORM_WIN32_X86,
-            Platform::PLATFORM_OSX_X86,
-            Platform::PLATFORM_LINUX_X86,
-            Platform::PLATFORM_IPHONE_ARM,
-            Platform::PLATFORM_S60_ARM,
-            Platform::PLATFORM_OSX_PPC,
-            Platform::PLATFORM_ANDROID_ARM,
-            Platform::PLATFORM_WINDOWS_CE_ARM,
-            Platform::PLATFORM_LINUX_X86_64,
-            Platform::PLATFORM_OSX_X86_64,
-            Platform::PLATFORM_PALM_ARM,
-            Platform::PLATFORM_LINUX_SH,
-            Platform::PLATFORM_FREEBSD_X86,
-            Platform::PLATFORM_FREEBSD_X86_64,
-            Platform::PLATFORM_BLACKBERRY_ARM,
-            Platform::PLATFORM_SONOS,
-            Platform::PLATFORM_LINUX_MIPS,
-            Platform::PLATFORM_LINUX_ARM,
-            Platform::PLATFORM_LOGITECH_ARM,
-            Platform::PLATFORM_LINUX_BLACKFIN,
-            Platform::PLATFORM_WP7_ARM,
-            Platform::PLATFORM_ONKYO_ARM,
-            Platform::PLATFORM_QNXNTO_ARM,
-            Platform::PLATFORM_BCO_ARM,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Platform>(
-                    "Platform",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Platform {}
-
-impl ::std::default::Default for Platform {
-    fn default() -> Self {
-        Platform::PLATFORM_WIN32_X86
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Platform {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Fingerprint {
-    FINGERPRINT_GRAIN = 0,
-    FINGERPRINT_HMAC_RIPEMD = 1,
-}
-
-impl ::protobuf::ProtobufEnum for Fingerprint {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Fingerprint> {
-        match value {
-            0 => ::std::option::Option::Some(Fingerprint::FINGERPRINT_GRAIN),
-            1 => ::std::option::Option::Some(Fingerprint::FINGERPRINT_HMAC_RIPEMD),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Fingerprint] = &[
-            Fingerprint::FINGERPRINT_GRAIN,
-            Fingerprint::FINGERPRINT_HMAC_RIPEMD,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Fingerprint>(
-                    "Fingerprint",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Fingerprint {}
-
-impl ::std::default::Default for Fingerprint {
-    fn default() -> Self {
-        Fingerprint::FINGERPRINT_GRAIN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Fingerprint {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Cryptosuite {
-    CRYPTO_SUITE_SHANNON = 0,
-    CRYPTO_SUITE_RC4_SHA1_HMAC = 1,
-}
-
-impl ::protobuf::ProtobufEnum for Cryptosuite {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Cryptosuite> {
-        match value {
-            0 => ::std::option::Option::Some(Cryptosuite::CRYPTO_SUITE_SHANNON),
-            1 => ::std::option::Option::Some(Cryptosuite::CRYPTO_SUITE_RC4_SHA1_HMAC),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Cryptosuite] = &[
-            Cryptosuite::CRYPTO_SUITE_SHANNON,
-            Cryptosuite::CRYPTO_SUITE_RC4_SHA1_HMAC,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Cryptosuite>(
-                    "Cryptosuite",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Cryptosuite {}
-
-impl ::std::default::Default for Cryptosuite {
-    fn default() -> Self {
-        Cryptosuite::CRYPTO_SUITE_SHANNON
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Cryptosuite {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Powscheme {
-    POW_HASH_CASH = 0,
-}
-
-impl ::protobuf::ProtobufEnum for Powscheme {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Powscheme> {
-        match value {
-            0 => ::std::option::Option::Some(Powscheme::POW_HASH_CASH),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Powscheme] = &[Powscheme::POW_HASH_CASH];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Powscheme>(
-                    "Powscheme",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Powscheme {}
-
-impl ::std::default::Default for Powscheme {
-    fn default() -> Self {
-        Powscheme::POW_HASH_CASH
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Powscheme {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ErrorCode {
-    ProtocolError = 0,
-    TryAnotherAP = 2,
-    BadConnectionId = 5,
-    TravelRestriction = 9,
-    PremiumAccountRequired = 11,
-    BadCredentials = 12,
-    CouldNotValidateCredentials = 13,
-    AccountExists = 14,
-    ExtraVerificationRequired = 15,
-    InvalidAppKey = 16,
-    ApplicationBanned = 17,
-}
-
-impl ::protobuf::ProtobufEnum for ErrorCode {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ErrorCode> {
-        match value {
-            0 => ::std::option::Option::Some(ErrorCode::ProtocolError),
-            2 => ::std::option::Option::Some(ErrorCode::TryAnotherAP),
-            5 => ::std::option::Option::Some(ErrorCode::BadConnectionId),
-            9 => ::std::option::Option::Some(ErrorCode::TravelRestriction),
-            11 => ::std::option::Option::Some(ErrorCode::PremiumAccountRequired),
-            12 => ::std::option::Option::Some(ErrorCode::BadCredentials),
-            13 => ::std::option::Option::Some(ErrorCode::CouldNotValidateCredentials),
-            14 => ::std::option::Option::Some(ErrorCode::AccountExists),
-            15 => ::std::option::Option::Some(ErrorCode::ExtraVerificationRequired),
-            16 => ::std::option::Option::Some(ErrorCode::InvalidAppKey),
-            17 => ::std::option::Option::Some(ErrorCode::ApplicationBanned),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ErrorCode] = &[
-            ErrorCode::ProtocolError,
-            ErrorCode::TryAnotherAP,
-            ErrorCode::BadConnectionId,
-            ErrorCode::TravelRestriction,
-            ErrorCode::PremiumAccountRequired,
-            ErrorCode::BadCredentials,
-            ErrorCode::CouldNotValidateCredentials,
-            ErrorCode::AccountExists,
-            ErrorCode::ExtraVerificationRequired,
-            ErrorCode::InvalidAppKey,
-            ErrorCode::ApplicationBanned,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ErrorCode>(
-                    "ErrorCode",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ErrorCode {}
-
-impl ::std::default::Default for ErrorCode {
-    fn default() -> Self {
-        ErrorCode::ProtocolError
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ErrorCode {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x11keyexchange.proto\x12\0\"\xc2\x02\n\x0bClientHello\x12\x20\n\nbuil\
-    d_info\x18\n\x20\x02(\x0b2\n.BuildInfoB\0\x12.\n\x16fingerprints_support\
-    ed\x18\x14\x20\x03(\x0e2\x0c.FingerprintB\0\x12.\n\x16cryptosuites_suppo\
-    rted\x18\x1e\x20\x03(\x0e2\x0c.CryptosuiteB\0\x12*\n\x14powschemes_suppo\
-    rted\x18(\x20\x03(\x0e2\n.PowschemeB\0\x124\n\x12login_crypto_hello\x182\
-    \x20\x02(\x0b2\x16.LoginCryptoHelloUnionB\0\x12\x16\n\x0cclient_nonce\
-    \x18<\x20\x02(\x0cB\0\x12\x11\n\x07padding\x18F\x20\x01(\x0cB\0\x12\"\n\
-    \x0bfeature_set\x18P\x20\x01(\x0b2\x0b.FeatureSetB\0:\0\"\x84\x01\n\tBui\
-    ldInfo\x12\x1b\n\x07product\x18\n\x20\x02(\x0e2\x08.ProductB\0\x12&\n\rp\
-    roduct_flags\x18\x14\x20\x03(\x0e2\r.ProductFlagsB\0\x12\x1d\n\x08platfo\
-    rm\x18\x1e\x20\x02(\x0e2\t.PlatformB\0\x12\x11\n\x07version\x18(\x20\x02\
-    (\x04B\0:\0\"S\n\x15LoginCryptoHelloUnion\x128\n\x0ediffie_hellman\x18\n\
-    \x20\x01(\x0b2\x1e.LoginCryptoDiffieHellmanHelloB\0:\0\"L\n\x1dLoginCryp\
-    toDiffieHellmanHello\x12\x0c\n\x02gc\x18\n\x20\x02(\x0cB\0\x12\x1b\n\x11\
-    server_keys_known\x18\x14\x20\x02(\rB\0:\0\"A\n\nFeatureSet\x12\x15\n\
-    \x0bautoupdate2\x18\x01\x20\x01(\x08B\0\x12\x1a\n\x10current_location\
-    \x18\x02\x20\x01(\x08B\0:\0\"\x8c\x01\n\x11APResponseMessage\x12!\n\tcha\
-    llenge\x18\n\x20\x01(\x0b2\x0c.APChallengeB\0\x12*\n\x07upgrade\x18\x14\
-    \x20\x01(\x0b2\x17.UpgradeRequiredMessageB\0\x12&\n\x0clogin_failed\x18\
-    \x1e\x20\x01(\x0b2\x0e.APLoginFailedB\0:\0\"\x95\x02\n\x0bAPChallenge\
-    \x12<\n\x16login_crypto_challenge\x18\n\x20\x02(\x0b2\x1a.LoginCryptoCha\
-    llengeUnionB\0\x12;\n\x15fingerprint_challenge\x18\x14\x20\x02(\x0b2\x1a\
-    .FingerprintChallengeUnionB\0\x12+\n\rpow_challenge\x18\x1e\x20\x02(\x0b\
-    2\x12.PoWChallengeUnionB\0\x121\n\x10crypto_challenge\x18(\x20\x02(\x0b2\
-    \x15.CryptoChallengeUnionB\0\x12\x16\n\x0cserver_nonce\x182\x20\x02(\x0c\
-    B\0\x12\x11\n\x07padding\x18<\x20\x01(\x0cB\0:\0\"[\n\x19LoginCryptoChal\
-    lengeUnion\x12<\n\x0ediffie_hellman\x18\n\x20\x01(\x0b2\".LoginCryptoDif\
-    fieHellmanChallengeB\0:\0\"k\n!LoginCryptoDiffieHellmanChallenge\x12\x0c\
-    \n\x02gs\x18\n\x20\x02(\x0cB\0\x12\x1e\n\x14server_signature_key\x18\x14\
-    \x20\x02(\x05B\0\x12\x16\n\x0cgs_signature\x18\x1e\x20\x02(\x0cB\0:\0\"\
-    \x82\x01\n\x19FingerprintChallengeUnion\x12+\n\x05grain\x18\n\x20\x01(\
-    \x0b2\x1a.FingerprintGrainChallengeB\0\x126\n\x0bhmac_ripemd\x18\x14\x20\
-    \x01(\x0b2\x1f.FingerprintHmacRipemdChallengeB\0:\0\",\n\x19FingerprintG\
-    rainChallenge\x12\r\n\x03kek\x18\n\x20\x02(\x0cB\0:\0\"7\n\x1eFingerprin\
-    tHmacRipemdChallenge\x12\x13\n\tchallenge\x18\n\x20\x02(\x0cB\0:\0\"A\n\
-    \x11PoWChallengeUnion\x12*\n\thash_cash\x18\n\x20\x01(\x0b2\x15.PoWHashC\
-    ashChallengeB\0:\0\"N\n\x14PoWHashCashChallenge\x12\x10\n\x06prefix\x18\
-    \n\x20\x01(\x0cB\0\x12\x10\n\x06length\x18\x14\x20\x01(\x05B\0\x12\x10\n\
-    \x06target\x18\x1e\x20\x01(\x05B\0:\0\"z\n\x14CryptoChallengeUnion\x12*\
-    \n\x07shannon\x18\n\x20\x01(\x0b2\x17.CryptoShannonChallengeB\0\x124\n\r\
-    rc4_sha1_hmac\x18\x14\x20\x01(\x0b2\x1b.CryptoRc4Sha1HmacChallengeB\0:\0\
-    \"\x1a\n\x16CryptoShannonChallenge:\0\"\x1e\n\x1aCryptoRc4Sha1HmacChalle\
-    nge:\0\"e\n\x16UpgradeRequiredMessage\x12\x1d\n\x13upgrade_signed_part\
-    \x18\n\x20\x02(\x0cB\0\x12\x13\n\tsignature\x18\x14\x20\x02(\x0cB\0\x12\
-    \x15\n\x0bhttp_suffix\x18\x1e\x20\x01(\tB\0:\0\"y\n\rAPLoginFailed\x12\
-    \x20\n\nerror_code\x18\n\x20\x02(\x0e2\n.ErrorCodeB\0\x12\x15\n\x0bretry\
-    _delay\x18\x14\x20\x01(\x05B\0\x12\x10\n\x06expiry\x18\x1e\x20\x01(\x05B\
-    \0\x12\x1b\n\x11error_description\x18(\x20\x01(\tB\0:\0\"\xb3\x01\n\x17C\
-    lientResponsePlaintext\x12:\n\x15login_crypto_response\x18\n\x20\x02(\
-    \x0b2\x19.LoginCryptoResponseUnionB\0\x12)\n\x0cpow_response\x18\x14\x20\
-    \x02(\x0b2\x11.PoWResponseUnionB\0\x12/\n\x0fcrypto_response\x18\x1e\x20\
-    \x02(\x0b2\x14.CryptoResponseUnionB\0:\0\"Y\n\x18LoginCryptoResponseUnio\
-    n\x12;\n\x0ediffie_hellman\x18\n\x20\x01(\x0b2!.LoginCryptoDiffieHellman\
-    ResponseB\0:\0\"4\n\x20LoginCryptoDiffieHellmanResponse\x12\x0e\n\x04hma\
-    c\x18\n\x20\x02(\x0cB\0:\0\"?\n\x10PoWResponseUnion\x12)\n\thash_cash\
-    \x18\n\x20\x01(\x0b2\x14.PoWHashCashResponseB\0:\0\".\n\x13PoWHashCashRe\
-    sponse\x12\x15\n\x0bhash_suffix\x18\n\x20\x02(\x0cB\0:\0\"w\n\x13CryptoR\
-    esponseUnion\x12)\n\x07shannon\x18\n\x20\x01(\x0b2\x16.CryptoShannonResp\
-    onseB\0\x123\n\rrc4_sha1_hmac\x18\x14\x20\x01(\x0b2\x1a.CryptoRc4Sha1Hma\
-    cResponseB\0:\0\"*\n\x15CryptoShannonResponse\x12\x0f\n\x05dummy\x18\x01\
-    \x20\x01(\x05B\0:\0\".\n\x19CryptoRc4Sha1HmacResponse\x12\x0f\n\x05dummy\
-    \x18\x01\x20\x01(\x05B\0:\0*\x81\x01\n\x07Product\x12\x12\n\x0ePRODUCT_C\
-    LIENT\x10\0\x12\x16\n\x12PRODUCT_LIBSPOTIFY\x10\x01\x12\x12\n\x0ePRODUCT\
-    _MOBILE\x10\x02\x12\x13\n\x0fPRODUCT_PARTNER\x10\x03\x12\x1f\n\x1bPRODUC\
-    T_LIBSPOTIFY_EMBEDDED\x10\x05\x1a\0*C\n\x0cProductFlags\x12\x15\n\x11PRO\
-    DUCT_FLAG_NONE\x10\0\x12\x1a\n\x16PRODUCT_FLAG_DEV_BUILD\x10\x01\x1a\0*\
-    \xde\x04\n\x08Platform\x12\x16\n\x12PLATFORM_WIN32_X86\x10\0\x12\x14\n\
-    \x10PLATFORM_OSX_X86\x10\x01\x12\x16\n\x12PLATFORM_LINUX_X86\x10\x02\x12\
-    \x17\n\x13PLATFORM_IPHONE_ARM\x10\x03\x12\x14\n\x10PLATFORM_S60_ARM\x10\
-    \x04\x12\x14\n\x10PLATFORM_OSX_PPC\x10\x05\x12\x18\n\x14PLATFORM_ANDROID\
-    _ARM\x10\x06\x12\x1b\n\x17PLATFORM_WINDOWS_CE_ARM\x10\x07\x12\x19\n\x15P\
-    LATFORM_LINUX_X86_64\x10\x08\x12\x17\n\x13PLATFORM_OSX_X86_64\x10\t\x12\
-    \x15\n\x11PLATFORM_PALM_ARM\x10\n\x12\x15\n\x11PLATFORM_LINUX_SH\x10\x0b\
-    \x12\x18\n\x14PLATFORM_FREEBSD_X86\x10\x0c\x12\x1b\n\x17PLATFORM_FREEBSD\
-    _X86_64\x10\r\x12\x1b\n\x17PLATFORM_BLACKBERRY_ARM\x10\x0e\x12\x12\n\x0e\
-    PLATFORM_SONOS\x10\x0f\x12\x17\n\x13PLATFORM_LINUX_MIPS\x10\x10\x12\x16\
-    \n\x12PLATFORM_LINUX_ARM\x10\x11\x12\x19\n\x15PLATFORM_LOGITECH_ARM\x10\
-    \x12\x12\x1b\n\x17PLATFORM_LINUX_BLACKFIN\x10\x13\x12\x14\n\x10PLATFORM_\
-    WP7_ARM\x10\x14\x12\x16\n\x12PLATFORM_ONKYO_ARM\x10\x15\x12\x17\n\x13PLA\
-    TFORM_QNXNTO_ARM\x10\x16\x12\x14\n\x10PLATFORM_BCO_ARM\x10\x17\x1a\0*C\n\
-    \x0bFingerprint\x12\x15\n\x11FINGERPRINT_GRAIN\x10\0\x12\x1b\n\x17FINGER\
-    PRINT_HMAC_RIPEMD\x10\x01\x1a\0*I\n\x0bCryptosuite\x12\x18\n\x14CRYPTO_S\
-    UITE_SHANNON\x10\0\x12\x1e\n\x1aCRYPTO_SUITE_RC4_SHA1_HMAC\x10\x01\x1a\0\
-    *\x20\n\tPowscheme\x12\x11\n\rPOW_HASH_CASH\x10\0\x1a\0*\x8b\x02\n\tErro\
-    rCode\x12\x11\n\rProtocolError\x10\0\x12\x10\n\x0cTryAnotherAP\x10\x02\
-    \x12\x13\n\x0fBadConnectionId\x10\x05\x12\x15\n\x11TravelRestriction\x10\
-    \t\x12\x1a\n\x16PremiumAccountRequired\x10\x0b\x12\x12\n\x0eBadCredentia\
-    ls\x10\x0c\x12\x1f\n\x1bCouldNotValidateCredentials\x10\r\x12\x11\n\rAcc\
-    ountExists\x10\x0e\x12\x1d\n\x19ExtraVerificationRequired\x10\x0f\x12\
-    \x11\n\rInvalidAppKey\x10\x10\x12\x15\n\x11ApplicationBanned\x10\x11\x1a\
-    \0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 2 - 11
protocol/src/lib.rs

@@ -1,14 +1,5 @@
 extern crate protobuf;
 // This file is parsed by build.rs
 // Each included module will be compiled from the matching .proto definition.
-pub mod authentication;
-pub mod keyexchange;
-pub mod mercury;
-pub mod metadata;
-pub mod playlist4changes;
-mod playlist4content;
-mod playlist4issues;
-mod playlist4meta;
-mod playlist4ops;
-pub mod pubsub;
-pub mod spirc;
+
+include!(concat!(env!("OUT_DIR"), "/mod.rs"));

+ 0 - 1997
protocol/src/mercury.rs

@@ -1,1997 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `mercury.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct MercuryMultiGetRequest {
-    // message fields
-    request: ::protobuf::RepeatedField<MercuryRequest>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a MercuryMultiGetRequest {
-    fn default() -> &'a MercuryMultiGetRequest {
-        <MercuryMultiGetRequest as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl MercuryMultiGetRequest {
-    pub fn new() -> MercuryMultiGetRequest {
-        ::std::default::Default::default()
-    }
-
-    // repeated .MercuryRequest request = 1;
-
-    pub fn get_request(&self) -> &[MercuryRequest] {
-        &self.request
-    }
-    pub fn clear_request(&mut self) {
-        self.request.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_request(&mut self, v: ::protobuf::RepeatedField<MercuryRequest>) {
-        self.request = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_request(&mut self) -> &mut ::protobuf::RepeatedField<MercuryRequest> {
-        &mut self.request
-    }
-
-    // Take field
-    pub fn take_request(&mut self) -> ::protobuf::RepeatedField<MercuryRequest> {
-        ::std::mem::replace(&mut self.request, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for MercuryMultiGetRequest {
-    fn is_initialized(&self) -> bool {
-        for v in &self.request {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.request)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.request {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.request {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> MercuryMultiGetRequest {
-        MercuryMultiGetRequest::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<MercuryRequest>,
-                    >(
-                        "request",
-                        |m: &MercuryMultiGetRequest| &m.request,
-                        |m: &mut MercuryMultiGetRequest| &mut m.request,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<MercuryMultiGetRequest>(
-                    "MercuryMultiGetRequest",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static MercuryMultiGetRequest {
-        static mut instance: ::protobuf::lazy::Lazy<MercuryMultiGetRequest> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(MercuryMultiGetRequest::new) }
-    }
-}
-
-impl ::protobuf::Clear for MercuryMultiGetRequest {
-    fn clear(&mut self) {
-        self.request.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for MercuryMultiGetRequest {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MercuryMultiGetRequest {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct MercuryMultiGetReply {
-    // message fields
-    reply: ::protobuf::RepeatedField<MercuryReply>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a MercuryMultiGetReply {
-    fn default() -> &'a MercuryMultiGetReply {
-        <MercuryMultiGetReply as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl MercuryMultiGetReply {
-    pub fn new() -> MercuryMultiGetReply {
-        ::std::default::Default::default()
-    }
-
-    // repeated .MercuryReply reply = 1;
-
-    pub fn get_reply(&self) -> &[MercuryReply] {
-        &self.reply
-    }
-    pub fn clear_reply(&mut self) {
-        self.reply.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_reply(&mut self, v: ::protobuf::RepeatedField<MercuryReply>) {
-        self.reply = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_reply(&mut self) -> &mut ::protobuf::RepeatedField<MercuryReply> {
-        &mut self.reply
-    }
-
-    // Take field
-    pub fn take_reply(&mut self) -> ::protobuf::RepeatedField<MercuryReply> {
-        ::std::mem::replace(&mut self.reply, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for MercuryMultiGetReply {
-    fn is_initialized(&self) -> bool {
-        for v in &self.reply {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.reply)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.reply {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.reply {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> MercuryMultiGetReply {
-        MercuryMultiGetReply::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<MercuryReply>,
-                    >(
-                        "reply",
-                        |m: &MercuryMultiGetReply| &m.reply,
-                        |m: &mut MercuryMultiGetReply| &mut m.reply,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<MercuryMultiGetReply>(
-                    "MercuryMultiGetReply",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static MercuryMultiGetReply {
-        static mut instance: ::protobuf::lazy::Lazy<MercuryMultiGetReply> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(MercuryMultiGetReply::new) }
-    }
-}
-
-impl ::protobuf::Clear for MercuryMultiGetReply {
-    fn clear(&mut self) {
-        self.reply.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for MercuryMultiGetReply {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MercuryMultiGetReply {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct MercuryRequest {
-    // message fields
-    uri: ::protobuf::SingularField<::std::string::String>,
-    content_type: ::protobuf::SingularField<::std::string::String>,
-    body: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    etag: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a MercuryRequest {
-    fn default() -> &'a MercuryRequest {
-        <MercuryRequest as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl MercuryRequest {
-    pub fn new() -> MercuryRequest {
-        ::std::default::Default::default()
-    }
-
-    // optional string uri = 1;
-
-    pub fn get_uri(&self) -> &str {
-        match self.uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_uri(&mut self) {
-        self.uri.clear();
-    }
-
-    pub fn has_uri(&self) -> bool {
-        self.uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uri(&mut self, v: ::std::string::String) {
-        self.uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
-        if self.uri.is_none() {
-            self.uri.set_default();
-        }
-        self.uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uri(&mut self) -> ::std::string::String {
-        self.uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string content_type = 2;
-
-    pub fn get_content_type(&self) -> &str {
-        match self.content_type.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_content_type(&mut self) {
-        self.content_type.clear();
-    }
-
-    pub fn has_content_type(&self) -> bool {
-        self.content_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_content_type(&mut self, v: ::std::string::String) {
-        self.content_type = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
-        if self.content_type.is_none() {
-            self.content_type.set_default();
-        }
-        self.content_type.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_content_type(&mut self) -> ::std::string::String {
-        self.content_type
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bytes body = 3;
-
-    pub fn get_body(&self) -> &[u8] {
-        match self.body.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_body(&mut self) {
-        self.body.clear();
-    }
-
-    pub fn has_body(&self) -> bool {
-        self.body.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_body(&mut self, v: ::std::vec::Vec<u8>) {
-        self.body = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_body(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.body.is_none() {
-            self.body.set_default();
-        }
-        self.body.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_body(&mut self) -> ::std::vec::Vec<u8> {
-        self.body.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes etag = 4;
-
-    pub fn get_etag(&self) -> &[u8] {
-        match self.etag.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_etag(&mut self) {
-        self.etag.clear();
-    }
-
-    pub fn has_etag(&self) -> bool {
-        self.etag.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_etag(&mut self, v: ::std::vec::Vec<u8>) {
-        self.etag = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_etag(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.etag.is_none() {
-            self.etag.set_default();
-        }
-        self.etag.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_etag(&mut self) -> ::std::vec::Vec<u8> {
-        self.etag.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for MercuryRequest {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.uri)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.content_type,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.body)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.etag)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.body.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(3, &v);
-        }
-        if let Some(ref v) = self.etag.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(4, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.uri.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.body.as_ref() {
-            os.write_bytes(3, &v)?;
-        }
-        if let Some(ref v) = self.etag.as_ref() {
-            os.write_bytes(4, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> MercuryRequest {
-        MercuryRequest::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "uri",
-                        |m: &MercuryRequest| &m.uri,
-                        |m: &mut MercuryRequest| &mut m.uri,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "content_type",
-                        |m: &MercuryRequest| &m.content_type,
-                        |m: &mut MercuryRequest| &mut m.content_type,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "body",
-                        |m: &MercuryRequest| &m.body,
-                        |m: &mut MercuryRequest| &mut m.body,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "etag",
-                        |m: &MercuryRequest| &m.etag,
-                        |m: &mut MercuryRequest| &mut m.etag,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<MercuryRequest>(
-                    "MercuryRequest",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static MercuryRequest {
-        static mut instance: ::protobuf::lazy::Lazy<MercuryRequest> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(MercuryRequest::new) }
-    }
-}
-
-impl ::protobuf::Clear for MercuryRequest {
-    fn clear(&mut self) {
-        self.uri.clear();
-        self.content_type.clear();
-        self.body.clear();
-        self.etag.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for MercuryRequest {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MercuryRequest {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct MercuryReply {
-    // message fields
-    status_code: ::std::option::Option<i32>,
-    status_message: ::protobuf::SingularField<::std::string::String>,
-    cache_policy: ::std::option::Option<MercuryReply_CachePolicy>,
-    ttl: ::std::option::Option<i32>,
-    etag: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    content_type: ::protobuf::SingularField<::std::string::String>,
-    body: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a MercuryReply {
-    fn default() -> &'a MercuryReply {
-        <MercuryReply as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl MercuryReply {
-    pub fn new() -> MercuryReply {
-        ::std::default::Default::default()
-    }
-
-    // optional sint32 status_code = 1;
-
-    pub fn get_status_code(&self) -> i32 {
-        self.status_code.unwrap_or(0)
-    }
-    pub fn clear_status_code(&mut self) {
-        self.status_code = ::std::option::Option::None;
-    }
-
-    pub fn has_status_code(&self) -> bool {
-        self.status_code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_status_code(&mut self, v: i32) {
-        self.status_code = ::std::option::Option::Some(v);
-    }
-
-    // optional string status_message = 2;
-
-    pub fn get_status_message(&self) -> &str {
-        match self.status_message.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_status_message(&mut self) {
-        self.status_message.clear();
-    }
-
-    pub fn has_status_message(&self) -> bool {
-        self.status_message.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_status_message(&mut self, v: ::std::string::String) {
-        self.status_message = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_status_message(&mut self) -> &mut ::std::string::String {
-        if self.status_message.is_none() {
-            self.status_message.set_default();
-        }
-        self.status_message.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_status_message(&mut self) -> ::std::string::String {
-        self.status_message
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .MercuryReply.CachePolicy cache_policy = 3;
-
-    pub fn get_cache_policy(&self) -> MercuryReply_CachePolicy {
-        self.cache_policy
-            .unwrap_or(MercuryReply_CachePolicy::CACHE_NO)
-    }
-    pub fn clear_cache_policy(&mut self) {
-        self.cache_policy = ::std::option::Option::None;
-    }
-
-    pub fn has_cache_policy(&self) -> bool {
-        self.cache_policy.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cache_policy(&mut self, v: MercuryReply_CachePolicy) {
-        self.cache_policy = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 ttl = 4;
-
-    pub fn get_ttl(&self) -> i32 {
-        self.ttl.unwrap_or(0)
-    }
-    pub fn clear_ttl(&mut self) {
-        self.ttl = ::std::option::Option::None;
-    }
-
-    pub fn has_ttl(&self) -> bool {
-        self.ttl.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ttl(&mut self, v: i32) {
-        self.ttl = ::std::option::Option::Some(v);
-    }
-
-    // optional bytes etag = 5;
-
-    pub fn get_etag(&self) -> &[u8] {
-        match self.etag.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_etag(&mut self) {
-        self.etag.clear();
-    }
-
-    pub fn has_etag(&self) -> bool {
-        self.etag.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_etag(&mut self, v: ::std::vec::Vec<u8>) {
-        self.etag = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_etag(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.etag.is_none() {
-            self.etag.set_default();
-        }
-        self.etag.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_etag(&mut self) -> ::std::vec::Vec<u8> {
-        self.etag.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string content_type = 6;
-
-    pub fn get_content_type(&self) -> &str {
-        match self.content_type.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_content_type(&mut self) {
-        self.content_type.clear();
-    }
-
-    pub fn has_content_type(&self) -> bool {
-        self.content_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_content_type(&mut self, v: ::std::string::String) {
-        self.content_type = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
-        if self.content_type.is_none() {
-            self.content_type.set_default();
-        }
-        self.content_type.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_content_type(&mut self) -> ::std::string::String {
-        self.content_type
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bytes body = 7;
-
-    pub fn get_body(&self) -> &[u8] {
-        match self.body.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_body(&mut self) {
-        self.body.clear();
-    }
-
-    pub fn has_body(&self) -> bool {
-        self.body.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_body(&mut self, v: ::std::vec::Vec<u8>) {
-        self.body = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_body(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.body.is_none() {
-            self.body.set_default();
-        }
-        self.body.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_body(&mut self) -> ::std::vec::Vec<u8> {
-        self.body.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for MercuryReply {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.status_code = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.status_message,
-                    )?;
-                }
-                3 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.cache_policy,
-                    3,
-                    &mut self.unknown_fields,
-                )?,
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.ttl = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.etag)?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.content_type,
-                    )?;
-                }
-                7 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.body)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.status_code {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(1, v);
-        }
-        if let Some(ref v) = self.status_message.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(v) = self.cache_policy {
-            my_size += ::protobuf::rt::enum_size(3, v);
-        }
-        if let Some(v) = self.ttl {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(4, v);
-        }
-        if let Some(ref v) = self.etag.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(5, &v);
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            my_size += ::protobuf::rt::string_size(6, &v);
-        }
-        if let Some(ref v) = self.body.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(7, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.status_code {
-            os.write_sint32(1, v)?;
-        }
-        if let Some(ref v) = self.status_message.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(v) = self.cache_policy {
-            os.write_enum(3, v.value())?;
-        }
-        if let Some(v) = self.ttl {
-            os.write_sint32(4, v)?;
-        }
-        if let Some(ref v) = self.etag.as_ref() {
-            os.write_bytes(5, &v)?;
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            os.write_string(6, &v)?;
-        }
-        if let Some(ref v) = self.body.as_ref() {
-            os.write_bytes(7, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> MercuryReply {
-        MercuryReply::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "status_code",
-                    |m: &MercuryReply| &m.status_code,
-                    |m: &mut MercuryReply| &mut m.status_code,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "status_message",
-                        |m: &MercuryReply| &m.status_message,
-                        |m: &mut MercuryReply| &mut m.status_message,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<MercuryReply_CachePolicy>,
-                >(
-                    "cache_policy",
-                    |m: &MercuryReply| &m.cache_policy,
-                    |m: &mut MercuryReply| &mut m.cache_policy,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "ttl",
-                    |m: &MercuryReply| &m.ttl,
-                    |m: &mut MercuryReply| &mut m.ttl,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "etag",
-                        |m: &MercuryReply| &m.etag,
-                        |m: &mut MercuryReply| &mut m.etag,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "content_type",
-                        |m: &MercuryReply| &m.content_type,
-                        |m: &mut MercuryReply| &mut m.content_type,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "body",
-                        |m: &MercuryReply| &m.body,
-                        |m: &mut MercuryReply| &mut m.body,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<MercuryReply>(
-                    "MercuryReply",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static MercuryReply {
-        static mut instance: ::protobuf::lazy::Lazy<MercuryReply> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(MercuryReply::new) }
-    }
-}
-
-impl ::protobuf::Clear for MercuryReply {
-    fn clear(&mut self) {
-        self.status_code = ::std::option::Option::None;
-        self.status_message.clear();
-        self.cache_policy = ::std::option::Option::None;
-        self.ttl = ::std::option::Option::None;
-        self.etag.clear();
-        self.content_type.clear();
-        self.body.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for MercuryReply {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MercuryReply {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum MercuryReply_CachePolicy {
-    CACHE_NO = 1,
-    CACHE_PRIVATE = 2,
-    CACHE_PUBLIC = 3,
-}
-
-impl ::protobuf::ProtobufEnum for MercuryReply_CachePolicy {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<MercuryReply_CachePolicy> {
-        match value {
-            1 => ::std::option::Option::Some(MercuryReply_CachePolicy::CACHE_NO),
-            2 => ::std::option::Option::Some(MercuryReply_CachePolicy::CACHE_PRIVATE),
-            3 => ::std::option::Option::Some(MercuryReply_CachePolicy::CACHE_PUBLIC),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [MercuryReply_CachePolicy] = &[
-            MercuryReply_CachePolicy::CACHE_NO,
-            MercuryReply_CachePolicy::CACHE_PRIVATE,
-            MercuryReply_CachePolicy::CACHE_PUBLIC,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<MercuryReply_CachePolicy>(
-                    "MercuryReply.CachePolicy",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for MercuryReply_CachePolicy {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for MercuryReply_CachePolicy {
-    fn default() -> Self {
-        MercuryReply_CachePolicy::CACHE_NO
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MercuryReply_CachePolicy {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Header {
-    // message fields
-    uri: ::protobuf::SingularField<::std::string::String>,
-    content_type: ::protobuf::SingularField<::std::string::String>,
-    method: ::protobuf::SingularField<::std::string::String>,
-    status_code: ::std::option::Option<i32>,
-    user_fields: ::protobuf::RepeatedField<UserField>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Header {
-    fn default() -> &'a Header {
-        <Header as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Header {
-    pub fn new() -> Header {
-        ::std::default::Default::default()
-    }
-
-    // optional string uri = 1;
-
-    pub fn get_uri(&self) -> &str {
-        match self.uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_uri(&mut self) {
-        self.uri.clear();
-    }
-
-    pub fn has_uri(&self) -> bool {
-        self.uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uri(&mut self, v: ::std::string::String) {
-        self.uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
-        if self.uri.is_none() {
-            self.uri.set_default();
-        }
-        self.uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uri(&mut self) -> ::std::string::String {
-        self.uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string content_type = 2;
-
-    pub fn get_content_type(&self) -> &str {
-        match self.content_type.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_content_type(&mut self) {
-        self.content_type.clear();
-    }
-
-    pub fn has_content_type(&self) -> bool {
-        self.content_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_content_type(&mut self, v: ::std::string::String) {
-        self.content_type = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
-        if self.content_type.is_none() {
-            self.content_type.set_default();
-        }
-        self.content_type.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_content_type(&mut self) -> ::std::string::String {
-        self.content_type
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string method = 3;
-
-    pub fn get_method(&self) -> &str {
-        match self.method.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_method(&mut self) {
-        self.method.clear();
-    }
-
-    pub fn has_method(&self) -> bool {
-        self.method.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_method(&mut self, v: ::std::string::String) {
-        self.method = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_method(&mut self) -> &mut ::std::string::String {
-        if self.method.is_none() {
-            self.method.set_default();
-        }
-        self.method.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_method(&mut self) -> ::std::string::String {
-        self.method
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional sint32 status_code = 4;
-
-    pub fn get_status_code(&self) -> i32 {
-        self.status_code.unwrap_or(0)
-    }
-    pub fn clear_status_code(&mut self) {
-        self.status_code = ::std::option::Option::None;
-    }
-
-    pub fn has_status_code(&self) -> bool {
-        self.status_code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_status_code(&mut self, v: i32) {
-        self.status_code = ::std::option::Option::Some(v);
-    }
-
-    // repeated .UserField user_fields = 6;
-
-    pub fn get_user_fields(&self) -> &[UserField] {
-        &self.user_fields
-    }
-    pub fn clear_user_fields(&mut self) {
-        self.user_fields.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_user_fields(&mut self, v: ::protobuf::RepeatedField<UserField>) {
-        self.user_fields = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_user_fields(&mut self) -> &mut ::protobuf::RepeatedField<UserField> {
-        &mut self.user_fields
-    }
-
-    // Take field
-    pub fn take_user_fields(&mut self) -> ::protobuf::RepeatedField<UserField> {
-        ::std::mem::replace(&mut self.user_fields, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Header {
-    fn is_initialized(&self) -> bool {
-        for v in &self.user_fields {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.uri)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.content_type,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.method)?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.status_code = ::std::option::Option::Some(tmp);
-                }
-                6 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.user_fields,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.method.as_ref() {
-            my_size += ::protobuf::rt::string_size(3, &v);
-        }
-        if let Some(v) = self.status_code {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(4, v);
-        }
-        for value in &self.user_fields {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.uri.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.content_type.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.method.as_ref() {
-            os.write_string(3, &v)?;
-        }
-        if let Some(v) = self.status_code {
-            os.write_sint32(4, v)?;
-        }
-        for v in &self.user_fields {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Header {
-        Header::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("uri", |m: &Header| &m.uri, |m: &mut Header| &mut m.uri),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "content_type",
-                        |m: &Header| &m.content_type,
-                        |m: &mut Header| &mut m.content_type,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "method",
-                        |m: &Header| &m.method,
-                        |m: &mut Header| &mut m.method,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "status_code",
-                    |m: &Header| &m.status_code,
-                    |m: &mut Header| &mut m.status_code,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<UserField>,
-                    >(
-                        "user_fields",
-                        |m: &Header| &m.user_fields,
-                        |m: &mut Header| &mut m.user_fields,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Header>(
-                    "Header",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Header {
-        static mut instance: ::protobuf::lazy::Lazy<Header> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Header::new) }
-    }
-}
-
-impl ::protobuf::Clear for Header {
-    fn clear(&mut self) {
-        self.uri.clear();
-        self.content_type.clear();
-        self.method.clear();
-        self.status_code = ::std::option::Option::None;
-        self.user_fields.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Header {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Header {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct UserField {
-    // message fields
-    key: ::protobuf::SingularField<::std::string::String>,
-    value: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a UserField {
-    fn default() -> &'a UserField {
-        <UserField as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl UserField {
-    pub fn new() -> UserField {
-        ::std::default::Default::default()
-    }
-
-    // optional string key = 1;
-
-    pub fn get_key(&self) -> &str {
-        match self.key.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_key(&mut self) {
-        self.key.clear();
-    }
-
-    pub fn has_key(&self) -> bool {
-        self.key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_key(&mut self, v: ::std::string::String) {
-        self.key = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_key(&mut self) -> &mut ::std::string::String {
-        if self.key.is_none() {
-            self.key.set_default();
-        }
-        self.key.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_key(&mut self) -> ::std::string::String {
-        self.key
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bytes value = 2;
-
-    pub fn get_value(&self) -> &[u8] {
-        match self.value.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_value(&mut self) {
-        self.value.clear();
-    }
-
-    pub fn has_value(&self) -> bool {
-        self.value.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_value(&mut self, v: ::std::vec::Vec<u8>) {
-        self.value = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_value(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.value.is_none() {
-            self.value.set_default();
-        }
-        self.value.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_value(&mut self) -> ::std::vec::Vec<u8> {
-        self.value.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for UserField {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.key)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.value)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.key.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.value.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.key.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.value.as_ref() {
-            os.write_bytes(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> UserField {
-        UserField::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "key",
-                        |m: &UserField| &m.key,
-                        |m: &mut UserField| &mut m.key,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "value",
-                        |m: &UserField| &m.value,
-                        |m: &mut UserField| &mut m.value,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<UserField>(
-                    "UserField",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static UserField {
-        static mut instance: ::protobuf::lazy::Lazy<UserField> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(UserField::new) }
-    }
-}
-
-impl ::protobuf::Clear for UserField {
-    fn clear(&mut self) {
-        self.key.clear();
-        self.value.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for UserField {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for UserField {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\rmercury.proto\x12\0\">\n\x16MercuryMultiGetRequest\x12\"\n\x07reques\
-    t\x18\x01\x20\x03(\x0b2\x0f.MercuryRequestB\0:\0\"8\n\x14MercuryMultiGet\
-    Reply\x12\x1e\n\x05reply\x18\x01\x20\x03(\x0b2\r.MercuryReplyB\0:\0\"Y\n\
-    \x0eMercuryRequest\x12\r\n\x03uri\x18\x01\x20\x01(\tB\0\x12\x16\n\x0ccon\
-    tent_type\x18\x02\x20\x01(\tB\0\x12\x0e\n\x04body\x18\x03\x20\x01(\x0cB\
-    \0\x12\x0e\n\x04etag\x18\x04\x20\x01(\x0cB\0:\0\"\xff\x01\n\x0cMercuryRe\
-    ply\x12\x15\n\x0bstatus_code\x18\x01\x20\x01(\x11B\0\x12\x18\n\x0estatus\
-    _message\x18\x02\x20\x01(\tB\0\x121\n\x0ccache_policy\x18\x03\x20\x01(\
-    \x0e2\x19.MercuryReply.CachePolicyB\0\x12\r\n\x03ttl\x18\x04\x20\x01(\
-    \x11B\0\x12\x0e\n\x04etag\x18\x05\x20\x01(\x0cB\0\x12\x16\n\x0ccontent_t\
-    ype\x18\x06\x20\x01(\tB\0\x12\x0e\n\x04body\x18\x07\x20\x01(\x0cB\0\"B\n\
-    \x0bCachePolicy\x12\x0c\n\x08CACHE_NO\x10\x01\x12\x11\n\rCACHE_PRIVATE\
-    \x10\x02\x12\x10\n\x0cCACHE_PUBLIC\x10\x03\x1a\0:\0\"}\n\x06Header\x12\r\
-    \n\x03uri\x18\x01\x20\x01(\tB\0\x12\x16\n\x0ccontent_type\x18\x02\x20\
-    \x01(\tB\0\x12\x10\n\x06method\x18\x03\x20\x01(\tB\0\x12\x15\n\x0bstatus\
-    _code\x18\x04\x20\x01(\x11B\0\x12!\n\x0buser_fields\x18\x06\x20\x03(\x0b\
-    2\n.UserFieldB\0:\0\"-\n\tUserField\x12\r\n\x03key\x18\x01\x20\x01(\tB\0\
-    \x12\x0f\n\x05value\x18\x02\x20\x01(\x0cB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 10647
protocol/src/metadata.rs

@@ -1,10647 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `metadata.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct TopTracks {
-    // message fields
-    country: ::protobuf::SingularField<::std::string::String>,
-    track: ::protobuf::RepeatedField<Track>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a TopTracks {
-    fn default() -> &'a TopTracks {
-        <TopTracks as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl TopTracks {
-    pub fn new() -> TopTracks {
-        ::std::default::Default::default()
-    }
-
-    // optional string country = 1;
-
-    pub fn get_country(&self) -> &str {
-        match self.country.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_country(&mut self) {
-        self.country.clear();
-    }
-
-    pub fn has_country(&self) -> bool {
-        self.country.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_country(&mut self, v: ::std::string::String) {
-        self.country = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_country(&mut self) -> &mut ::std::string::String {
-        if self.country.is_none() {
-            self.country.set_default();
-        }
-        self.country.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_country(&mut self) -> ::std::string::String {
-        self.country
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Track track = 2;
-
-    pub fn get_track(&self) -> &[Track] {
-        &self.track
-    }
-    pub fn clear_track(&mut self) {
-        self.track.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_track(&mut self, v: ::protobuf::RepeatedField<Track>) {
-        self.track = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_track(&mut self) -> &mut ::protobuf::RepeatedField<Track> {
-        &mut self.track
-    }
-
-    // Take field
-    pub fn take_track(&mut self) -> ::protobuf::RepeatedField<Track> {
-        ::std::mem::replace(&mut self.track, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for TopTracks {
-    fn is_initialized(&self) -> bool {
-        for v in &self.track {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.country)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.track)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.country.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        for value in &self.track {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.country.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        for v in &self.track {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> TopTracks {
-        TopTracks::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "country",
-                        |m: &TopTracks| &m.country,
-                        |m: &mut TopTracks| &mut m.country,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Track>,
-                    >(
-                        "track",
-                        |m: &TopTracks| &m.track,
-                        |m: &mut TopTracks| &mut m.track,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<TopTracks>(
-                    "TopTracks",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static TopTracks {
-        static mut instance: ::protobuf::lazy::Lazy<TopTracks> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(TopTracks::new) }
-    }
-}
-
-impl ::protobuf::Clear for TopTracks {
-    fn clear(&mut self) {
-        self.country.clear();
-        self.track.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for TopTracks {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for TopTracks {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ActivityPeriod {
-    // message fields
-    start_year: ::std::option::Option<i32>,
-    end_year: ::std::option::Option<i32>,
-    decade: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ActivityPeriod {
-    fn default() -> &'a ActivityPeriod {
-        <ActivityPeriod as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ActivityPeriod {
-    pub fn new() -> ActivityPeriod {
-        ::std::default::Default::default()
-    }
-
-    // optional sint32 start_year = 1;
-
-    pub fn get_start_year(&self) -> i32 {
-        self.start_year.unwrap_or(0)
-    }
-    pub fn clear_start_year(&mut self) {
-        self.start_year = ::std::option::Option::None;
-    }
-
-    pub fn has_start_year(&self) -> bool {
-        self.start_year.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_start_year(&mut self, v: i32) {
-        self.start_year = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 end_year = 2;
-
-    pub fn get_end_year(&self) -> i32 {
-        self.end_year.unwrap_or(0)
-    }
-    pub fn clear_end_year(&mut self) {
-        self.end_year = ::std::option::Option::None;
-    }
-
-    pub fn has_end_year(&self) -> bool {
-        self.end_year.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_end_year(&mut self, v: i32) {
-        self.end_year = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 decade = 3;
-
-    pub fn get_decade(&self) -> i32 {
-        self.decade.unwrap_or(0)
-    }
-    pub fn clear_decade(&mut self) {
-        self.decade = ::std::option::Option::None;
-    }
-
-    pub fn has_decade(&self) -> bool {
-        self.decade.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_decade(&mut self, v: i32) {
-        self.decade = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ActivityPeriod {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.start_year = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.end_year = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.decade = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.start_year {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(1, v);
-        }
-        if let Some(v) = self.end_year {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(2, v);
-        }
-        if let Some(v) = self.decade {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(3, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.start_year {
-            os.write_sint32(1, v)?;
-        }
-        if let Some(v) = self.end_year {
-            os.write_sint32(2, v)?;
-        }
-        if let Some(v) = self.decade {
-            os.write_sint32(3, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ActivityPeriod {
-        ActivityPeriod::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "start_year",
-                    |m: &ActivityPeriod| &m.start_year,
-                    |m: &mut ActivityPeriod| &mut m.start_year,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "end_year",
-                    |m: &ActivityPeriod| &m.end_year,
-                    |m: &mut ActivityPeriod| &mut m.end_year,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "decade",
-                    |m: &ActivityPeriod| &m.decade,
-                    |m: &mut ActivityPeriod| &mut m.decade,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ActivityPeriod>(
-                    "ActivityPeriod",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ActivityPeriod {
-        static mut instance: ::protobuf::lazy::Lazy<ActivityPeriod> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ActivityPeriod::new) }
-    }
-}
-
-impl ::protobuf::Clear for ActivityPeriod {
-    fn clear(&mut self) {
-        self.start_year = ::std::option::Option::None;
-        self.end_year = ::std::option::Option::None;
-        self.decade = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ActivityPeriod {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ActivityPeriod {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Artist {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    popularity: ::std::option::Option<i32>,
-    top_track: ::protobuf::RepeatedField<TopTracks>,
-    album_group: ::protobuf::RepeatedField<AlbumGroup>,
-    single_group: ::protobuf::RepeatedField<AlbumGroup>,
-    compilation_group: ::protobuf::RepeatedField<AlbumGroup>,
-    appears_on_group: ::protobuf::RepeatedField<AlbumGroup>,
-    genre: ::protobuf::RepeatedField<::std::string::String>,
-    external_id: ::protobuf::RepeatedField<ExternalId>,
-    portrait: ::protobuf::RepeatedField<Image>,
-    biography: ::protobuf::RepeatedField<Biography>,
-    activity_period: ::protobuf::RepeatedField<ActivityPeriod>,
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    related: ::protobuf::RepeatedField<Artist>,
-    is_portrait_album_cover: ::std::option::Option<bool>,
-    portrait_group: ::protobuf::SingularPtrField<ImageGroup>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Artist {
-    fn default() -> &'a Artist {
-        <Artist as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Artist {
-    pub fn new() -> Artist {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional sint32 popularity = 3;
-
-    pub fn get_popularity(&self) -> i32 {
-        self.popularity.unwrap_or(0)
-    }
-    pub fn clear_popularity(&mut self) {
-        self.popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_popularity(&self) -> bool {
-        self.popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_popularity(&mut self, v: i32) {
-        self.popularity = ::std::option::Option::Some(v);
-    }
-
-    // repeated .TopTracks top_track = 4;
-
-    pub fn get_top_track(&self) -> &[TopTracks] {
-        &self.top_track
-    }
-    pub fn clear_top_track(&mut self) {
-        self.top_track.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_top_track(&mut self, v: ::protobuf::RepeatedField<TopTracks>) {
-        self.top_track = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_top_track(&mut self) -> &mut ::protobuf::RepeatedField<TopTracks> {
-        &mut self.top_track
-    }
-
-    // Take field
-    pub fn take_top_track(&mut self) -> ::protobuf::RepeatedField<TopTracks> {
-        ::std::mem::replace(&mut self.top_track, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AlbumGroup album_group = 5;
-
-    pub fn get_album_group(&self) -> &[AlbumGroup] {
-        &self.album_group
-    }
-    pub fn clear_album_group(&mut self) {
-        self.album_group.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_album_group(&mut self, v: ::protobuf::RepeatedField<AlbumGroup>) {
-        self.album_group = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_album_group(&mut self) -> &mut ::protobuf::RepeatedField<AlbumGroup> {
-        &mut self.album_group
-    }
-
-    // Take field
-    pub fn take_album_group(&mut self) -> ::protobuf::RepeatedField<AlbumGroup> {
-        ::std::mem::replace(&mut self.album_group, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AlbumGroup single_group = 6;
-
-    pub fn get_single_group(&self) -> &[AlbumGroup] {
-        &self.single_group
-    }
-    pub fn clear_single_group(&mut self) {
-        self.single_group.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_single_group(&mut self, v: ::protobuf::RepeatedField<AlbumGroup>) {
-        self.single_group = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_single_group(&mut self) -> &mut ::protobuf::RepeatedField<AlbumGroup> {
-        &mut self.single_group
-    }
-
-    // Take field
-    pub fn take_single_group(&mut self) -> ::protobuf::RepeatedField<AlbumGroup> {
-        ::std::mem::replace(&mut self.single_group, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AlbumGroup compilation_group = 7;
-
-    pub fn get_compilation_group(&self) -> &[AlbumGroup] {
-        &self.compilation_group
-    }
-    pub fn clear_compilation_group(&mut self) {
-        self.compilation_group.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_compilation_group(&mut self, v: ::protobuf::RepeatedField<AlbumGroup>) {
-        self.compilation_group = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_compilation_group(&mut self) -> &mut ::protobuf::RepeatedField<AlbumGroup> {
-        &mut self.compilation_group
-    }
-
-    // Take field
-    pub fn take_compilation_group(&mut self) -> ::protobuf::RepeatedField<AlbumGroup> {
-        ::std::mem::replace(
-            &mut self.compilation_group,
-            ::protobuf::RepeatedField::new(),
-        )
-    }
-
-    // repeated .AlbumGroup appears_on_group = 8;
-
-    pub fn get_appears_on_group(&self) -> &[AlbumGroup] {
-        &self.appears_on_group
-    }
-    pub fn clear_appears_on_group(&mut self) {
-        self.appears_on_group.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_appears_on_group(&mut self, v: ::protobuf::RepeatedField<AlbumGroup>) {
-        self.appears_on_group = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_appears_on_group(&mut self) -> &mut ::protobuf::RepeatedField<AlbumGroup> {
-        &mut self.appears_on_group
-    }
-
-    // Take field
-    pub fn take_appears_on_group(&mut self) -> ::protobuf::RepeatedField<AlbumGroup> {
-        ::std::mem::replace(&mut self.appears_on_group, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated string genre = 9;
-
-    pub fn get_genre(&self) -> &[::std::string::String] {
-        &self.genre
-    }
-    pub fn clear_genre(&mut self) {
-        self.genre.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_genre(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.genre = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_genre(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.genre
-    }
-
-    // Take field
-    pub fn take_genre(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.genre, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ExternalId external_id = 10;
-
-    pub fn get_external_id(&self) -> &[ExternalId] {
-        &self.external_id
-    }
-    pub fn clear_external_id(&mut self) {
-        self.external_id.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_external_id(&mut self, v: ::protobuf::RepeatedField<ExternalId>) {
-        self.external_id = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_external_id(&mut self) -> &mut ::protobuf::RepeatedField<ExternalId> {
-        &mut self.external_id
-    }
-
-    // Take field
-    pub fn take_external_id(&mut self) -> ::protobuf::RepeatedField<ExternalId> {
-        ::std::mem::replace(&mut self.external_id, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Image portrait = 11;
-
-    pub fn get_portrait(&self) -> &[Image] {
-        &self.portrait
-    }
-    pub fn clear_portrait(&mut self) {
-        self.portrait.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_portrait(&mut self, v: ::protobuf::RepeatedField<Image>) {
-        self.portrait = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_portrait(&mut self) -> &mut ::protobuf::RepeatedField<Image> {
-        &mut self.portrait
-    }
-
-    // Take field
-    pub fn take_portrait(&mut self) -> ::protobuf::RepeatedField<Image> {
-        ::std::mem::replace(&mut self.portrait, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Biography biography = 12;
-
-    pub fn get_biography(&self) -> &[Biography] {
-        &self.biography
-    }
-    pub fn clear_biography(&mut self) {
-        self.biography.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_biography(&mut self, v: ::protobuf::RepeatedField<Biography>) {
-        self.biography = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_biography(&mut self) -> &mut ::protobuf::RepeatedField<Biography> {
-        &mut self.biography
-    }
-
-    // Take field
-    pub fn take_biography(&mut self) -> ::protobuf::RepeatedField<Biography> {
-        ::std::mem::replace(&mut self.biography, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ActivityPeriod activity_period = 13;
-
-    pub fn get_activity_period(&self) -> &[ActivityPeriod] {
-        &self.activity_period
-    }
-    pub fn clear_activity_period(&mut self) {
-        self.activity_period.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_activity_period(&mut self, v: ::protobuf::RepeatedField<ActivityPeriod>) {
-        self.activity_period = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_activity_period(&mut self) -> &mut ::protobuf::RepeatedField<ActivityPeriod> {
-        &mut self.activity_period
-    }
-
-    // Take field
-    pub fn take_activity_period(&mut self) -> ::protobuf::RepeatedField<ActivityPeriod> {
-        ::std::mem::replace(&mut self.activity_period, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Restriction restriction = 14;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Artist related = 15;
-
-    pub fn get_related(&self) -> &[Artist] {
-        &self.related
-    }
-    pub fn clear_related(&mut self) {
-        self.related.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_related(&mut self, v: ::protobuf::RepeatedField<Artist>) {
-        self.related = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_related(&mut self) -> &mut ::protobuf::RepeatedField<Artist> {
-        &mut self.related
-    }
-
-    // Take field
-    pub fn take_related(&mut self) -> ::protobuf::RepeatedField<Artist> {
-        ::std::mem::replace(&mut self.related, ::protobuf::RepeatedField::new())
-    }
-
-    // optional bool is_portrait_album_cover = 16;
-
-    pub fn get_is_portrait_album_cover(&self) -> bool {
-        self.is_portrait_album_cover.unwrap_or(false)
-    }
-    pub fn clear_is_portrait_album_cover(&mut self) {
-        self.is_portrait_album_cover = ::std::option::Option::None;
-    }
-
-    pub fn has_is_portrait_album_cover(&self) -> bool {
-        self.is_portrait_album_cover.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_is_portrait_album_cover(&mut self, v: bool) {
-        self.is_portrait_album_cover = ::std::option::Option::Some(v);
-    }
-
-    // optional .ImageGroup portrait_group = 17;
-
-    pub fn get_portrait_group(&self) -> &ImageGroup {
-        self.portrait_group
-            .as_ref()
-            .unwrap_or_else(|| ImageGroup::default_instance())
-    }
-    pub fn clear_portrait_group(&mut self) {
-        self.portrait_group.clear();
-    }
-
-    pub fn has_portrait_group(&self) -> bool {
-        self.portrait_group.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_portrait_group(&mut self, v: ImageGroup) {
-        self.portrait_group = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_portrait_group(&mut self) -> &mut ImageGroup {
-        if self.portrait_group.is_none() {
-            self.portrait_group.set_default();
-        }
-        self.portrait_group.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_portrait_group(&mut self) -> ImageGroup {
-        self.portrait_group
-            .take()
-            .unwrap_or_else(|| ImageGroup::new())
-    }
-}
-
-impl ::protobuf::Message for Artist {
-    fn is_initialized(&self) -> bool {
-        for v in &self.top_track {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.album_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.single_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.compilation_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.appears_on_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.external_id {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.portrait {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.biography {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.activity_period {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.related {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.portrait_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.popularity = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.top_track)?;
-                }
-                5 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.album_group,
-                    )?;
-                }
-                6 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.single_group,
-                    )?;
-                }
-                7 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.compilation_group,
-                    )?;
-                }
-                8 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.appears_on_group,
-                    )?;
-                }
-                9 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.genre)?;
-                }
-                10 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.external_id,
-                    )?;
-                }
-                11 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.portrait)?;
-                }
-                12 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.biography)?;
-                }
-                13 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.activity_period,
-                    )?;
-                }
-                14 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                15 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.related)?;
-                }
-                16 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.is_portrait_album_cover = ::std::option::Option::Some(tmp);
-                }
-                17 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.portrait_group,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(v) = self.popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(3, v);
-        }
-        for value in &self.top_track {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.album_group {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.single_group {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.compilation_group {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.appears_on_group {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.genre {
-            my_size += ::protobuf::rt::string_size(9, &value);
-        }
-        for value in &self.external_id {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.portrait {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.biography {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.activity_period {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.related {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.is_portrait_album_cover {
-            my_size += 3;
-        }
-        if let Some(ref v) = self.portrait_group.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(v) = self.popularity {
-            os.write_sint32(3, v)?;
-        }
-        for v in &self.top_track {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.album_group {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.single_group {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.compilation_group {
-            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.appears_on_group {
-            os.write_tag(8, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.genre {
-            os.write_string(9, &v)?;
-        }
-        for v in &self.external_id {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.portrait {
-            os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.biography {
-            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.activity_period {
-            os.write_tag(13, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.restriction {
-            os.write_tag(14, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.related {
-            os.write_tag(15, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.is_portrait_album_cover {
-            os.write_bool(16, v)?;
-        }
-        if let Some(ref v) = self.portrait_group.as_ref() {
-            os.write_tag(17, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Artist {
-        Artist::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Artist| &m.gid, |m: &mut Artist| &mut m.gid),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "name", |m: &Artist| &m.name, |m: &mut Artist| &mut m.name
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "popularity",
-                    |m: &Artist| &m.popularity,
-                    |m: &mut Artist| &mut m.popularity,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<TopTracks>,
-                    >(
-                        "top_track",
-                        |m: &Artist| &m.top_track,
-                        |m: &mut Artist| &mut m.top_track,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AlbumGroup>,
-                    >(
-                        "album_group",
-                        |m: &Artist| &m.album_group,
-                        |m: &mut Artist| &mut m.album_group,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AlbumGroup>,
-                    >(
-                        "single_group",
-                        |m: &Artist| &m.single_group,
-                        |m: &mut Artist| &mut m.single_group,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AlbumGroup>,
-                    >(
-                        "compilation_group",
-                        |m: &Artist| &m.compilation_group,
-                        |m: &mut Artist| &mut m.compilation_group,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AlbumGroup>,
-                    >(
-                        "appears_on_group",
-                        |m: &Artist| &m.appears_on_group,
-                        |m: &mut Artist| &mut m.appears_on_group,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "genre",
-                        |m: &Artist| &m.genre,
-                        |m: &mut Artist| &mut m.genre,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ExternalId>,
-                    >(
-                        "external_id",
-                        |m: &Artist| &m.external_id,
-                        |m: &mut Artist| &mut m.external_id,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Image>,
-                    >(
-                        "portrait",
-                        |m: &Artist| &m.portrait,
-                        |m: &mut Artist| &mut m.portrait,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Biography>,
-                    >(
-                        "biography",
-                        |m: &Artist| &m.biography,
-                        |m: &mut Artist| &mut m.biography,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ActivityPeriod>,
-                    >(
-                        "activity_period",
-                        |m: &Artist| &m.activity_period,
-                        |m: &mut Artist| &mut m.activity_period,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &Artist| &m.restriction,
-                        |m: &mut Artist| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Artist>,
-                    >(
-                        "related",
-                        |m: &Artist| &m.related,
-                        |m: &mut Artist| &mut m.related,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "is_portrait_album_cover",
-                    |m: &Artist| &m.is_portrait_album_cover,
-                    |m: &mut Artist| &mut m.is_portrait_album_cover,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "portrait_group",
-                        |m: &Artist| &m.portrait_group,
-                        |m: &mut Artist| &mut m.portrait_group,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Artist>(
-                    "Artist",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Artist {
-        static mut instance: ::protobuf::lazy::Lazy<Artist> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Artist::new) }
-    }
-}
-
-impl ::protobuf::Clear for Artist {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.name.clear();
-        self.popularity = ::std::option::Option::None;
-        self.top_track.clear();
-        self.album_group.clear();
-        self.single_group.clear();
-        self.compilation_group.clear();
-        self.appears_on_group.clear();
-        self.genre.clear();
-        self.external_id.clear();
-        self.portrait.clear();
-        self.biography.clear();
-        self.activity_period.clear();
-        self.restriction.clear();
-        self.related.clear();
-        self.is_portrait_album_cover = ::std::option::Option::None;
-        self.portrait_group.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Artist {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Artist {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct AlbumGroup {
-    // message fields
-    album: ::protobuf::RepeatedField<Album>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a AlbumGroup {
-    fn default() -> &'a AlbumGroup {
-        <AlbumGroup as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl AlbumGroup {
-    pub fn new() -> AlbumGroup {
-        ::std::default::Default::default()
-    }
-
-    // repeated .Album album = 1;
-
-    pub fn get_album(&self) -> &[Album] {
-        &self.album
-    }
-    pub fn clear_album(&mut self) {
-        self.album.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_album(&mut self, v: ::protobuf::RepeatedField<Album>) {
-        self.album = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_album(&mut self) -> &mut ::protobuf::RepeatedField<Album> {
-        &mut self.album
-    }
-
-    // Take field
-    pub fn take_album(&mut self) -> ::protobuf::RepeatedField<Album> {
-        ::std::mem::replace(&mut self.album, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for AlbumGroup {
-    fn is_initialized(&self) -> bool {
-        for v in &self.album {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.album)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.album {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.album {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> AlbumGroup {
-        AlbumGroup::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Album>,
-                    >(
-                        "album",
-                        |m: &AlbumGroup| &m.album,
-                        |m: &mut AlbumGroup| &mut m.album,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<AlbumGroup>(
-                    "AlbumGroup",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static AlbumGroup {
-        static mut instance: ::protobuf::lazy::Lazy<AlbumGroup> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(AlbumGroup::new) }
-    }
-}
-
-impl ::protobuf::Clear for AlbumGroup {
-    fn clear(&mut self) {
-        self.album.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for AlbumGroup {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AlbumGroup {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Date {
-    // message fields
-    year: ::std::option::Option<i32>,
-    month: ::std::option::Option<i32>,
-    day: ::std::option::Option<i32>,
-    hour: ::std::option::Option<i32>,
-    minute: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Date {
-    fn default() -> &'a Date {
-        <Date as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Date {
-    pub fn new() -> Date {
-        ::std::default::Default::default()
-    }
-
-    // optional sint32 year = 1;
-
-    pub fn get_year(&self) -> i32 {
-        self.year.unwrap_or(0)
-    }
-    pub fn clear_year(&mut self) {
-        self.year = ::std::option::Option::None;
-    }
-
-    pub fn has_year(&self) -> bool {
-        self.year.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_year(&mut self, v: i32) {
-        self.year = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 month = 2;
-
-    pub fn get_month(&self) -> i32 {
-        self.month.unwrap_or(0)
-    }
-    pub fn clear_month(&mut self) {
-        self.month = ::std::option::Option::None;
-    }
-
-    pub fn has_month(&self) -> bool {
-        self.month.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_month(&mut self, v: i32) {
-        self.month = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 day = 3;
-
-    pub fn get_day(&self) -> i32 {
-        self.day.unwrap_or(0)
-    }
-    pub fn clear_day(&mut self) {
-        self.day = ::std::option::Option::None;
-    }
-
-    pub fn has_day(&self) -> bool {
-        self.day.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_day(&mut self, v: i32) {
-        self.day = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 hour = 4;
-
-    pub fn get_hour(&self) -> i32 {
-        self.hour.unwrap_or(0)
-    }
-    pub fn clear_hour(&mut self) {
-        self.hour = ::std::option::Option::None;
-    }
-
-    pub fn has_hour(&self) -> bool {
-        self.hour.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hour(&mut self, v: i32) {
-        self.hour = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 minute = 5;
-
-    pub fn get_minute(&self) -> i32 {
-        self.minute.unwrap_or(0)
-    }
-    pub fn clear_minute(&mut self) {
-        self.minute = ::std::option::Option::None;
-    }
-
-    pub fn has_minute(&self) -> bool {
-        self.minute.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_minute(&mut self, v: i32) {
-        self.minute = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Date {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.year = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.month = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.day = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.hour = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.minute = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.year {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(1, v);
-        }
-        if let Some(v) = self.month {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(2, v);
-        }
-        if let Some(v) = self.day {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(3, v);
-        }
-        if let Some(v) = self.hour {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(4, v);
-        }
-        if let Some(v) = self.minute {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(5, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.year {
-            os.write_sint32(1, v)?;
-        }
-        if let Some(v) = self.month {
-            os.write_sint32(2, v)?;
-        }
-        if let Some(v) = self.day {
-            os.write_sint32(3, v)?;
-        }
-        if let Some(v) = self.hour {
-            os.write_sint32(4, v)?;
-        }
-        if let Some(v) = self.minute {
-            os.write_sint32(5, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Date {
-        Date::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "year", |m: &Date| &m.year, |m: &mut Date| &mut m.year
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "month", |m: &Date| &m.month, |m: &mut Date| &mut m.month
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "day", |m: &Date| &m.day, |m: &mut Date| &mut m.day
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "hour", |m: &Date| &m.hour, |m: &mut Date| &mut m.hour
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "minute",
-                    |m: &Date| &m.minute,
-                    |m: &mut Date| &mut m.minute,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Date>(
-                    "Date",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Date {
-        static mut instance: ::protobuf::lazy::Lazy<Date> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Date::new) }
-    }
-}
-
-impl ::protobuf::Clear for Date {
-    fn clear(&mut self) {
-        self.year = ::std::option::Option::None;
-        self.month = ::std::option::Option::None;
-        self.day = ::std::option::Option::None;
-        self.hour = ::std::option::Option::None;
-        self.minute = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Date {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Date {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Album {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    artist: ::protobuf::RepeatedField<Artist>,
-    typ: ::std::option::Option<Album_Type>,
-    label: ::protobuf::SingularField<::std::string::String>,
-    date: ::protobuf::SingularPtrField<Date>,
-    popularity: ::std::option::Option<i32>,
-    genre: ::protobuf::RepeatedField<::std::string::String>,
-    cover: ::protobuf::RepeatedField<Image>,
-    external_id: ::protobuf::RepeatedField<ExternalId>,
-    disc: ::protobuf::RepeatedField<Disc>,
-    review: ::protobuf::RepeatedField<::std::string::String>,
-    copyright: ::protobuf::RepeatedField<Copyright>,
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    related: ::protobuf::RepeatedField<Album>,
-    sale_period: ::protobuf::RepeatedField<SalePeriod>,
-    cover_group: ::protobuf::SingularPtrField<ImageGroup>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Album {
-    fn default() -> &'a Album {
-        <Album as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Album {
-    pub fn new() -> Album {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Artist artist = 3;
-
-    pub fn get_artist(&self) -> &[Artist] {
-        &self.artist
-    }
-    pub fn clear_artist(&mut self) {
-        self.artist.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_artist(&mut self, v: ::protobuf::RepeatedField<Artist>) {
-        self.artist = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_artist(&mut self) -> &mut ::protobuf::RepeatedField<Artist> {
-        &mut self.artist
-    }
-
-    // Take field
-    pub fn take_artist(&mut self) -> ::protobuf::RepeatedField<Artist> {
-        ::std::mem::replace(&mut self.artist, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Album.Type typ = 4;
-
-    pub fn get_typ(&self) -> Album_Type {
-        self.typ.unwrap_or(Album_Type::ALBUM)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: Album_Type) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // optional string label = 5;
-
-    pub fn get_label(&self) -> &str {
-        match self.label.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_label(&mut self) {
-        self.label.clear();
-    }
-
-    pub fn has_label(&self) -> bool {
-        self.label.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_label(&mut self, v: ::std::string::String) {
-        self.label = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_label(&mut self) -> &mut ::std::string::String {
-        if self.label.is_none() {
-            self.label.set_default();
-        }
-        self.label.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_label(&mut self) -> ::std::string::String {
-        self.label
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .Date date = 6;
-
-    pub fn get_date(&self) -> &Date {
-        self.date
-            .as_ref()
-            .unwrap_or_else(|| Date::default_instance())
-    }
-    pub fn clear_date(&mut self) {
-        self.date.clear();
-    }
-
-    pub fn has_date(&self) -> bool {
-        self.date.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_date(&mut self, v: Date) {
-        self.date = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_date(&mut self) -> &mut Date {
-        if self.date.is_none() {
-            self.date.set_default();
-        }
-        self.date.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_date(&mut self) -> Date {
-        self.date.take().unwrap_or_else(|| Date::new())
-    }
-
-    // optional sint32 popularity = 7;
-
-    pub fn get_popularity(&self) -> i32 {
-        self.popularity.unwrap_or(0)
-    }
-    pub fn clear_popularity(&mut self) {
-        self.popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_popularity(&self) -> bool {
-        self.popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_popularity(&mut self, v: i32) {
-        self.popularity = ::std::option::Option::Some(v);
-    }
-
-    // repeated string genre = 8;
-
-    pub fn get_genre(&self) -> &[::std::string::String] {
-        &self.genre
-    }
-    pub fn clear_genre(&mut self) {
-        self.genre.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_genre(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.genre = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_genre(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.genre
-    }
-
-    // Take field
-    pub fn take_genre(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.genre, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Image cover = 9;
-
-    pub fn get_cover(&self) -> &[Image] {
-        &self.cover
-    }
-    pub fn clear_cover(&mut self) {
-        self.cover.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cover(&mut self, v: ::protobuf::RepeatedField<Image>) {
-        self.cover = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_cover(&mut self) -> &mut ::protobuf::RepeatedField<Image> {
-        &mut self.cover
-    }
-
-    // Take field
-    pub fn take_cover(&mut self) -> ::protobuf::RepeatedField<Image> {
-        ::std::mem::replace(&mut self.cover, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ExternalId external_id = 10;
-
-    pub fn get_external_id(&self) -> &[ExternalId] {
-        &self.external_id
-    }
-    pub fn clear_external_id(&mut self) {
-        self.external_id.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_external_id(&mut self, v: ::protobuf::RepeatedField<ExternalId>) {
-        self.external_id = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_external_id(&mut self) -> &mut ::protobuf::RepeatedField<ExternalId> {
-        &mut self.external_id
-    }
-
-    // Take field
-    pub fn take_external_id(&mut self) -> ::protobuf::RepeatedField<ExternalId> {
-        ::std::mem::replace(&mut self.external_id, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Disc disc = 11;
-
-    pub fn get_disc(&self) -> &[Disc] {
-        &self.disc
-    }
-    pub fn clear_disc(&mut self) {
-        self.disc.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_disc(&mut self, v: ::protobuf::RepeatedField<Disc>) {
-        self.disc = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_disc(&mut self) -> &mut ::protobuf::RepeatedField<Disc> {
-        &mut self.disc
-    }
-
-    // Take field
-    pub fn take_disc(&mut self) -> ::protobuf::RepeatedField<Disc> {
-        ::std::mem::replace(&mut self.disc, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated string review = 12;
-
-    pub fn get_review(&self) -> &[::std::string::String] {
-        &self.review
-    }
-    pub fn clear_review(&mut self) {
-        self.review.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_review(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.review = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_review(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.review
-    }
-
-    // Take field
-    pub fn take_review(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.review, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Copyright copyright = 13;
-
-    pub fn get_copyright(&self) -> &[Copyright] {
-        &self.copyright
-    }
-    pub fn clear_copyright(&mut self) {
-        self.copyright.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_copyright(&mut self, v: ::protobuf::RepeatedField<Copyright>) {
-        self.copyright = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_copyright(&mut self) -> &mut ::protobuf::RepeatedField<Copyright> {
-        &mut self.copyright
-    }
-
-    // Take field
-    pub fn take_copyright(&mut self) -> ::protobuf::RepeatedField<Copyright> {
-        ::std::mem::replace(&mut self.copyright, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Restriction restriction = 14;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Album related = 15;
-
-    pub fn get_related(&self) -> &[Album] {
-        &self.related
-    }
-    pub fn clear_related(&mut self) {
-        self.related.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_related(&mut self, v: ::protobuf::RepeatedField<Album>) {
-        self.related = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_related(&mut self) -> &mut ::protobuf::RepeatedField<Album> {
-        &mut self.related
-    }
-
-    // Take field
-    pub fn take_related(&mut self) -> ::protobuf::RepeatedField<Album> {
-        ::std::mem::replace(&mut self.related, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .SalePeriod sale_period = 16;
-
-    pub fn get_sale_period(&self) -> &[SalePeriod] {
-        &self.sale_period
-    }
-    pub fn clear_sale_period(&mut self) {
-        self.sale_period.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sale_period(&mut self, v: ::protobuf::RepeatedField<SalePeriod>) {
-        self.sale_period = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_sale_period(&mut self) -> &mut ::protobuf::RepeatedField<SalePeriod> {
-        &mut self.sale_period
-    }
-
-    // Take field
-    pub fn take_sale_period(&mut self) -> ::protobuf::RepeatedField<SalePeriod> {
-        ::std::mem::replace(&mut self.sale_period, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .ImageGroup cover_group = 17;
-
-    pub fn get_cover_group(&self) -> &ImageGroup {
-        self.cover_group
-            .as_ref()
-            .unwrap_or_else(|| ImageGroup::default_instance())
-    }
-    pub fn clear_cover_group(&mut self) {
-        self.cover_group.clear();
-    }
-
-    pub fn has_cover_group(&self) -> bool {
-        self.cover_group.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_cover_group(&mut self, v: ImageGroup) {
-        self.cover_group = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_cover_group(&mut self) -> &mut ImageGroup {
-        if self.cover_group.is_none() {
-            self.cover_group.set_default();
-        }
-        self.cover_group.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_cover_group(&mut self) -> ImageGroup {
-        self.cover_group.take().unwrap_or_else(|| ImageGroup::new())
-    }
-}
-
-impl ::protobuf::Message for Album {
-    fn is_initialized(&self) -> bool {
-        for v in &self.artist {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.date {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.cover {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.external_id {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.disc {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.copyright {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.related {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.sale_period {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.cover_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.artist)?;
-                }
-                4 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    4,
-                    &mut self.unknown_fields,
-                )?,
-                5 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.label)?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.date)?;
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.popularity = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.genre)?;
-                }
-                9 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.cover)?;
-                }
-                10 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.external_id,
-                    )?;
-                }
-                11 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.disc)?;
-                }
-                12 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.review)?;
-                }
-                13 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.copyright)?;
-                }
-                14 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                15 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.related)?;
-                }
-                16 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.sale_period,
-                    )?;
-                }
-                17 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.cover_group,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        for value in &self.artist {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(4, v);
-        }
-        if let Some(ref v) = self.label.as_ref() {
-            my_size += ::protobuf::rt::string_size(5, &v);
-        }
-        if let Some(ref v) = self.date.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(7, v);
-        }
-        for value in &self.genre {
-            my_size += ::protobuf::rt::string_size(8, &value);
-        }
-        for value in &self.cover {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.external_id {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.disc {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.review {
-            my_size += ::protobuf::rt::string_size(12, &value);
-        }
-        for value in &self.copyright {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.related {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.sale_period {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.cover_group.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        for v in &self.artist {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.typ {
-            os.write_enum(4, v.value())?;
-        }
-        if let Some(ref v) = self.label.as_ref() {
-            os.write_string(5, &v)?;
-        }
-        if let Some(ref v) = self.date.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.popularity {
-            os.write_sint32(7, v)?;
-        }
-        for v in &self.genre {
-            os.write_string(8, &v)?;
-        }
-        for v in &self.cover {
-            os.write_tag(9, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.external_id {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.disc {
-            os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.review {
-            os.write_string(12, &v)?;
-        }
-        for v in &self.copyright {
-            os.write_tag(13, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.restriction {
-            os.write_tag(14, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.related {
-            os.write_tag(15, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.sale_period {
-            os.write_tag(16, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.cover_group.as_ref() {
-            os.write_tag(17, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Album {
-        Album::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Album| &m.gid, |m: &mut Album| &mut m.gid),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("name", |m: &Album| &m.name, |m: &mut Album| &mut m.name),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Artist>,
-                    >(
-                        "artist",
-                        |m: &Album| &m.artist,
-                        |m: &mut Album| &mut m.artist,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Album_Type>,
-                >(
-                    "typ", |m: &Album| &m.typ, |m: &mut Album| &mut m.typ
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "label", |m: &Album| &m.label, |m: &mut Album| &mut m.label
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Date>,
-                    >("date", |m: &Album| &m.date, |m: &mut Album| &mut m.date),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "popularity",
-                    |m: &Album| &m.popularity,
-                    |m: &mut Album| &mut m.popularity,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "genre", |m: &Album| &m.genre, |m: &mut Album| &mut m.genre
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Image>,
-                    >(
-                        "cover", |m: &Album| &m.cover, |m: &mut Album| &mut m.cover
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ExternalId>,
-                    >(
-                        "external_id",
-                        |m: &Album| &m.external_id,
-                        |m: &mut Album| &mut m.external_id,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Disc>,
-                    >("disc", |m: &Album| &m.disc, |m: &mut Album| &mut m.disc),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "review",
-                        |m: &Album| &m.review,
-                        |m: &mut Album| &mut m.review,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Copyright>,
-                    >(
-                        "copyright",
-                        |m: &Album| &m.copyright,
-                        |m: &mut Album| &mut m.copyright,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &Album| &m.restriction,
-                        |m: &mut Album| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Album>,
-                    >(
-                        "related",
-                        |m: &Album| &m.related,
-                        |m: &mut Album| &mut m.related,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<SalePeriod>,
-                    >(
-                        "sale_period",
-                        |m: &Album| &m.sale_period,
-                        |m: &mut Album| &mut m.sale_period,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "cover_group",
-                        |m: &Album| &m.cover_group,
-                        |m: &mut Album| &mut m.cover_group,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Album>(
-                    "Album",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Album {
-        static mut instance: ::protobuf::lazy::Lazy<Album> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Album::new) }
-    }
-}
-
-impl ::protobuf::Clear for Album {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.name.clear();
-        self.artist.clear();
-        self.typ = ::std::option::Option::None;
-        self.label.clear();
-        self.date.clear();
-        self.popularity = ::std::option::Option::None;
-        self.genre.clear();
-        self.cover.clear();
-        self.external_id.clear();
-        self.disc.clear();
-        self.review.clear();
-        self.copyright.clear();
-        self.restriction.clear();
-        self.related.clear();
-        self.sale_period.clear();
-        self.cover_group.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Album {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Album {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Album_Type {
-    ALBUM = 1,
-    SINGLE = 2,
-    COMPILATION = 3,
-    EP = 4,
-}
-
-impl ::protobuf::ProtobufEnum for Album_Type {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Album_Type> {
-        match value {
-            1 => ::std::option::Option::Some(Album_Type::ALBUM),
-            2 => ::std::option::Option::Some(Album_Type::SINGLE),
-            3 => ::std::option::Option::Some(Album_Type::COMPILATION),
-            4 => ::std::option::Option::Some(Album_Type::EP),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Album_Type] = &[
-            Album_Type::ALBUM,
-            Album_Type::SINGLE,
-            Album_Type::COMPILATION,
-            Album_Type::EP,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Album_Type>(
-                    "Album.Type",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Album_Type {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for Album_Type {
-    fn default() -> Self {
-        Album_Type::ALBUM
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Album_Type {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Track {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    album: ::protobuf::SingularPtrField<Album>,
-    artist: ::protobuf::RepeatedField<Artist>,
-    number: ::std::option::Option<i32>,
-    disc_number: ::std::option::Option<i32>,
-    duration: ::std::option::Option<i32>,
-    popularity: ::std::option::Option<i32>,
-    explicit: ::std::option::Option<bool>,
-    external_id: ::protobuf::RepeatedField<ExternalId>,
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    file: ::protobuf::RepeatedField<AudioFile>,
-    alternative: ::protobuf::RepeatedField<Track>,
-    sale_period: ::protobuf::RepeatedField<SalePeriod>,
-    preview: ::protobuf::RepeatedField<AudioFile>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Track {
-    fn default() -> &'a Track {
-        <Track as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Track {
-    pub fn new() -> Track {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .Album album = 3;
-
-    pub fn get_album(&self) -> &Album {
-        self.album
-            .as_ref()
-            .unwrap_or_else(|| Album::default_instance())
-    }
-    pub fn clear_album(&mut self) {
-        self.album.clear();
-    }
-
-    pub fn has_album(&self) -> bool {
-        self.album.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_album(&mut self, v: Album) {
-        self.album = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_album(&mut self) -> &mut Album {
-        if self.album.is_none() {
-            self.album.set_default();
-        }
-        self.album.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_album(&mut self) -> Album {
-        self.album.take().unwrap_or_else(|| Album::new())
-    }
-
-    // repeated .Artist artist = 4;
-
-    pub fn get_artist(&self) -> &[Artist] {
-        &self.artist
-    }
-    pub fn clear_artist(&mut self) {
-        self.artist.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_artist(&mut self, v: ::protobuf::RepeatedField<Artist>) {
-        self.artist = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_artist(&mut self) -> &mut ::protobuf::RepeatedField<Artist> {
-        &mut self.artist
-    }
-
-    // Take field
-    pub fn take_artist(&mut self) -> ::protobuf::RepeatedField<Artist> {
-        ::std::mem::replace(&mut self.artist, ::protobuf::RepeatedField::new())
-    }
-
-    // optional sint32 number = 5;
-
-    pub fn get_number(&self) -> i32 {
-        self.number.unwrap_or(0)
-    }
-    pub fn clear_number(&mut self) {
-        self.number = ::std::option::Option::None;
-    }
-
-    pub fn has_number(&self) -> bool {
-        self.number.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_number(&mut self, v: i32) {
-        self.number = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 disc_number = 6;
-
-    pub fn get_disc_number(&self) -> i32 {
-        self.disc_number.unwrap_or(0)
-    }
-    pub fn clear_disc_number(&mut self) {
-        self.disc_number = ::std::option::Option::None;
-    }
-
-    pub fn has_disc_number(&self) -> bool {
-        self.disc_number.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_disc_number(&mut self, v: i32) {
-        self.disc_number = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 duration = 7;
-
-    pub fn get_duration(&self) -> i32 {
-        self.duration.unwrap_or(0)
-    }
-    pub fn clear_duration(&mut self) {
-        self.duration = ::std::option::Option::None;
-    }
-
-    pub fn has_duration(&self) -> bool {
-        self.duration.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_duration(&mut self, v: i32) {
-        self.duration = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 popularity = 8;
-
-    pub fn get_popularity(&self) -> i32 {
-        self.popularity.unwrap_or(0)
-    }
-    pub fn clear_popularity(&mut self) {
-        self.popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_popularity(&self) -> bool {
-        self.popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_popularity(&mut self, v: i32) {
-        self.popularity = ::std::option::Option::Some(v);
-    }
-
-    // optional bool explicit = 9;
-
-    pub fn get_explicit(&self) -> bool {
-        self.explicit.unwrap_or(false)
-    }
-    pub fn clear_explicit(&mut self) {
-        self.explicit = ::std::option::Option::None;
-    }
-
-    pub fn has_explicit(&self) -> bool {
-        self.explicit.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_explicit(&mut self, v: bool) {
-        self.explicit = ::std::option::Option::Some(v);
-    }
-
-    // repeated .ExternalId external_id = 10;
-
-    pub fn get_external_id(&self) -> &[ExternalId] {
-        &self.external_id
-    }
-    pub fn clear_external_id(&mut self) {
-        self.external_id.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_external_id(&mut self, v: ::protobuf::RepeatedField<ExternalId>) {
-        self.external_id = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_external_id(&mut self) -> &mut ::protobuf::RepeatedField<ExternalId> {
-        &mut self.external_id
-    }
-
-    // Take field
-    pub fn take_external_id(&mut self) -> ::protobuf::RepeatedField<ExternalId> {
-        ::std::mem::replace(&mut self.external_id, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Restriction restriction = 11;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AudioFile file = 12;
-
-    pub fn get_file(&self) -> &[AudioFile] {
-        &self.file
-    }
-    pub fn clear_file(&mut self) {
-        self.file.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_file(&mut self, v: ::protobuf::RepeatedField<AudioFile>) {
-        self.file = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_file(&mut self) -> &mut ::protobuf::RepeatedField<AudioFile> {
-        &mut self.file
-    }
-
-    // Take field
-    pub fn take_file(&mut self) -> ::protobuf::RepeatedField<AudioFile> {
-        ::std::mem::replace(&mut self.file, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Track alternative = 13;
-
-    pub fn get_alternative(&self) -> &[Track] {
-        &self.alternative
-    }
-    pub fn clear_alternative(&mut self) {
-        self.alternative.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_alternative(&mut self, v: ::protobuf::RepeatedField<Track>) {
-        self.alternative = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_alternative(&mut self) -> &mut ::protobuf::RepeatedField<Track> {
-        &mut self.alternative
-    }
-
-    // Take field
-    pub fn take_alternative(&mut self) -> ::protobuf::RepeatedField<Track> {
-        ::std::mem::replace(&mut self.alternative, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .SalePeriod sale_period = 14;
-
-    pub fn get_sale_period(&self) -> &[SalePeriod] {
-        &self.sale_period
-    }
-    pub fn clear_sale_period(&mut self) {
-        self.sale_period.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sale_period(&mut self, v: ::protobuf::RepeatedField<SalePeriod>) {
-        self.sale_period = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_sale_period(&mut self) -> &mut ::protobuf::RepeatedField<SalePeriod> {
-        &mut self.sale_period
-    }
-
-    // Take field
-    pub fn take_sale_period(&mut self) -> ::protobuf::RepeatedField<SalePeriod> {
-        ::std::mem::replace(&mut self.sale_period, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AudioFile preview = 15;
-
-    pub fn get_preview(&self) -> &[AudioFile] {
-        &self.preview
-    }
-    pub fn clear_preview(&mut self) {
-        self.preview.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_preview(&mut self, v: ::protobuf::RepeatedField<AudioFile>) {
-        self.preview = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_preview(&mut self) -> &mut ::protobuf::RepeatedField<AudioFile> {
-        &mut self.preview
-    }
-
-    // Take field
-    pub fn take_preview(&mut self) -> ::protobuf::RepeatedField<AudioFile> {
-        ::std::mem::replace(&mut self.preview, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Track {
-    fn is_initialized(&self) -> bool {
-        for v in &self.album {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.artist {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.external_id {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.file {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.alternative {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.sale_period {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.preview {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.album)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.artist)?;
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.number = ::std::option::Option::Some(tmp);
-                }
-                6 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.disc_number = ::std::option::Option::Some(tmp);
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.duration = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.popularity = ::std::option::Option::Some(tmp);
-                }
-                9 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.explicit = ::std::option::Option::Some(tmp);
-                }
-                10 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.external_id,
-                    )?;
-                }
-                11 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                12 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.file)?;
-                }
-                13 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.alternative,
-                    )?;
-                }
-                14 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.sale_period,
-                    )?;
-                }
-                15 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.preview)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.album.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.artist {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.number {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(5, v);
-        }
-        if let Some(v) = self.disc_number {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(6, v);
-        }
-        if let Some(v) = self.duration {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(7, v);
-        }
-        if let Some(v) = self.popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(8, v);
-        }
-        if let Some(v) = self.explicit {
-            my_size += 2;
-        }
-        for value in &self.external_id {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.file {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.alternative {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.sale_period {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.preview {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.album.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.artist {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.number {
-            os.write_sint32(5, v)?;
-        }
-        if let Some(v) = self.disc_number {
-            os.write_sint32(6, v)?;
-        }
-        if let Some(v) = self.duration {
-            os.write_sint32(7, v)?;
-        }
-        if let Some(v) = self.popularity {
-            os.write_sint32(8, v)?;
-        }
-        if let Some(v) = self.explicit {
-            os.write_bool(9, v)?;
-        }
-        for v in &self.external_id {
-            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.restriction {
-            os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.file {
-            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.alternative {
-            os.write_tag(13, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.sale_period {
-            os.write_tag(14, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.preview {
-            os.write_tag(15, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Track {
-        Track::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Track| &m.gid, |m: &mut Track| &mut m.gid),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("name", |m: &Track| &m.name, |m: &mut Track| &mut m.name),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Album>,
-                    >(
-                        "album", |m: &Track| &m.album, |m: &mut Track| &mut m.album
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Artist>,
-                    >(
-                        "artist",
-                        |m: &Track| &m.artist,
-                        |m: &mut Track| &mut m.artist,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "number",
-                    |m: &Track| &m.number,
-                    |m: &mut Track| &mut m.number,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "disc_number",
-                    |m: &Track| &m.disc_number,
-                    |m: &mut Track| &mut m.disc_number,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "duration",
-                    |m: &Track| &m.duration,
-                    |m: &mut Track| &mut m.duration,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "popularity",
-                    |m: &Track| &m.popularity,
-                    |m: &mut Track| &mut m.popularity,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "explicit",
-                    |m: &Track| &m.explicit,
-                    |m: &mut Track| &mut m.explicit,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ExternalId>,
-                    >(
-                        "external_id",
-                        |m: &Track| &m.external_id,
-                        |m: &mut Track| &mut m.external_id,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &Track| &m.restriction,
-                        |m: &mut Track| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AudioFile>,
-                    >("file", |m: &Track| &m.file, |m: &mut Track| &mut m.file),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Track>,
-                    >(
-                        "alternative",
-                        |m: &Track| &m.alternative,
-                        |m: &mut Track| &mut m.alternative,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<SalePeriod>,
-                    >(
-                        "sale_period",
-                        |m: &Track| &m.sale_period,
-                        |m: &mut Track| &mut m.sale_period,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AudioFile>,
-                    >(
-                        "preview",
-                        |m: &Track| &m.preview,
-                        |m: &mut Track| &mut m.preview,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Track>(
-                    "Track",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Track {
-        static mut instance: ::protobuf::lazy::Lazy<Track> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Track::new) }
-    }
-}
-
-impl ::protobuf::Clear for Track {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.name.clear();
-        self.album.clear();
-        self.artist.clear();
-        self.number = ::std::option::Option::None;
-        self.disc_number = ::std::option::Option::None;
-        self.duration = ::std::option::Option::None;
-        self.popularity = ::std::option::Option::None;
-        self.explicit = ::std::option::Option::None;
-        self.external_id.clear();
-        self.restriction.clear();
-        self.file.clear();
-        self.alternative.clear();
-        self.sale_period.clear();
-        self.preview.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Track {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Track {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Image {
-    // message fields
-    file_id: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    size: ::std::option::Option<Image_Size>,
-    width: ::std::option::Option<i32>,
-    height: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Image {
-    fn default() -> &'a Image {
-        <Image as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Image {
-    pub fn new() -> Image {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes file_id = 1;
-
-    pub fn get_file_id(&self) -> &[u8] {
-        match self.file_id.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_file_id(&mut self) {
-        self.file_id.clear();
-    }
-
-    pub fn has_file_id(&self) -> bool {
-        self.file_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_file_id(&mut self, v: ::std::vec::Vec<u8>) {
-        self.file_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_file_id(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.file_id.is_none() {
-            self.file_id.set_default();
-        }
-        self.file_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_file_id(&mut self) -> ::std::vec::Vec<u8> {
-        self.file_id
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .Image.Size size = 2;
-
-    pub fn get_size(&self) -> Image_Size {
-        self.size.unwrap_or(Image_Size::DEFAULT)
-    }
-    pub fn clear_size(&mut self) {
-        self.size = ::std::option::Option::None;
-    }
-
-    pub fn has_size(&self) -> bool {
-        self.size.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_size(&mut self, v: Image_Size) {
-        self.size = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 width = 3;
-
-    pub fn get_width(&self) -> i32 {
-        self.width.unwrap_or(0)
-    }
-    pub fn clear_width(&mut self) {
-        self.width = ::std::option::Option::None;
-    }
-
-    pub fn has_width(&self) -> bool {
-        self.width.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_width(&mut self, v: i32) {
-        self.width = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 height = 4;
-
-    pub fn get_height(&self) -> i32 {
-        self.height.unwrap_or(0)
-    }
-    pub fn clear_height(&mut self) {
-        self.height = ::std::option::Option::None;
-    }
-
-    pub fn has_height(&self) -> bool {
-        self.height.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_height(&mut self, v: i32) {
-        self.height = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Image {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.file_id)?;
-                }
-                2 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.size,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.width = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.height = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.file_id.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(v) = self.size {
-            my_size += ::protobuf::rt::enum_size(2, v);
-        }
-        if let Some(v) = self.width {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(3, v);
-        }
-        if let Some(v) = self.height {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(4, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.file_id.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(v) = self.size {
-            os.write_enum(2, v.value())?;
-        }
-        if let Some(v) = self.width {
-            os.write_sint32(3, v)?;
-        }
-        if let Some(v) = self.height {
-            os.write_sint32(4, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Image {
-        Image::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "file_id",
-                        |m: &Image| &m.file_id,
-                        |m: &mut Image| &mut m.file_id,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Image_Size>,
-                >(
-                    "size", |m: &Image| &m.size, |m: &mut Image| &mut m.size
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "width",
-                    |m: &Image| &m.width,
-                    |m: &mut Image| &mut m.width,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "height",
-                    |m: &Image| &m.height,
-                    |m: &mut Image| &mut m.height,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Image>(
-                    "Image",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Image {
-        static mut instance: ::protobuf::lazy::Lazy<Image> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Image::new) }
-    }
-}
-
-impl ::protobuf::Clear for Image {
-    fn clear(&mut self) {
-        self.file_id.clear();
-        self.size = ::std::option::Option::None;
-        self.width = ::std::option::Option::None;
-        self.height = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Image {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Image {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Image_Size {
-    DEFAULT = 0,
-    SMALL = 1,
-    LARGE = 2,
-    XLARGE = 3,
-}
-
-impl ::protobuf::ProtobufEnum for Image_Size {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Image_Size> {
-        match value {
-            0 => ::std::option::Option::Some(Image_Size::DEFAULT),
-            1 => ::std::option::Option::Some(Image_Size::SMALL),
-            2 => ::std::option::Option::Some(Image_Size::LARGE),
-            3 => ::std::option::Option::Some(Image_Size::XLARGE),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Image_Size] = &[
-            Image_Size::DEFAULT,
-            Image_Size::SMALL,
-            Image_Size::LARGE,
-            Image_Size::XLARGE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Image_Size>(
-                    "Image.Size",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Image_Size {}
-
-impl ::std::default::Default for Image_Size {
-    fn default() -> Self {
-        Image_Size::DEFAULT
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Image_Size {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ImageGroup {
-    // message fields
-    image: ::protobuf::RepeatedField<Image>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ImageGroup {
-    fn default() -> &'a ImageGroup {
-        <ImageGroup as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ImageGroup {
-    pub fn new() -> ImageGroup {
-        ::std::default::Default::default()
-    }
-
-    // repeated .Image image = 1;
-
-    pub fn get_image(&self) -> &[Image] {
-        &self.image
-    }
-    pub fn clear_image(&mut self) {
-        self.image.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_image(&mut self, v: ::protobuf::RepeatedField<Image>) {
-        self.image = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_image(&mut self) -> &mut ::protobuf::RepeatedField<Image> {
-        &mut self.image
-    }
-
-    // Take field
-    pub fn take_image(&mut self) -> ::protobuf::RepeatedField<Image> {
-        ::std::mem::replace(&mut self.image, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for ImageGroup {
-    fn is_initialized(&self) -> bool {
-        for v in &self.image {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.image)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.image {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.image {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ImageGroup {
-        ImageGroup::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Image>,
-                    >(
-                        "image",
-                        |m: &ImageGroup| &m.image,
-                        |m: &mut ImageGroup| &mut m.image,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ImageGroup>(
-                    "ImageGroup",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ImageGroup {
-        static mut instance: ::protobuf::lazy::Lazy<ImageGroup> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ImageGroup::new) }
-    }
-}
-
-impl ::protobuf::Clear for ImageGroup {
-    fn clear(&mut self) {
-        self.image.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ImageGroup {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ImageGroup {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Biography {
-    // message fields
-    text: ::protobuf::SingularField<::std::string::String>,
-    portrait: ::protobuf::RepeatedField<Image>,
-    portrait_group: ::protobuf::RepeatedField<ImageGroup>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Biography {
-    fn default() -> &'a Biography {
-        <Biography as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Biography {
-    pub fn new() -> Biography {
-        ::std::default::Default::default()
-    }
-
-    // optional string text = 1;
-
-    pub fn get_text(&self) -> &str {
-        match self.text.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_text(&mut self) {
-        self.text.clear();
-    }
-
-    pub fn has_text(&self) -> bool {
-        self.text.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_text(&mut self, v: ::std::string::String) {
-        self.text = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_text(&mut self) -> &mut ::std::string::String {
-        if self.text.is_none() {
-            self.text.set_default();
-        }
-        self.text.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_text(&mut self) -> ::std::string::String {
-        self.text
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Image portrait = 2;
-
-    pub fn get_portrait(&self) -> &[Image] {
-        &self.portrait
-    }
-    pub fn clear_portrait(&mut self) {
-        self.portrait.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_portrait(&mut self, v: ::protobuf::RepeatedField<Image>) {
-        self.portrait = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_portrait(&mut self) -> &mut ::protobuf::RepeatedField<Image> {
-        &mut self.portrait
-    }
-
-    // Take field
-    pub fn take_portrait(&mut self) -> ::protobuf::RepeatedField<Image> {
-        ::std::mem::replace(&mut self.portrait, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ImageGroup portrait_group = 3;
-
-    pub fn get_portrait_group(&self) -> &[ImageGroup] {
-        &self.portrait_group
-    }
-    pub fn clear_portrait_group(&mut self) {
-        self.portrait_group.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_portrait_group(&mut self, v: ::protobuf::RepeatedField<ImageGroup>) {
-        self.portrait_group = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_portrait_group(&mut self) -> &mut ::protobuf::RepeatedField<ImageGroup> {
-        &mut self.portrait_group
-    }
-
-    // Take field
-    pub fn take_portrait_group(&mut self) -> ::protobuf::RepeatedField<ImageGroup> {
-        ::std::mem::replace(&mut self.portrait_group, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Biography {
-    fn is_initialized(&self) -> bool {
-        for v in &self.portrait {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.portrait_group {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.text)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.portrait)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.portrait_group,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.text.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        for value in &self.portrait {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.portrait_group {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.text.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        for v in &self.portrait {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.portrait_group {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Biography {
-        Biography::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "text",
-                        |m: &Biography| &m.text,
-                        |m: &mut Biography| &mut m.text,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Image>,
-                    >(
-                        "portrait",
-                        |m: &Biography| &m.portrait,
-                        |m: &mut Biography| &mut m.portrait,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "portrait_group",
-                        |m: &Biography| &m.portrait_group,
-                        |m: &mut Biography| &mut m.portrait_group,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Biography>(
-                    "Biography",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Biography {
-        static mut instance: ::protobuf::lazy::Lazy<Biography> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Biography::new) }
-    }
-}
-
-impl ::protobuf::Clear for Biography {
-    fn clear(&mut self) {
-        self.text.clear();
-        self.portrait.clear();
-        self.portrait_group.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Biography {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Biography {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Disc {
-    // message fields
-    number: ::std::option::Option<i32>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    track: ::protobuf::RepeatedField<Track>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Disc {
-    fn default() -> &'a Disc {
-        <Disc as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Disc {
-    pub fn new() -> Disc {
-        ::std::default::Default::default()
-    }
-
-    // optional sint32 number = 1;
-
-    pub fn get_number(&self) -> i32 {
-        self.number.unwrap_or(0)
-    }
-    pub fn clear_number(&mut self) {
-        self.number = ::std::option::Option::None;
-    }
-
-    pub fn has_number(&self) -> bool {
-        self.number.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_number(&mut self, v: i32) {
-        self.number = ::std::option::Option::Some(v);
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Track track = 3;
-
-    pub fn get_track(&self) -> &[Track] {
-        &self.track
-    }
-    pub fn clear_track(&mut self) {
-        self.track.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_track(&mut self, v: ::protobuf::RepeatedField<Track>) {
-        self.track = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_track(&mut self) -> &mut ::protobuf::RepeatedField<Track> {
-        &mut self.track
-    }
-
-    // Take field
-    pub fn take_track(&mut self) -> ::protobuf::RepeatedField<Track> {
-        ::std::mem::replace(&mut self.track, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Disc {
-    fn is_initialized(&self) -> bool {
-        for v in &self.track {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.number = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.track)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.number {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(1, v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        for value in &self.track {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.number {
-            os.write_sint32(1, v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        for v in &self.track {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Disc {
-        Disc::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "number",
-                    |m: &Disc| &m.number,
-                    |m: &mut Disc| &mut m.number,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("name", |m: &Disc| &m.name, |m: &mut Disc| &mut m.name),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Track>,
-                    >("track", |m: &Disc| &m.track, |m: &mut Disc| &mut m.track),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Disc>(
-                    "Disc",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Disc {
-        static mut instance: ::protobuf::lazy::Lazy<Disc> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Disc::new) }
-    }
-}
-
-impl ::protobuf::Clear for Disc {
-    fn clear(&mut self) {
-        self.number = ::std::option::Option::None;
-        self.name.clear();
-        self.track.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Disc {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Disc {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Copyright {
-    // message fields
-    typ: ::std::option::Option<Copyright_Type>,
-    text: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Copyright {
-    fn default() -> &'a Copyright {
-        <Copyright as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Copyright {
-    pub fn new() -> Copyright {
-        ::std::default::Default::default()
-    }
-
-    // optional .Copyright.Type typ = 1;
-
-    pub fn get_typ(&self) -> Copyright_Type {
-        self.typ.unwrap_or(Copyright_Type::P)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: Copyright_Type) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // optional string text = 2;
-
-    pub fn get_text(&self) -> &str {
-        match self.text.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_text(&mut self) {
-        self.text.clear();
-    }
-
-    pub fn has_text(&self) -> bool {
-        self.text.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_text(&mut self, v: ::std::string::String) {
-        self.text = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_text(&mut self) -> &mut ::std::string::String {
-        if self.text.is_none() {
-            self.text.set_default();
-        }
-        self.text.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_text(&mut self) -> ::std::string::String {
-        self.text
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for Copyright {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.text)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        if let Some(ref v) = self.text.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.typ {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(ref v) = self.text.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Copyright {
-        Copyright::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Copyright_Type>,
-                >(
-                    "typ",
-                    |m: &Copyright| &m.typ,
-                    |m: &mut Copyright| &mut m.typ,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "text",
-                        |m: &Copyright| &m.text,
-                        |m: &mut Copyright| &mut m.text,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Copyright>(
-                    "Copyright",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Copyright {
-        static mut instance: ::protobuf::lazy::Lazy<Copyright> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Copyright::new) }
-    }
-}
-
-impl ::protobuf::Clear for Copyright {
-    fn clear(&mut self) {
-        self.typ = ::std::option::Option::None;
-        self.text.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Copyright {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Copyright {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Copyright_Type {
-    P = 0,
-    C = 1,
-}
-
-impl ::protobuf::ProtobufEnum for Copyright_Type {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Copyright_Type> {
-        match value {
-            0 => ::std::option::Option::Some(Copyright_Type::P),
-            1 => ::std::option::Option::Some(Copyright_Type::C),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Copyright_Type] = &[Copyright_Type::P, Copyright_Type::C];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Copyright_Type>(
-                    "Copyright.Type",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Copyright_Type {}
-
-impl ::std::default::Default for Copyright_Type {
-    fn default() -> Self {
-        Copyright_Type::P
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Copyright_Type {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Restriction {
-    // message fields
-    catalogue: ::std::vec::Vec<Restriction_Catalogue>,
-    countries_allowed: ::protobuf::SingularField<::std::string::String>,
-    countries_forbidden: ::protobuf::SingularField<::std::string::String>,
-    typ: ::std::option::Option<Restriction_Type>,
-    catalogue_str: ::protobuf::RepeatedField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Restriction {
-    fn default() -> &'a Restriction {
-        <Restriction as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Restriction {
-    pub fn new() -> Restriction {
-        ::std::default::Default::default()
-    }
-
-    // repeated .Restriction.Catalogue catalogue = 1;
-
-    pub fn get_catalogue(&self) -> &[Restriction_Catalogue] {
-        &self.catalogue
-    }
-    pub fn clear_catalogue(&mut self) {
-        self.catalogue.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_catalogue(&mut self, v: ::std::vec::Vec<Restriction_Catalogue>) {
-        self.catalogue = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_catalogue(&mut self) -> &mut ::std::vec::Vec<Restriction_Catalogue> {
-        &mut self.catalogue
-    }
-
-    // Take field
-    pub fn take_catalogue(&mut self) -> ::std::vec::Vec<Restriction_Catalogue> {
-        ::std::mem::replace(&mut self.catalogue, ::std::vec::Vec::new())
-    }
-
-    // optional string countries_allowed = 2;
-
-    pub fn get_countries_allowed(&self) -> &str {
-        match self.countries_allowed.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_countries_allowed(&mut self) {
-        self.countries_allowed.clear();
-    }
-
-    pub fn has_countries_allowed(&self) -> bool {
-        self.countries_allowed.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_countries_allowed(&mut self, v: ::std::string::String) {
-        self.countries_allowed = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_countries_allowed(&mut self) -> &mut ::std::string::String {
-        if self.countries_allowed.is_none() {
-            self.countries_allowed.set_default();
-        }
-        self.countries_allowed.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_countries_allowed(&mut self) -> ::std::string::String {
-        self.countries_allowed
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string countries_forbidden = 3;
-
-    pub fn get_countries_forbidden(&self) -> &str {
-        match self.countries_forbidden.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_countries_forbidden(&mut self) {
-        self.countries_forbidden.clear();
-    }
-
-    pub fn has_countries_forbidden(&self) -> bool {
-        self.countries_forbidden.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_countries_forbidden(&mut self, v: ::std::string::String) {
-        self.countries_forbidden = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_countries_forbidden(&mut self) -> &mut ::std::string::String {
-        if self.countries_forbidden.is_none() {
-            self.countries_forbidden.set_default();
-        }
-        self.countries_forbidden.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_countries_forbidden(&mut self) -> ::std::string::String {
-        self.countries_forbidden
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .Restriction.Type typ = 4;
-
-    pub fn get_typ(&self) -> Restriction_Type {
-        self.typ.unwrap_or(Restriction_Type::STREAMING)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: Restriction_Type) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // repeated string catalogue_str = 5;
-
-    pub fn get_catalogue_str(&self) -> &[::std::string::String] {
-        &self.catalogue_str
-    }
-    pub fn clear_catalogue_str(&mut self) {
-        self.catalogue_str.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_catalogue_str(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.catalogue_str = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_catalogue_str(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.catalogue_str
-    }
-
-    // Take field
-    pub fn take_catalogue_str(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.catalogue_str, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Restriction {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.catalogue,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.countries_allowed,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.countries_forbidden,
-                    )?;
-                }
-                4 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    4,
-                    &mut self.unknown_fields,
-                )?,
-                5 => {
-                    ::protobuf::rt::read_repeated_string_into(
-                        wire_type,
-                        is,
-                        &mut self.catalogue_str,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.catalogue {
-            my_size += ::protobuf::rt::enum_size(1, *value);
-        }
-        if let Some(ref v) = self.countries_allowed.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.countries_forbidden.as_ref() {
-            my_size += ::protobuf::rt::string_size(3, &v);
-        }
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(4, v);
-        }
-        for value in &self.catalogue_str {
-            my_size += ::protobuf::rt::string_size(5, &value);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.catalogue {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(ref v) = self.countries_allowed.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.countries_forbidden.as_ref() {
-            os.write_string(3, &v)?;
-        }
-        if let Some(v) = self.typ {
-            os.write_enum(4, v.value())?;
-        }
-        for v in &self.catalogue_str {
-            os.write_string(5, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Restriction {
-        Restriction::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Restriction_Catalogue>,
-                >(
-                    "catalogue",
-                    |m: &Restriction| &m.catalogue,
-                    |m: &mut Restriction| &mut m.catalogue,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "countries_allowed",
-                        |m: &Restriction| &m.countries_allowed,
-                        |m: &mut Restriction| &mut m.countries_allowed,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "countries_forbidden",
-                        |m: &Restriction| &m.countries_forbidden,
-                        |m: &mut Restriction| &mut m.countries_forbidden,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Restriction_Type>,
-                >(
-                    "typ",
-                    |m: &Restriction| &m.typ,
-                    |m: &mut Restriction| &mut m.typ,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "catalogue_str",
-                        |m: &Restriction| &m.catalogue_str,
-                        |m: &mut Restriction| &mut m.catalogue_str,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Restriction>(
-                    "Restriction",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Restriction {
-        static mut instance: ::protobuf::lazy::Lazy<Restriction> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Restriction::new) }
-    }
-}
-
-impl ::protobuf::Clear for Restriction {
-    fn clear(&mut self) {
-        self.catalogue.clear();
-        self.countries_allowed.clear();
-        self.countries_forbidden.clear();
-        self.typ = ::std::option::Option::None;
-        self.catalogue_str.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Restriction {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Restriction {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Restriction_Catalogue {
-    AD = 0,
-    SUBSCRIPTION = 1,
-    CATALOGUE_ALL = 2,
-    SHUFFLE = 3,
-    COMMERCIAL = 4,
-}
-
-impl ::protobuf::ProtobufEnum for Restriction_Catalogue {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Restriction_Catalogue> {
-        match value {
-            0 => ::std::option::Option::Some(Restriction_Catalogue::AD),
-            1 => ::std::option::Option::Some(Restriction_Catalogue::SUBSCRIPTION),
-            2 => ::std::option::Option::Some(Restriction_Catalogue::CATALOGUE_ALL),
-            3 => ::std::option::Option::Some(Restriction_Catalogue::SHUFFLE),
-            4 => ::std::option::Option::Some(Restriction_Catalogue::COMMERCIAL),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Restriction_Catalogue] = &[
-            Restriction_Catalogue::AD,
-            Restriction_Catalogue::SUBSCRIPTION,
-            Restriction_Catalogue::CATALOGUE_ALL,
-            Restriction_Catalogue::SHUFFLE,
-            Restriction_Catalogue::COMMERCIAL,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Restriction_Catalogue>(
-                    "Restriction.Catalogue",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Restriction_Catalogue {}
-
-impl ::std::default::Default for Restriction_Catalogue {
-    fn default() -> Self {
-        Restriction_Catalogue::AD
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Restriction_Catalogue {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Restriction_Type {
-    STREAMING = 0,
-}
-
-impl ::protobuf::ProtobufEnum for Restriction_Type {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Restriction_Type> {
-        match value {
-            0 => ::std::option::Option::Some(Restriction_Type::STREAMING),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Restriction_Type] = &[Restriction_Type::STREAMING];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Restriction_Type>(
-                    "Restriction.Type",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Restriction_Type {}
-
-impl ::std::default::Default for Restriction_Type {
-    fn default() -> Self {
-        Restriction_Type::STREAMING
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Restriction_Type {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Availability {
-    // message fields
-    catalogue_str: ::protobuf::RepeatedField<::std::string::String>,
-    start: ::protobuf::SingularPtrField<Date>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Availability {
-    fn default() -> &'a Availability {
-        <Availability as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Availability {
-    pub fn new() -> Availability {
-        ::std::default::Default::default()
-    }
-
-    // repeated string catalogue_str = 1;
-
-    pub fn get_catalogue_str(&self) -> &[::std::string::String] {
-        &self.catalogue_str
-    }
-    pub fn clear_catalogue_str(&mut self) {
-        self.catalogue_str.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_catalogue_str(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.catalogue_str = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_catalogue_str(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.catalogue_str
-    }
-
-    // Take field
-    pub fn take_catalogue_str(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.catalogue_str, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Date start = 2;
-
-    pub fn get_start(&self) -> &Date {
-        self.start
-            .as_ref()
-            .unwrap_or_else(|| Date::default_instance())
-    }
-    pub fn clear_start(&mut self) {
-        self.start.clear();
-    }
-
-    pub fn has_start(&self) -> bool {
-        self.start.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_start(&mut self, v: Date) {
-        self.start = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_start(&mut self) -> &mut Date {
-        if self.start.is_none() {
-            self.start.set_default();
-        }
-        self.start.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_start(&mut self) -> Date {
-        self.start.take().unwrap_or_else(|| Date::new())
-    }
-}
-
-impl ::protobuf::Message for Availability {
-    fn is_initialized(&self) -> bool {
-        for v in &self.start {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_string_into(
-                        wire_type,
-                        is,
-                        &mut self.catalogue_str,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.start)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.catalogue_str {
-            my_size += ::protobuf::rt::string_size(1, &value);
-        }
-        if let Some(ref v) = self.start.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.catalogue_str {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.start.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Availability {
-        Availability::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "catalogue_str",
-                        |m: &Availability| &m.catalogue_str,
-                        |m: &mut Availability| &mut m.catalogue_str,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Date>,
-                    >(
-                        "start",
-                        |m: &Availability| &m.start,
-                        |m: &mut Availability| &mut m.start,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Availability>(
-                    "Availability",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Availability {
-        static mut instance: ::protobuf::lazy::Lazy<Availability> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Availability::new) }
-    }
-}
-
-impl ::protobuf::Clear for Availability {
-    fn clear(&mut self) {
-        self.catalogue_str.clear();
-        self.start.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Availability {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Availability {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct SalePeriod {
-    // message fields
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    start: ::protobuf::SingularPtrField<Date>,
-    end: ::protobuf::SingularPtrField<Date>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a SalePeriod {
-    fn default() -> &'a SalePeriod {
-        <SalePeriod as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl SalePeriod {
-    pub fn new() -> SalePeriod {
-        ::std::default::Default::default()
-    }
-
-    // repeated .Restriction restriction = 1;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Date start = 2;
-
-    pub fn get_start(&self) -> &Date {
-        self.start
-            .as_ref()
-            .unwrap_or_else(|| Date::default_instance())
-    }
-    pub fn clear_start(&mut self) {
-        self.start.clear();
-    }
-
-    pub fn has_start(&self) -> bool {
-        self.start.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_start(&mut self, v: Date) {
-        self.start = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_start(&mut self) -> &mut Date {
-        if self.start.is_none() {
-            self.start.set_default();
-        }
-        self.start.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_start(&mut self) -> Date {
-        self.start.take().unwrap_or_else(|| Date::new())
-    }
-
-    // optional .Date end = 3;
-
-    pub fn get_end(&self) -> &Date {
-        self.end
-            .as_ref()
-            .unwrap_or_else(|| Date::default_instance())
-    }
-    pub fn clear_end(&mut self) {
-        self.end.clear();
-    }
-
-    pub fn has_end(&self) -> bool {
-        self.end.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_end(&mut self, v: Date) {
-        self.end = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_end(&mut self) -> &mut Date {
-        if self.end.is_none() {
-            self.end.set_default();
-        }
-        self.end.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_end(&mut self) -> Date {
-        self.end.take().unwrap_or_else(|| Date::new())
-    }
-}
-
-impl ::protobuf::Message for SalePeriod {
-    fn is_initialized(&self) -> bool {
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.start {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.end {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.start)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.end)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.start.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.end.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.restriction {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.start.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.end.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> SalePeriod {
-        SalePeriod::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &SalePeriod| &m.restriction,
-                        |m: &mut SalePeriod| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Date>,
-                    >(
-                        "start",
-                        |m: &SalePeriod| &m.start,
-                        |m: &mut SalePeriod| &mut m.start,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Date>,
-                    >(
-                        "end",
-                        |m: &SalePeriod| &m.end,
-                        |m: &mut SalePeriod| &mut m.end,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<SalePeriod>(
-                    "SalePeriod",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static SalePeriod {
-        static mut instance: ::protobuf::lazy::Lazy<SalePeriod> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(SalePeriod::new) }
-    }
-}
-
-impl ::protobuf::Clear for SalePeriod {
-    fn clear(&mut self) {
-        self.restriction.clear();
-        self.start.clear();
-        self.end.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for SalePeriod {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for SalePeriod {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ExternalId {
-    // message fields
-    typ: ::protobuf::SingularField<::std::string::String>,
-    id: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ExternalId {
-    fn default() -> &'a ExternalId {
-        <ExternalId as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ExternalId {
-    pub fn new() -> ExternalId {
-        ::std::default::Default::default()
-    }
-
-    // optional string typ = 1;
-
-    pub fn get_typ(&self) -> &str {
-        match self.typ.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ.clear();
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: ::std::string::String) {
-        self.typ = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_typ(&mut self) -> &mut ::std::string::String {
-        if self.typ.is_none() {
-            self.typ.set_default();
-        }
-        self.typ.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_typ(&mut self) -> ::std::string::String {
-        self.typ
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string id = 2;
-
-    pub fn get_id(&self) -> &str {
-        match self.id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_id(&mut self) {
-        self.id.clear();
-    }
-
-    pub fn has_id(&self) -> bool {
-        self.id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_id(&mut self, v: ::std::string::String) {
-        self.id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_id(&mut self) -> &mut ::std::string::String {
-        if self.id.is_none() {
-            self.id.set_default();
-        }
-        self.id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_id(&mut self) -> ::std::string::String {
-        self.id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for ExternalId {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.typ)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.typ.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.id.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.typ.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.id.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ExternalId {
-        ExternalId::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "typ",
-                        |m: &ExternalId| &m.typ,
-                        |m: &mut ExternalId| &mut m.typ,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "id", |m: &ExternalId| &m.id, |m: &mut ExternalId| &mut m.id
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ExternalId>(
-                    "ExternalId",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ExternalId {
-        static mut instance: ::protobuf::lazy::Lazy<ExternalId> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ExternalId::new) }
-    }
-}
-
-impl ::protobuf::Clear for ExternalId {
-    fn clear(&mut self) {
-        self.typ.clear();
-        self.id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ExternalId {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ExternalId {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct AudioFile {
-    // message fields
-    file_id: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    format: ::std::option::Option<AudioFile_Format>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a AudioFile {
-    fn default() -> &'a AudioFile {
-        <AudioFile as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl AudioFile {
-    pub fn new() -> AudioFile {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes file_id = 1;
-
-    pub fn get_file_id(&self) -> &[u8] {
-        match self.file_id.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_file_id(&mut self) {
-        self.file_id.clear();
-    }
-
-    pub fn has_file_id(&self) -> bool {
-        self.file_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_file_id(&mut self, v: ::std::vec::Vec<u8>) {
-        self.file_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_file_id(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.file_id.is_none() {
-            self.file_id.set_default();
-        }
-        self.file_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_file_id(&mut self) -> ::std::vec::Vec<u8> {
-        self.file_id
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .AudioFile.Format format = 2;
-
-    pub fn get_format(&self) -> AudioFile_Format {
-        self.format.unwrap_or(AudioFile_Format::OGG_VORBIS_96)
-    }
-    pub fn clear_format(&mut self) {
-        self.format = ::std::option::Option::None;
-    }
-
-    pub fn has_format(&self) -> bool {
-        self.format.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_format(&mut self, v: AudioFile_Format) {
-        self.format = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for AudioFile {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.file_id)?;
-                }
-                2 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.format,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.file_id.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(v) = self.format {
-            my_size += ::protobuf::rt::enum_size(2, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.file_id.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(v) = self.format {
-            os.write_enum(2, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> AudioFile {
-        AudioFile::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "file_id",
-                        |m: &AudioFile| &m.file_id,
-                        |m: &mut AudioFile| &mut m.file_id,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<AudioFile_Format>,
-                >(
-                    "format",
-                    |m: &AudioFile| &m.format,
-                    |m: &mut AudioFile| &mut m.format,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<AudioFile>(
-                    "AudioFile",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static AudioFile {
-        static mut instance: ::protobuf::lazy::Lazy<AudioFile> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(AudioFile::new) }
-    }
-}
-
-impl ::protobuf::Clear for AudioFile {
-    fn clear(&mut self) {
-        self.file_id.clear();
-        self.format = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for AudioFile {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AudioFile {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum AudioFile_Format {
-    OGG_VORBIS_96 = 0,
-    OGG_VORBIS_160 = 1,
-    OGG_VORBIS_320 = 2,
-    MP3_256 = 3,
-    MP3_320 = 4,
-    MP3_160 = 5,
-    MP3_96 = 6,
-    MP3_160_ENC = 7,
-    MP4_128_DUAL = 8,
-    OTHER3 = 9,
-    AAC_160 = 10,
-    AAC_320 = 11,
-    MP4_128 = 12,
-    OTHER5 = 13,
-}
-
-impl ::protobuf::ProtobufEnum for AudioFile_Format {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<AudioFile_Format> {
-        match value {
-            0 => ::std::option::Option::Some(AudioFile_Format::OGG_VORBIS_96),
-            1 => ::std::option::Option::Some(AudioFile_Format::OGG_VORBIS_160),
-            2 => ::std::option::Option::Some(AudioFile_Format::OGG_VORBIS_320),
-            3 => ::std::option::Option::Some(AudioFile_Format::MP3_256),
-            4 => ::std::option::Option::Some(AudioFile_Format::MP3_320),
-            5 => ::std::option::Option::Some(AudioFile_Format::MP3_160),
-            6 => ::std::option::Option::Some(AudioFile_Format::MP3_96),
-            7 => ::std::option::Option::Some(AudioFile_Format::MP3_160_ENC),
-            8 => ::std::option::Option::Some(AudioFile_Format::MP4_128_DUAL),
-            9 => ::std::option::Option::Some(AudioFile_Format::OTHER3),
-            10 => ::std::option::Option::Some(AudioFile_Format::AAC_160),
-            11 => ::std::option::Option::Some(AudioFile_Format::AAC_320),
-            12 => ::std::option::Option::Some(AudioFile_Format::MP4_128),
-            13 => ::std::option::Option::Some(AudioFile_Format::OTHER5),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [AudioFile_Format] = &[
-            AudioFile_Format::OGG_VORBIS_96,
-            AudioFile_Format::OGG_VORBIS_160,
-            AudioFile_Format::OGG_VORBIS_320,
-            AudioFile_Format::MP3_256,
-            AudioFile_Format::MP3_320,
-            AudioFile_Format::MP3_160,
-            AudioFile_Format::MP3_96,
-            AudioFile_Format::MP3_160_ENC,
-            AudioFile_Format::MP4_128_DUAL,
-            AudioFile_Format::OTHER3,
-            AudioFile_Format::AAC_160,
-            AudioFile_Format::AAC_320,
-            AudioFile_Format::MP4_128,
-            AudioFile_Format::OTHER5,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<AudioFile_Format>(
-                    "AudioFile.Format",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for AudioFile_Format {}
-
-impl ::std::default::Default for AudioFile_Format {
-    fn default() -> Self {
-        AudioFile_Format::OGG_VORBIS_96
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for AudioFile_Format {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct VideoFile {
-    // message fields
-    file_id: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a VideoFile {
-    fn default() -> &'a VideoFile {
-        <VideoFile as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl VideoFile {
-    pub fn new() -> VideoFile {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes file_id = 1;
-
-    pub fn get_file_id(&self) -> &[u8] {
-        match self.file_id.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_file_id(&mut self) {
-        self.file_id.clear();
-    }
-
-    pub fn has_file_id(&self) -> bool {
-        self.file_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_file_id(&mut self, v: ::std::vec::Vec<u8>) {
-        self.file_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_file_id(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.file_id.is_none() {
-            self.file_id.set_default();
-        }
-        self.file_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_file_id(&mut self) -> ::std::vec::Vec<u8> {
-        self.file_id
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for VideoFile {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.file_id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.file_id.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.file_id.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> VideoFile {
-        VideoFile::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "file_id",
-                        |m: &VideoFile| &m.file_id,
-                        |m: &mut VideoFile| &mut m.file_id,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<VideoFile>(
-                    "VideoFile",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static VideoFile {
-        static mut instance: ::protobuf::lazy::Lazy<VideoFile> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(VideoFile::new) }
-    }
-}
-
-impl ::protobuf::Clear for VideoFile {
-    fn clear(&mut self) {
-        self.file_id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for VideoFile {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for VideoFile {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Show {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    description: ::protobuf::SingularField<::std::string::String>,
-    deprecated_popularity: ::std::option::Option<i32>,
-    publisher: ::protobuf::SingularField<::std::string::String>,
-    language: ::protobuf::SingularField<::std::string::String>,
-    explicit: ::std::option::Option<bool>,
-    covers: ::protobuf::SingularPtrField<ImageGroup>,
-    episode: ::protobuf::RepeatedField<Episode>,
-    copyright: ::protobuf::RepeatedField<Copyright>,
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    keyword: ::protobuf::RepeatedField<::std::string::String>,
-    media_type: ::std::option::Option<Show_MediaType>,
-    consumption_order: ::std::option::Option<Show_ConsumptionOrder>,
-    interpret_restriction_using_geoip: ::std::option::Option<bool>,
-    availability: ::protobuf::RepeatedField<Availability>,
-    country_of_origin: ::protobuf::SingularField<::std::string::String>,
-    categories: ::protobuf::RepeatedField<Category>,
-    passthrough: ::std::option::Option<Show_PassthroughEnum>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Show {
-    fn default() -> &'a Show {
-        <Show as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Show {
-    pub fn new() -> Show {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string description = 64;
-
-    pub fn get_description(&self) -> &str {
-        match self.description.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_description(&mut self) {
-        self.description.clear();
-    }
-
-    pub fn has_description(&self) -> bool {
-        self.description.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_description(&mut self, v: ::std::string::String) {
-        self.description = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_description(&mut self) -> &mut ::std::string::String {
-        if self.description.is_none() {
-            self.description.set_default();
-        }
-        self.description.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_description(&mut self) -> ::std::string::String {
-        self.description
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional sint32 deprecated_popularity = 65;
-
-    pub fn get_deprecated_popularity(&self) -> i32 {
-        self.deprecated_popularity.unwrap_or(0)
-    }
-    pub fn clear_deprecated_popularity(&mut self) {
-        self.deprecated_popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_deprecated_popularity(&self) -> bool {
-        self.deprecated_popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_deprecated_popularity(&mut self, v: i32) {
-        self.deprecated_popularity = ::std::option::Option::Some(v);
-    }
-
-    // optional string publisher = 66;
-
-    pub fn get_publisher(&self) -> &str {
-        match self.publisher.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_publisher(&mut self) {
-        self.publisher.clear();
-    }
-
-    pub fn has_publisher(&self) -> bool {
-        self.publisher.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_publisher(&mut self, v: ::std::string::String) {
-        self.publisher = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_publisher(&mut self) -> &mut ::std::string::String {
-        if self.publisher.is_none() {
-            self.publisher.set_default();
-        }
-        self.publisher.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_publisher(&mut self) -> ::std::string::String {
-        self.publisher
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string language = 67;
-
-    pub fn get_language(&self) -> &str {
-        match self.language.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_language(&mut self) {
-        self.language.clear();
-    }
-
-    pub fn has_language(&self) -> bool {
-        self.language.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_language(&mut self, v: ::std::string::String) {
-        self.language = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_language(&mut self) -> &mut ::std::string::String {
-        if self.language.is_none() {
-            self.language.set_default();
-        }
-        self.language.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_language(&mut self) -> ::std::string::String {
-        self.language
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool explicit = 68;
-
-    pub fn get_explicit(&self) -> bool {
-        self.explicit.unwrap_or(false)
-    }
-    pub fn clear_explicit(&mut self) {
-        self.explicit = ::std::option::Option::None;
-    }
-
-    pub fn has_explicit(&self) -> bool {
-        self.explicit.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_explicit(&mut self, v: bool) {
-        self.explicit = ::std::option::Option::Some(v);
-    }
-
-    // optional .ImageGroup covers = 69;
-
-    pub fn get_covers(&self) -> &ImageGroup {
-        self.covers
-            .as_ref()
-            .unwrap_or_else(|| ImageGroup::default_instance())
-    }
-    pub fn clear_covers(&mut self) {
-        self.covers.clear();
-    }
-
-    pub fn has_covers(&self) -> bool {
-        self.covers.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_covers(&mut self, v: ImageGroup) {
-        self.covers = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_covers(&mut self) -> &mut ImageGroup {
-        if self.covers.is_none() {
-            self.covers.set_default();
-        }
-        self.covers.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_covers(&mut self) -> ImageGroup {
-        self.covers.take().unwrap_or_else(|| ImageGroup::new())
-    }
-
-    // repeated .Episode episode = 70;
-
-    pub fn get_episode(&self) -> &[Episode] {
-        &self.episode
-    }
-    pub fn clear_episode(&mut self) {
-        self.episode.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_episode(&mut self, v: ::protobuf::RepeatedField<Episode>) {
-        self.episode = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_episode(&mut self) -> &mut ::protobuf::RepeatedField<Episode> {
-        &mut self.episode
-    }
-
-    // Take field
-    pub fn take_episode(&mut self) -> ::protobuf::RepeatedField<Episode> {
-        ::std::mem::replace(&mut self.episode, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Copyright copyright = 71;
-
-    pub fn get_copyright(&self) -> &[Copyright] {
-        &self.copyright
-    }
-    pub fn clear_copyright(&mut self) {
-        self.copyright.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_copyright(&mut self, v: ::protobuf::RepeatedField<Copyright>) {
-        self.copyright = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_copyright(&mut self) -> &mut ::protobuf::RepeatedField<Copyright> {
-        &mut self.copyright
-    }
-
-    // Take field
-    pub fn take_copyright(&mut self) -> ::protobuf::RepeatedField<Copyright> {
-        ::std::mem::replace(&mut self.copyright, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Restriction restriction = 72;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated string keyword = 73;
-
-    pub fn get_keyword(&self) -> &[::std::string::String] {
-        &self.keyword
-    }
-    pub fn clear_keyword(&mut self) {
-        self.keyword.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_keyword(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.keyword = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_keyword(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.keyword
-    }
-
-    // Take field
-    pub fn take_keyword(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.keyword, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Show.MediaType media_type = 74;
-
-    pub fn get_media_type(&self) -> Show_MediaType {
-        self.media_type.unwrap_or(Show_MediaType::MIXED)
-    }
-    pub fn clear_media_type(&mut self) {
-        self.media_type = ::std::option::Option::None;
-    }
-
-    pub fn has_media_type(&self) -> bool {
-        self.media_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_media_type(&mut self, v: Show_MediaType) {
-        self.media_type = ::std::option::Option::Some(v);
-    }
-
-    // optional .Show.ConsumptionOrder consumption_order = 75;
-
-    pub fn get_consumption_order(&self) -> Show_ConsumptionOrder {
-        self.consumption_order
-            .unwrap_or(Show_ConsumptionOrder::SEQUENTIAL)
-    }
-    pub fn clear_consumption_order(&mut self) {
-        self.consumption_order = ::std::option::Option::None;
-    }
-
-    pub fn has_consumption_order(&self) -> bool {
-        self.consumption_order.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_consumption_order(&mut self, v: Show_ConsumptionOrder) {
-        self.consumption_order = ::std::option::Option::Some(v);
-    }
-
-    // optional bool interpret_restriction_using_geoip = 76;
-
-    pub fn get_interpret_restriction_using_geoip(&self) -> bool {
-        self.interpret_restriction_using_geoip.unwrap_or(false)
-    }
-    pub fn clear_interpret_restriction_using_geoip(&mut self) {
-        self.interpret_restriction_using_geoip = ::std::option::Option::None;
-    }
-
-    pub fn has_interpret_restriction_using_geoip(&self) -> bool {
-        self.interpret_restriction_using_geoip.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_interpret_restriction_using_geoip(&mut self, v: bool) {
-        self.interpret_restriction_using_geoip = ::std::option::Option::Some(v);
-    }
-
-    // repeated .Availability availability = 78;
-
-    pub fn get_availability(&self) -> &[Availability] {
-        &self.availability
-    }
-    pub fn clear_availability(&mut self) {
-        self.availability.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_availability(&mut self, v: ::protobuf::RepeatedField<Availability>) {
-        self.availability = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_availability(&mut self) -> &mut ::protobuf::RepeatedField<Availability> {
-        &mut self.availability
-    }
-
-    // Take field
-    pub fn take_availability(&mut self) -> ::protobuf::RepeatedField<Availability> {
-        ::std::mem::replace(&mut self.availability, ::protobuf::RepeatedField::new())
-    }
-
-    // optional string country_of_origin = 79;
-
-    pub fn get_country_of_origin(&self) -> &str {
-        match self.country_of_origin.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_country_of_origin(&mut self) {
-        self.country_of_origin.clear();
-    }
-
-    pub fn has_country_of_origin(&self) -> bool {
-        self.country_of_origin.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_country_of_origin(&mut self, v: ::std::string::String) {
-        self.country_of_origin = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_country_of_origin(&mut self) -> &mut ::std::string::String {
-        if self.country_of_origin.is_none() {
-            self.country_of_origin.set_default();
-        }
-        self.country_of_origin.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_country_of_origin(&mut self) -> ::std::string::String {
-        self.country_of_origin
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Category categories = 80;
-
-    pub fn get_categories(&self) -> &[Category] {
-        &self.categories
-    }
-    pub fn clear_categories(&mut self) {
-        self.categories.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_categories(&mut self, v: ::protobuf::RepeatedField<Category>) {
-        self.categories = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_categories(&mut self) -> &mut ::protobuf::RepeatedField<Category> {
-        &mut self.categories
-    }
-
-    // Take field
-    pub fn take_categories(&mut self) -> ::protobuf::RepeatedField<Category> {
-        ::std::mem::replace(&mut self.categories, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Show.PassthroughEnum passthrough = 81;
-
-    pub fn get_passthrough(&self) -> Show_PassthroughEnum {
-        self.passthrough.unwrap_or(Show_PassthroughEnum::UNKNOWN)
-    }
-    pub fn clear_passthrough(&mut self) {
-        self.passthrough = ::std::option::Option::None;
-    }
-
-    pub fn has_passthrough(&self) -> bool {
-        self.passthrough.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_passthrough(&mut self, v: Show_PassthroughEnum) {
-        self.passthrough = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Show {
-    fn is_initialized(&self) -> bool {
-        for v in &self.covers {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.episode {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.copyright {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.availability {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.categories {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                64 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.description,
-                    )?;
-                }
-                65 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.deprecated_popularity = ::std::option::Option::Some(tmp);
-                }
-                66 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.publisher)?;
-                }
-                67 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.language)?;
-                }
-                68 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.explicit = ::std::option::Option::Some(tmp);
-                }
-                69 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.covers)?;
-                }
-                70 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.episode)?;
-                }
-                71 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.copyright)?;
-                }
-                72 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                73 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.keyword)?;
-                }
-                74 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.media_type,
-                    74,
-                    &mut self.unknown_fields,
-                )?,
-                75 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.consumption_order,
-                    75,
-                    &mut self.unknown_fields,
-                )?,
-                76 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.interpret_restriction_using_geoip = ::std::option::Option::Some(tmp);
-                }
-                78 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.availability,
-                    )?;
-                }
-                79 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.country_of_origin,
-                    )?;
-                }
-                80 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.categories,
-                    )?;
-                }
-                81 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.passthrough,
-                    81,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            my_size += ::protobuf::rt::string_size(64, &v);
-        }
-        if let Some(v) = self.deprecated_popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(65, v);
-        }
-        if let Some(ref v) = self.publisher.as_ref() {
-            my_size += ::protobuf::rt::string_size(66, &v);
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            my_size += ::protobuf::rt::string_size(67, &v);
-        }
-        if let Some(v) = self.explicit {
-            my_size += 3;
-        }
-        if let Some(ref v) = self.covers.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.episode {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.copyright {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.keyword {
-            my_size += ::protobuf::rt::string_size(73, &value);
-        }
-        if let Some(v) = self.media_type {
-            my_size += ::protobuf::rt::enum_size(74, v);
-        }
-        if let Some(v) = self.consumption_order {
-            my_size += ::protobuf::rt::enum_size(75, v);
-        }
-        if let Some(v) = self.interpret_restriction_using_geoip {
-            my_size += 3;
-        }
-        for value in &self.availability {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.country_of_origin.as_ref() {
-            my_size += ::protobuf::rt::string_size(79, &v);
-        }
-        for value in &self.categories {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.passthrough {
-            my_size += ::protobuf::rt::enum_size(81, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            os.write_string(64, &v)?;
-        }
-        if let Some(v) = self.deprecated_popularity {
-            os.write_sint32(65, v)?;
-        }
-        if let Some(ref v) = self.publisher.as_ref() {
-            os.write_string(66, &v)?;
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            os.write_string(67, &v)?;
-        }
-        if let Some(v) = self.explicit {
-            os.write_bool(68, v)?;
-        }
-        if let Some(ref v) = self.covers.as_ref() {
-            os.write_tag(69, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.episode {
-            os.write_tag(70, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.copyright {
-            os.write_tag(71, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.restriction {
-            os.write_tag(72, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.keyword {
-            os.write_string(73, &v)?;
-        }
-        if let Some(v) = self.media_type {
-            os.write_enum(74, v.value())?;
-        }
-        if let Some(v) = self.consumption_order {
-            os.write_enum(75, v.value())?;
-        }
-        if let Some(v) = self.interpret_restriction_using_geoip {
-            os.write_bool(76, v)?;
-        }
-        for v in &self.availability {
-            os.write_tag(78, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.country_of_origin.as_ref() {
-            os.write_string(79, &v)?;
-        }
-        for v in &self.categories {
-            os.write_tag(80, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.passthrough {
-            os.write_enum(81, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Show {
-        Show::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Show| &m.gid, |m: &mut Show| &mut m.gid),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("name", |m: &Show| &m.name, |m: &mut Show| &mut m.name),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "description",
-                        |m: &Show| &m.description,
-                        |m: &mut Show| &mut m.description,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "deprecated_popularity",
-                    |m: &Show| &m.deprecated_popularity,
-                    |m: &mut Show| &mut m.deprecated_popularity,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "publisher",
-                        |m: &Show| &m.publisher,
-                        |m: &mut Show| &mut m.publisher,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "language",
-                        |m: &Show| &m.language,
-                        |m: &mut Show| &mut m.language,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "explicit",
-                    |m: &Show| &m.explicit,
-                    |m: &mut Show| &mut m.explicit,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "covers", |m: &Show| &m.covers, |m: &mut Show| &mut m.covers
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Episode>,
-                    >(
-                        "episode",
-                        |m: &Show| &m.episode,
-                        |m: &mut Show| &mut m.episode,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Copyright>,
-                    >(
-                        "copyright",
-                        |m: &Show| &m.copyright,
-                        |m: &mut Show| &mut m.copyright,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &Show| &m.restriction,
-                        |m: &mut Show| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "keyword",
-                        |m: &Show| &m.keyword,
-                        |m: &mut Show| &mut m.keyword,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Show_MediaType>,
-                >(
-                    "media_type",
-                    |m: &Show| &m.media_type,
-                    |m: &mut Show| &mut m.media_type,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Show_ConsumptionOrder>,
-                >(
-                    "consumption_order",
-                    |m: &Show| &m.consumption_order,
-                    |m: &mut Show| &mut m.consumption_order,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "interpret_restriction_using_geoip",
-                    |m: &Show| &m.interpret_restriction_using_geoip,
-                    |m: &mut Show| &mut m.interpret_restriction_using_geoip,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Availability>,
-                    >(
-                        "availability",
-                        |m: &Show| &m.availability,
-                        |m: &mut Show| &mut m.availability,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "country_of_origin",
-                        |m: &Show| &m.country_of_origin,
-                        |m: &mut Show| &mut m.country_of_origin,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Category>,
-                    >(
-                        "categories",
-                        |m: &Show| &m.categories,
-                        |m: &mut Show| &mut m.categories,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Show_PassthroughEnum>,
-                >(
-                    "passthrough",
-                    |m: &Show| &m.passthrough,
-                    |m: &mut Show| &mut m.passthrough,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Show>(
-                    "Show",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Show {
-        static mut instance: ::protobuf::lazy::Lazy<Show> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Show::new) }
-    }
-}
-
-impl ::protobuf::Clear for Show {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.name.clear();
-        self.description.clear();
-        self.deprecated_popularity = ::std::option::Option::None;
-        self.publisher.clear();
-        self.language.clear();
-        self.explicit = ::std::option::Option::None;
-        self.covers.clear();
-        self.episode.clear();
-        self.copyright.clear();
-        self.restriction.clear();
-        self.keyword.clear();
-        self.media_type = ::std::option::Option::None;
-        self.consumption_order = ::std::option::Option::None;
-        self.interpret_restriction_using_geoip = ::std::option::Option::None;
-        self.availability.clear();
-        self.country_of_origin.clear();
-        self.categories.clear();
-        self.passthrough = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Show {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Show {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Show_MediaType {
-    MIXED = 0,
-    AUDIO = 1,
-    VIDEO = 2,
-}
-
-impl ::protobuf::ProtobufEnum for Show_MediaType {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Show_MediaType> {
-        match value {
-            0 => ::std::option::Option::Some(Show_MediaType::MIXED),
-            1 => ::std::option::Option::Some(Show_MediaType::AUDIO),
-            2 => ::std::option::Option::Some(Show_MediaType::VIDEO),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Show_MediaType] = &[
-            Show_MediaType::MIXED,
-            Show_MediaType::AUDIO,
-            Show_MediaType::VIDEO,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Show_MediaType>(
-                    "Show.MediaType",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Show_MediaType {}
-
-impl ::std::default::Default for Show_MediaType {
-    fn default() -> Self {
-        Show_MediaType::MIXED
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Show_MediaType {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Show_ConsumptionOrder {
-    SEQUENTIAL = 1,
-    EPISODIC = 2,
-    RECENT = 3,
-}
-
-impl ::protobuf::ProtobufEnum for Show_ConsumptionOrder {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Show_ConsumptionOrder> {
-        match value {
-            1 => ::std::option::Option::Some(Show_ConsumptionOrder::SEQUENTIAL),
-            2 => ::std::option::Option::Some(Show_ConsumptionOrder::EPISODIC),
-            3 => ::std::option::Option::Some(Show_ConsumptionOrder::RECENT),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Show_ConsumptionOrder] = &[
-            Show_ConsumptionOrder::SEQUENTIAL,
-            Show_ConsumptionOrder::EPISODIC,
-            Show_ConsumptionOrder::RECENT,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Show_ConsumptionOrder>(
-                    "Show.ConsumptionOrder",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Show_ConsumptionOrder {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for Show_ConsumptionOrder {
-    fn default() -> Self {
-        Show_ConsumptionOrder::SEQUENTIAL
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Show_ConsumptionOrder {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Show_PassthroughEnum {
-    UNKNOWN = 0,
-    NONE = 1,
-    ALLOWED = 2,
-}
-
-impl ::protobuf::ProtobufEnum for Show_PassthroughEnum {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Show_PassthroughEnum> {
-        match value {
-            0 => ::std::option::Option::Some(Show_PassthroughEnum::UNKNOWN),
-            1 => ::std::option::Option::Some(Show_PassthroughEnum::NONE),
-            2 => ::std::option::Option::Some(Show_PassthroughEnum::ALLOWED),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Show_PassthroughEnum] = &[
-            Show_PassthroughEnum::UNKNOWN,
-            Show_PassthroughEnum::NONE,
-            Show_PassthroughEnum::ALLOWED,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Show_PassthroughEnum>(
-                    "Show.PassthroughEnum",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Show_PassthroughEnum {}
-
-impl ::std::default::Default for Show_PassthroughEnum {
-    fn default() -> Self {
-        Show_PassthroughEnum::UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Show_PassthroughEnum {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Episode {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    duration: ::std::option::Option<i32>,
-    popularity: ::std::option::Option<i32>,
-    file: ::protobuf::RepeatedField<AudioFile>,
-    description: ::protobuf::SingularField<::std::string::String>,
-    number: ::std::option::Option<i32>,
-    publish_time: ::protobuf::SingularPtrField<Date>,
-    deprecated_popularity: ::std::option::Option<i32>,
-    covers: ::protobuf::SingularPtrField<ImageGroup>,
-    language: ::protobuf::SingularField<::std::string::String>,
-    explicit: ::std::option::Option<bool>,
-    show: ::protobuf::SingularPtrField<Show>,
-    video: ::protobuf::RepeatedField<VideoFile>,
-    video_preview: ::protobuf::RepeatedField<VideoFile>,
-    audio_preview: ::protobuf::RepeatedField<AudioFile>,
-    restriction: ::protobuf::RepeatedField<Restriction>,
-    freeze_frame: ::protobuf::SingularPtrField<ImageGroup>,
-    keyword: ::protobuf::RepeatedField<::std::string::String>,
-    suppress_monetization: ::std::option::Option<bool>,
-    interpret_restriction_using_geoip: ::std::option::Option<bool>,
-    allow_background_playback: ::std::option::Option<bool>,
-    availability: ::protobuf::RepeatedField<Availability>,
-    external_url: ::protobuf::SingularField<::std::string::String>,
-    original_audio: ::protobuf::SingularPtrField<OriginalAudio>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Episode {
-    fn default() -> &'a Episode {
-        <Episode as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Episode {
-    pub fn new() -> Episode {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string name = 2;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional sint32 duration = 7;
-
-    pub fn get_duration(&self) -> i32 {
-        self.duration.unwrap_or(0)
-    }
-    pub fn clear_duration(&mut self) {
-        self.duration = ::std::option::Option::None;
-    }
-
-    pub fn has_duration(&self) -> bool {
-        self.duration.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_duration(&mut self, v: i32) {
-        self.duration = ::std::option::Option::Some(v);
-    }
-
-    // optional sint32 popularity = 8;
-
-    pub fn get_popularity(&self) -> i32 {
-        self.popularity.unwrap_or(0)
-    }
-    pub fn clear_popularity(&mut self) {
-        self.popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_popularity(&self) -> bool {
-        self.popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_popularity(&mut self, v: i32) {
-        self.popularity = ::std::option::Option::Some(v);
-    }
-
-    // repeated .AudioFile file = 12;
-
-    pub fn get_file(&self) -> &[AudioFile] {
-        &self.file
-    }
-    pub fn clear_file(&mut self) {
-        self.file.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_file(&mut self, v: ::protobuf::RepeatedField<AudioFile>) {
-        self.file = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_file(&mut self) -> &mut ::protobuf::RepeatedField<AudioFile> {
-        &mut self.file
-    }
-
-    // Take field
-    pub fn take_file(&mut self) -> ::protobuf::RepeatedField<AudioFile> {
-        ::std::mem::replace(&mut self.file, ::protobuf::RepeatedField::new())
-    }
-
-    // optional string description = 64;
-
-    pub fn get_description(&self) -> &str {
-        match self.description.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_description(&mut self) {
-        self.description.clear();
-    }
-
-    pub fn has_description(&self) -> bool {
-        self.description.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_description(&mut self, v: ::std::string::String) {
-        self.description = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_description(&mut self) -> &mut ::std::string::String {
-        if self.description.is_none() {
-            self.description.set_default();
-        }
-        self.description.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_description(&mut self) -> ::std::string::String {
-        self.description
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional sint32 number = 65;
-
-    pub fn get_number(&self) -> i32 {
-        self.number.unwrap_or(0)
-    }
-    pub fn clear_number(&mut self) {
-        self.number = ::std::option::Option::None;
-    }
-
-    pub fn has_number(&self) -> bool {
-        self.number.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_number(&mut self, v: i32) {
-        self.number = ::std::option::Option::Some(v);
-    }
-
-    // optional .Date publish_time = 66;
-
-    pub fn get_publish_time(&self) -> &Date {
-        self.publish_time
-            .as_ref()
-            .unwrap_or_else(|| Date::default_instance())
-    }
-    pub fn clear_publish_time(&mut self) {
-        self.publish_time.clear();
-    }
-
-    pub fn has_publish_time(&self) -> bool {
-        self.publish_time.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_publish_time(&mut self, v: Date) {
-        self.publish_time = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_publish_time(&mut self) -> &mut Date {
-        if self.publish_time.is_none() {
-            self.publish_time.set_default();
-        }
-        self.publish_time.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_publish_time(&mut self) -> Date {
-        self.publish_time.take().unwrap_or_else(|| Date::new())
-    }
-
-    // optional sint32 deprecated_popularity = 67;
-
-    pub fn get_deprecated_popularity(&self) -> i32 {
-        self.deprecated_popularity.unwrap_or(0)
-    }
-    pub fn clear_deprecated_popularity(&mut self) {
-        self.deprecated_popularity = ::std::option::Option::None;
-    }
-
-    pub fn has_deprecated_popularity(&self) -> bool {
-        self.deprecated_popularity.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_deprecated_popularity(&mut self, v: i32) {
-        self.deprecated_popularity = ::std::option::Option::Some(v);
-    }
-
-    // optional .ImageGroup covers = 68;
-
-    pub fn get_covers(&self) -> &ImageGroup {
-        self.covers
-            .as_ref()
-            .unwrap_or_else(|| ImageGroup::default_instance())
-    }
-    pub fn clear_covers(&mut self) {
-        self.covers.clear();
-    }
-
-    pub fn has_covers(&self) -> bool {
-        self.covers.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_covers(&mut self, v: ImageGroup) {
-        self.covers = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_covers(&mut self) -> &mut ImageGroup {
-        if self.covers.is_none() {
-            self.covers.set_default();
-        }
-        self.covers.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_covers(&mut self) -> ImageGroup {
-        self.covers.take().unwrap_or_else(|| ImageGroup::new())
-    }
-
-    // optional string language = 69;
-
-    pub fn get_language(&self) -> &str {
-        match self.language.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_language(&mut self) {
-        self.language.clear();
-    }
-
-    pub fn has_language(&self) -> bool {
-        self.language.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_language(&mut self, v: ::std::string::String) {
-        self.language = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_language(&mut self) -> &mut ::std::string::String {
-        if self.language.is_none() {
-            self.language.set_default();
-        }
-        self.language.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_language(&mut self) -> ::std::string::String {
-        self.language
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool explicit = 70;
-
-    pub fn get_explicit(&self) -> bool {
-        self.explicit.unwrap_or(false)
-    }
-    pub fn clear_explicit(&mut self) {
-        self.explicit = ::std::option::Option::None;
-    }
-
-    pub fn has_explicit(&self) -> bool {
-        self.explicit.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_explicit(&mut self, v: bool) {
-        self.explicit = ::std::option::Option::Some(v);
-    }
-
-    // optional .Show show = 71;
-
-    pub fn get_show(&self) -> &Show {
-        self.show
-            .as_ref()
-            .unwrap_or_else(|| Show::default_instance())
-    }
-    pub fn clear_show(&mut self) {
-        self.show.clear();
-    }
-
-    pub fn has_show(&self) -> bool {
-        self.show.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_show(&mut self, v: Show) {
-        self.show = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_show(&mut self) -> &mut Show {
-        if self.show.is_none() {
-            self.show.set_default();
-        }
-        self.show.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_show(&mut self) -> Show {
-        self.show.take().unwrap_or_else(|| Show::new())
-    }
-
-    // repeated .VideoFile video = 72;
-
-    pub fn get_video(&self) -> &[VideoFile] {
-        &self.video
-    }
-    pub fn clear_video(&mut self) {
-        self.video.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_video(&mut self, v: ::protobuf::RepeatedField<VideoFile>) {
-        self.video = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_video(&mut self) -> &mut ::protobuf::RepeatedField<VideoFile> {
-        &mut self.video
-    }
-
-    // Take field
-    pub fn take_video(&mut self) -> ::protobuf::RepeatedField<VideoFile> {
-        ::std::mem::replace(&mut self.video, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .VideoFile video_preview = 73;
-
-    pub fn get_video_preview(&self) -> &[VideoFile] {
-        &self.video_preview
-    }
-    pub fn clear_video_preview(&mut self) {
-        self.video_preview.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_video_preview(&mut self, v: ::protobuf::RepeatedField<VideoFile>) {
-        self.video_preview = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_video_preview(&mut self) -> &mut ::protobuf::RepeatedField<VideoFile> {
-        &mut self.video_preview
-    }
-
-    // Take field
-    pub fn take_video_preview(&mut self) -> ::protobuf::RepeatedField<VideoFile> {
-        ::std::mem::replace(&mut self.video_preview, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .AudioFile audio_preview = 74;
-
-    pub fn get_audio_preview(&self) -> &[AudioFile] {
-        &self.audio_preview
-    }
-    pub fn clear_audio_preview(&mut self) {
-        self.audio_preview.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_audio_preview(&mut self, v: ::protobuf::RepeatedField<AudioFile>) {
-        self.audio_preview = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_audio_preview(&mut self) -> &mut ::protobuf::RepeatedField<AudioFile> {
-        &mut self.audio_preview
-    }
-
-    // Take field
-    pub fn take_audio_preview(&mut self) -> ::protobuf::RepeatedField<AudioFile> {
-        ::std::mem::replace(&mut self.audio_preview, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .Restriction restriction = 75;
-
-    pub fn get_restriction(&self) -> &[Restriction] {
-        &self.restriction
-    }
-    pub fn clear_restriction(&mut self) {
-        self.restriction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restriction(&mut self, v: ::protobuf::RepeatedField<Restriction>) {
-        self.restriction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_restriction(&mut self) -> &mut ::protobuf::RepeatedField<Restriction> {
-        &mut self.restriction
-    }
-
-    // Take field
-    pub fn take_restriction(&mut self) -> ::protobuf::RepeatedField<Restriction> {
-        ::std::mem::replace(&mut self.restriction, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .ImageGroup freeze_frame = 76;
-
-    pub fn get_freeze_frame(&self) -> &ImageGroup {
-        self.freeze_frame
-            .as_ref()
-            .unwrap_or_else(|| ImageGroup::default_instance())
-    }
-    pub fn clear_freeze_frame(&mut self) {
-        self.freeze_frame.clear();
-    }
-
-    pub fn has_freeze_frame(&self) -> bool {
-        self.freeze_frame.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_freeze_frame(&mut self, v: ImageGroup) {
-        self.freeze_frame = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_freeze_frame(&mut self) -> &mut ImageGroup {
-        if self.freeze_frame.is_none() {
-            self.freeze_frame.set_default();
-        }
-        self.freeze_frame.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_freeze_frame(&mut self) -> ImageGroup {
-        self.freeze_frame
-            .take()
-            .unwrap_or_else(|| ImageGroup::new())
-    }
-
-    // repeated string keyword = 77;
-
-    pub fn get_keyword(&self) -> &[::std::string::String] {
-        &self.keyword
-    }
-    pub fn clear_keyword(&mut self) {
-        self.keyword.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_keyword(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.keyword = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_keyword(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.keyword
-    }
-
-    // Take field
-    pub fn take_keyword(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.keyword, ::protobuf::RepeatedField::new())
-    }
-
-    // optional bool suppress_monetization = 78;
-
-    pub fn get_suppress_monetization(&self) -> bool {
-        self.suppress_monetization.unwrap_or(false)
-    }
-    pub fn clear_suppress_monetization(&mut self) {
-        self.suppress_monetization = ::std::option::Option::None;
-    }
-
-    pub fn has_suppress_monetization(&self) -> bool {
-        self.suppress_monetization.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_suppress_monetization(&mut self, v: bool) {
-        self.suppress_monetization = ::std::option::Option::Some(v);
-    }
-
-    // optional bool interpret_restriction_using_geoip = 79;
-
-    pub fn get_interpret_restriction_using_geoip(&self) -> bool {
-        self.interpret_restriction_using_geoip.unwrap_or(false)
-    }
-    pub fn clear_interpret_restriction_using_geoip(&mut self) {
-        self.interpret_restriction_using_geoip = ::std::option::Option::None;
-    }
-
-    pub fn has_interpret_restriction_using_geoip(&self) -> bool {
-        self.interpret_restriction_using_geoip.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_interpret_restriction_using_geoip(&mut self, v: bool) {
-        self.interpret_restriction_using_geoip = ::std::option::Option::Some(v);
-    }
-
-    // optional bool allow_background_playback = 81;
-
-    pub fn get_allow_background_playback(&self) -> bool {
-        self.allow_background_playback.unwrap_or(false)
-    }
-    pub fn clear_allow_background_playback(&mut self) {
-        self.allow_background_playback = ::std::option::Option::None;
-    }
-
-    pub fn has_allow_background_playback(&self) -> bool {
-        self.allow_background_playback.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_allow_background_playback(&mut self, v: bool) {
-        self.allow_background_playback = ::std::option::Option::Some(v);
-    }
-
-    // repeated .Availability availability = 82;
-
-    pub fn get_availability(&self) -> &[Availability] {
-        &self.availability
-    }
-    pub fn clear_availability(&mut self) {
-        self.availability.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_availability(&mut self, v: ::protobuf::RepeatedField<Availability>) {
-        self.availability = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_availability(&mut self) -> &mut ::protobuf::RepeatedField<Availability> {
-        &mut self.availability
-    }
-
-    // Take field
-    pub fn take_availability(&mut self) -> ::protobuf::RepeatedField<Availability> {
-        ::std::mem::replace(&mut self.availability, ::protobuf::RepeatedField::new())
-    }
-
-    // optional string external_url = 83;
-
-    pub fn get_external_url(&self) -> &str {
-        match self.external_url.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_external_url(&mut self) {
-        self.external_url.clear();
-    }
-
-    pub fn has_external_url(&self) -> bool {
-        self.external_url.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_external_url(&mut self, v: ::std::string::String) {
-        self.external_url = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_external_url(&mut self) -> &mut ::std::string::String {
-        if self.external_url.is_none() {
-            self.external_url.set_default();
-        }
-        self.external_url.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_external_url(&mut self) -> ::std::string::String {
-        self.external_url
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .OriginalAudio original_audio = 84;
-
-    pub fn get_original_audio(&self) -> &OriginalAudio {
-        self.original_audio
-            .as_ref()
-            .unwrap_or_else(|| OriginalAudio::default_instance())
-    }
-    pub fn clear_original_audio(&mut self) {
-        self.original_audio.clear();
-    }
-
-    pub fn has_original_audio(&self) -> bool {
-        self.original_audio.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_original_audio(&mut self, v: OriginalAudio) {
-        self.original_audio = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_original_audio(&mut self) -> &mut OriginalAudio {
-        if self.original_audio.is_none() {
-            self.original_audio.set_default();
-        }
-        self.original_audio.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_original_audio(&mut self) -> OriginalAudio {
-        self.original_audio
-            .take()
-            .unwrap_or_else(|| OriginalAudio::new())
-    }
-}
-
-impl ::protobuf::Message for Episode {
-    fn is_initialized(&self) -> bool {
-        for v in &self.file {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.publish_time {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.covers {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.show {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.video {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.video_preview {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.audio_preview {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.restriction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.freeze_frame {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.availability {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.original_audio {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.duration = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.popularity = ::std::option::Option::Some(tmp);
-                }
-                12 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.file)?;
-                }
-                64 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.description,
-                    )?;
-                }
-                65 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.number = ::std::option::Option::Some(tmp);
-                }
-                66 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.publish_time,
-                    )?;
-                }
-                67 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_sint32()?;
-                    self.deprecated_popularity = ::std::option::Option::Some(tmp);
-                }
-                68 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.covers)?;
-                }
-                69 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.language)?;
-                }
-                70 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.explicit = ::std::option::Option::Some(tmp);
-                }
-                71 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.show)?;
-                }
-                72 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.video)?;
-                }
-                73 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.video_preview,
-                    )?;
-                }
-                74 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.audio_preview,
-                    )?;
-                }
-                75 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.restriction,
-                    )?;
-                }
-                76 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.freeze_frame,
-                    )?;
-                }
-                77 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.keyword)?;
-                }
-                78 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.suppress_monetization = ::std::option::Option::Some(tmp);
-                }
-                79 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.interpret_restriction_using_geoip = ::std::option::Option::Some(tmp);
-                }
-                81 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.allow_background_playback = ::std::option::Option::Some(tmp);
-                }
-                82 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.availability,
-                    )?;
-                }
-                83 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.external_url,
-                    )?;
-                }
-                84 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.original_audio,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(v) = self.duration {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(7, v);
-        }
-        if let Some(v) = self.popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(8, v);
-        }
-        for value in &self.file {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            my_size += ::protobuf::rt::string_size(64, &v);
-        }
-        if let Some(v) = self.number {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(65, v);
-        }
-        if let Some(ref v) = self.publish_time.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.deprecated_popularity {
-            my_size += ::protobuf::rt::value_varint_zigzag_size(67, v);
-        }
-        if let Some(ref v) = self.covers.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            my_size += ::protobuf::rt::string_size(69, &v);
-        }
-        if let Some(v) = self.explicit {
-            my_size += 3;
-        }
-        if let Some(ref v) = self.show.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.video {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.video_preview {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.audio_preview {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.restriction {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.freeze_frame.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.keyword {
-            my_size += ::protobuf::rt::string_size(77, &value);
-        }
-        if let Some(v) = self.suppress_monetization {
-            my_size += 3;
-        }
-        if let Some(v) = self.interpret_restriction_using_geoip {
-            my_size += 3;
-        }
-        if let Some(v) = self.allow_background_playback {
-            my_size += 3;
-        }
-        for value in &self.availability {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.external_url.as_ref() {
-            my_size += ::protobuf::rt::string_size(83, &v);
-        }
-        if let Some(ref v) = self.original_audio.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(v) = self.duration {
-            os.write_sint32(7, v)?;
-        }
-        if let Some(v) = self.popularity {
-            os.write_sint32(8, v)?;
-        }
-        for v in &self.file {
-            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            os.write_string(64, &v)?;
-        }
-        if let Some(v) = self.number {
-            os.write_sint32(65, v)?;
-        }
-        if let Some(ref v) = self.publish_time.as_ref() {
-            os.write_tag(66, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.deprecated_popularity {
-            os.write_sint32(67, v)?;
-        }
-        if let Some(ref v) = self.covers.as_ref() {
-            os.write_tag(68, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.language.as_ref() {
-            os.write_string(69, &v)?;
-        }
-        if let Some(v) = self.explicit {
-            os.write_bool(70, v)?;
-        }
-        if let Some(ref v) = self.show.as_ref() {
-            os.write_tag(71, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.video {
-            os.write_tag(72, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.video_preview {
-            os.write_tag(73, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.audio_preview {
-            os.write_tag(74, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.restriction {
-            os.write_tag(75, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.freeze_frame.as_ref() {
-            os.write_tag(76, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.keyword {
-            os.write_string(77, &v)?;
-        }
-        if let Some(v) = self.suppress_monetization {
-            os.write_bool(78, v)?;
-        }
-        if let Some(v) = self.interpret_restriction_using_geoip {
-            os.write_bool(79, v)?;
-        }
-        if let Some(v) = self.allow_background_playback {
-            os.write_bool(81, v)?;
-        }
-        for v in &self.availability {
-            os.write_tag(82, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.external_url.as_ref() {
-            os.write_string(83, &v)?;
-        }
-        if let Some(ref v) = self.original_audio.as_ref() {
-            os.write_tag(84, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Episode {
-        Episode::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Episode| &m.gid, |m: &mut Episode| &mut m.gid),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "name", |m: &Episode| &m.name, |m: &mut Episode| &mut m.name
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "duration",
-                    |m: &Episode| &m.duration,
-                    |m: &mut Episode| &mut m.duration,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "popularity",
-                    |m: &Episode| &m.popularity,
-                    |m: &mut Episode| &mut m.popularity,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AudioFile>,
-                    >(
-                        "file", |m: &Episode| &m.file, |m: &mut Episode| &mut m.file
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "description",
-                        |m: &Episode| &m.description,
-                        |m: &mut Episode| &mut m.description,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "number",
-                    |m: &Episode| &m.number,
-                    |m: &mut Episode| &mut m.number,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Date>,
-                    >(
-                        "publish_time",
-                        |m: &Episode| &m.publish_time,
-                        |m: &mut Episode| &mut m.publish_time,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeSint32,
-                >(
-                    "deprecated_popularity",
-                    |m: &Episode| &m.deprecated_popularity,
-                    |m: &mut Episode| &mut m.deprecated_popularity,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "covers",
-                        |m: &Episode| &m.covers,
-                        |m: &mut Episode| &mut m.covers,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "language",
-                        |m: &Episode| &m.language,
-                        |m: &mut Episode| &mut m.language,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "explicit",
-                    |m: &Episode| &m.explicit,
-                    |m: &mut Episode| &mut m.explicit,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Show>,
-                    >(
-                        "show", |m: &Episode| &m.show, |m: &mut Episode| &mut m.show
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<VideoFile>,
-                    >(
-                        "video",
-                        |m: &Episode| &m.video,
-                        |m: &mut Episode| &mut m.video,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<VideoFile>,
-                    >(
-                        "video_preview",
-                        |m: &Episode| &m.video_preview,
-                        |m: &mut Episode| &mut m.video_preview,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<AudioFile>,
-                    >(
-                        "audio_preview",
-                        |m: &Episode| &m.audio_preview,
-                        |m: &mut Episode| &mut m.audio_preview,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Restriction>,
-                    >(
-                        "restriction",
-                        |m: &Episode| &m.restriction,
-                        |m: &mut Episode| &mut m.restriction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ImageGroup>,
-                    >(
-                        "freeze_frame",
-                        |m: &Episode| &m.freeze_frame,
-                        |m: &mut Episode| &mut m.freeze_frame,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "keyword",
-                        |m: &Episode| &m.keyword,
-                        |m: &mut Episode| &mut m.keyword,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "suppress_monetization",
-                    |m: &Episode| &m.suppress_monetization,
-                    |m: &mut Episode| &mut m.suppress_monetization,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "interpret_restriction_using_geoip",
-                    |m: &Episode| &m.interpret_restriction_using_geoip,
-                    |m: &mut Episode| &mut m.interpret_restriction_using_geoip,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "allow_background_playback",
-                    |m: &Episode| &m.allow_background_playback,
-                    |m: &mut Episode| &mut m.allow_background_playback,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Availability>,
-                    >(
-                        "availability",
-                        |m: &Episode| &m.availability,
-                        |m: &mut Episode| &mut m.availability,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "external_url",
-                        |m: &Episode| &m.external_url,
-                        |m: &mut Episode| &mut m.external_url,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<OriginalAudio>,
-                    >(
-                        "original_audio",
-                        |m: &Episode| &m.original_audio,
-                        |m: &mut Episode| &mut m.original_audio,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Episode>(
-                    "Episode",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Episode {
-        static mut instance: ::protobuf::lazy::Lazy<Episode> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Episode::new) }
-    }
-}
-
-impl ::protobuf::Clear for Episode {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.name.clear();
-        self.duration = ::std::option::Option::None;
-        self.popularity = ::std::option::Option::None;
-        self.file.clear();
-        self.description.clear();
-        self.number = ::std::option::Option::None;
-        self.publish_time.clear();
-        self.deprecated_popularity = ::std::option::Option::None;
-        self.covers.clear();
-        self.language.clear();
-        self.explicit = ::std::option::Option::None;
-        self.show.clear();
-        self.video.clear();
-        self.video_preview.clear();
-        self.audio_preview.clear();
-        self.restriction.clear();
-        self.freeze_frame.clear();
-        self.keyword.clear();
-        self.suppress_monetization = ::std::option::Option::None;
-        self.interpret_restriction_using_geoip = ::std::option::Option::None;
-        self.allow_background_playback = ::std::option::Option::None;
-        self.availability.clear();
-        self.external_url.clear();
-        self.original_audio.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Episode {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Episode {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Category {
-    // message fields
-    name: ::protobuf::SingularField<::std::string::String>,
-    subcategories: ::protobuf::RepeatedField<Category>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Category {
-    fn default() -> &'a Category {
-        <Category as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Category {
-    pub fn new() -> Category {
-        ::std::default::Default::default()
-    }
-
-    // optional string name = 1;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Category subcategories = 2;
-
-    pub fn get_subcategories(&self) -> &[Category] {
-        &self.subcategories
-    }
-    pub fn clear_subcategories(&mut self) {
-        self.subcategories.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_subcategories(&mut self, v: ::protobuf::RepeatedField<Category>) {
-        self.subcategories = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_subcategories(&mut self) -> &mut ::protobuf::RepeatedField<Category> {
-        &mut self.subcategories
-    }
-
-    // Take field
-    pub fn take_subcategories(&mut self) -> ::protobuf::RepeatedField<Category> {
-        ::std::mem::replace(&mut self.subcategories, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Category {
-    fn is_initialized(&self) -> bool {
-        for v in &self.subcategories {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.subcategories,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        for value in &self.subcategories {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        for v in &self.subcategories {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Category {
-        Category::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "name",
-                        |m: &Category| &m.name,
-                        |m: &mut Category| &mut m.name,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Category>,
-                    >(
-                        "subcategories",
-                        |m: &Category| &m.subcategories,
-                        |m: &mut Category| &mut m.subcategories,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Category>(
-                    "Category",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Category {
-        static mut instance: ::protobuf::lazy::Lazy<Category> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Category::new) }
-    }
-}
-
-impl ::protobuf::Clear for Category {
-    fn clear(&mut self) {
-        self.name.clear();
-        self.subcategories.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Category {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Category {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct OriginalAudio {
-    // message fields
-    uuid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a OriginalAudio {
-    fn default() -> &'a OriginalAudio {
-        <OriginalAudio as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl OriginalAudio {
-    pub fn new() -> OriginalAudio {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes uuid = 1;
-
-    pub fn get_uuid(&self) -> &[u8] {
-        match self.uuid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_uuid(&mut self) {
-        self.uuid.clear();
-    }
-
-    pub fn has_uuid(&self) -> bool {
-        self.uuid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uuid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.uuid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uuid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.uuid.is_none() {
-            self.uuid.set_default();
-        }
-        self.uuid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uuid(&mut self) -> ::std::vec::Vec<u8> {
-        self.uuid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for OriginalAudio {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.uuid)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.uuid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.uuid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> OriginalAudio {
-        OriginalAudio::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "uuid",
-                        |m: &OriginalAudio| &m.uuid,
-                        |m: &mut OriginalAudio| &mut m.uuid,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<OriginalAudio>(
-                    "OriginalAudio",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static OriginalAudio {
-        static mut instance: ::protobuf::lazy::Lazy<OriginalAudio> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(OriginalAudio::new) }
-    }
-}
-
-impl ::protobuf::Clear for OriginalAudio {
-    fn clear(&mut self) {
-        self.uuid.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for OriginalAudio {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for OriginalAudio {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x0emetadata.proto\x12\0\"9\n\tTopTracks\x12\x11\n\x07country\x18\x01\
-    \x20\x01(\tB\0\x12\x17\n\x05track\x18\x02\x20\x03(\x0b2\x06.TrackB\0:\0\
-    \"N\n\x0eActivityPeriod\x12\x14\n\nstart_year\x18\x01\x20\x01(\x11B\0\
-    \x12\x12\n\x08end_year\x18\x02\x20\x01(\x11B\0\x12\x10\n\x06decade\x18\
-    \x03\x20\x01(\x11B\0:\0\"\xa5\x04\n\x06Artist\x12\r\n\x03gid\x18\x01\x20\
-    \x01(\x0cB\0\x12\x0e\n\x04name\x18\x02\x20\x01(\tB\0\x12\x14\n\npopulari\
-    ty\x18\x03\x20\x01(\x11B\0\x12\x1f\n\ttop_track\x18\x04\x20\x03(\x0b2\n.\
-    TopTracksB\0\x12\"\n\x0balbum_group\x18\x05\x20\x03(\x0b2\x0b.AlbumGroup\
-    B\0\x12#\n\x0csingle_group\x18\x06\x20\x03(\x0b2\x0b.AlbumGroupB\0\x12(\
-    \n\x11compilation_group\x18\x07\x20\x03(\x0b2\x0b.AlbumGroupB\0\x12'\n\
-    \x10appears_on_group\x18\x08\x20\x03(\x0b2\x0b.AlbumGroupB\0\x12\x0f\n\
-    \x05genre\x18\t\x20\x03(\tB\0\x12\"\n\x0bexternal_id\x18\n\x20\x03(\x0b2\
-    \x0b.ExternalIdB\0\x12\x1a\n\x08portrait\x18\x0b\x20\x03(\x0b2\x06.Image\
-    B\0\x12\x1f\n\tbiography\x18\x0c\x20\x03(\x0b2\n.BiographyB\0\x12*\n\x0f\
-    activity_period\x18\r\x20\x03(\x0b2\x0f.ActivityPeriodB\0\x12#\n\x0brest\
-    riction\x18\x0e\x20\x03(\x0b2\x0c.RestrictionB\0\x12\x1a\n\x07related\
-    \x18\x0f\x20\x03(\x0b2\x07.ArtistB\0\x12!\n\x17is_portrait_album_cover\
-    \x18\x10\x20\x01(\x08B\0\x12%\n\x0eportrait_group\x18\x11\x20\x01(\x0b2\
-    \x0b.ImageGroupB\0:\0\"'\n\nAlbumGroup\x12\x17\n\x05album\x18\x01\x20\
-    \x03(\x0b2\x06.AlbumB\0:\0\"Z\n\x04Date\x12\x0e\n\x04year\x18\x01\x20\
-    \x01(\x11B\0\x12\x0f\n\x05month\x18\x02\x20\x01(\x11B\0\x12\r\n\x03day\
-    \x18\x03\x20\x01(\x11B\0\x12\x0e\n\x04hour\x18\x04\x20\x01(\x11B\0\x12\
-    \x10\n\x06minute\x18\x05\x20\x01(\x11B\0:\0\"\xf7\x03\n\x05Album\x12\r\n\
-    \x03gid\x18\x01\x20\x01(\x0cB\0\x12\x0e\n\x04name\x18\x02\x20\x01(\tB\0\
-    \x12\x19\n\x06artist\x18\x03\x20\x03(\x0b2\x07.ArtistB\0\x12\x1a\n\x03ty\
-    p\x18\x04\x20\x01(\x0e2\x0b.Album.TypeB\0\x12\x0f\n\x05label\x18\x05\x20\
-    \x01(\tB\0\x12\x15\n\x04date\x18\x06\x20\x01(\x0b2\x05.DateB\0\x12\x14\n\
-    \npopularity\x18\x07\x20\x01(\x11B\0\x12\x0f\n\x05genre\x18\x08\x20\x03(\
-    \tB\0\x12\x17\n\x05cover\x18\t\x20\x03(\x0b2\x06.ImageB\0\x12\"\n\x0bext\
-    ernal_id\x18\n\x20\x03(\x0b2\x0b.ExternalIdB\0\x12\x15\n\x04disc\x18\x0b\
-    \x20\x03(\x0b2\x05.DiscB\0\x12\x10\n\x06review\x18\x0c\x20\x03(\tB\0\x12\
-    \x1f\n\tcopyright\x18\r\x20\x03(\x0b2\n.CopyrightB\0\x12#\n\x0brestricti\
-    on\x18\x0e\x20\x03(\x0b2\x0c.RestrictionB\0\x12\x19\n\x07related\x18\x0f\
-    \x20\x03(\x0b2\x06.AlbumB\0\x12\"\n\x0bsale_period\x18\x10\x20\x03(\x0b2\
-    \x0b.SalePeriodB\0\x12\"\n\x0bcover_group\x18\x11\x20\x01(\x0b2\x0b.Imag\
-    eGroupB\0\"8\n\x04Type\x12\t\n\x05ALBUM\x10\x01\x12\n\n\x06SINGLE\x10\
-    \x02\x12\x0f\n\x0bCOMPILATION\x10\x03\x12\x06\n\x02EP\x10\x04\x1a\0:\0\"\
-    \x8a\x03\n\x05Track\x12\r\n\x03gid\x18\x01\x20\x01(\x0cB\0\x12\x0e\n\x04\
-    name\x18\x02\x20\x01(\tB\0\x12\x17\n\x05album\x18\x03\x20\x01(\x0b2\x06.\
-    AlbumB\0\x12\x19\n\x06artist\x18\x04\x20\x03(\x0b2\x07.ArtistB\0\x12\x10\
-    \n\x06number\x18\x05\x20\x01(\x11B\0\x12\x15\n\x0bdisc_number\x18\x06\
-    \x20\x01(\x11B\0\x12\x12\n\x08duration\x18\x07\x20\x01(\x11B\0\x12\x14\n\
-    \npopularity\x18\x08\x20\x01(\x11B\0\x12\x12\n\x08explicit\x18\t\x20\x01\
-    (\x08B\0\x12\"\n\x0bexternal_id\x18\n\x20\x03(\x0b2\x0b.ExternalIdB\0\
-    \x12#\n\x0brestriction\x18\x0b\x20\x03(\x0b2\x0c.RestrictionB\0\x12\x1a\
-    \n\x04file\x18\x0c\x20\x03(\x0b2\n.AudioFileB\0\x12\x1d\n\x0balternative\
-    \x18\r\x20\x03(\x0b2\x06.TrackB\0\x12\"\n\x0bsale_period\x18\x0e\x20\x03\
-    (\x0b2\x0b.SalePeriodB\0\x12\x1d\n\x07preview\x18\x0f\x20\x03(\x0b2\n.Au\
-    dioFileB\0:\0\"\x95\x01\n\x05Image\x12\x11\n\x07file_id\x18\x01\x20\x01(\
-    \x0cB\0\x12\x1b\n\x04size\x18\x02\x20\x01(\x0e2\x0b.Image.SizeB\0\x12\
-    \x0f\n\x05width\x18\x03\x20\x01(\x11B\0\x12\x10\n\x06height\x18\x04\x20\
-    \x01(\x11B\0\"7\n\x04Size\x12\x0b\n\x07DEFAULT\x10\0\x12\t\n\x05SMALL\
-    \x10\x01\x12\t\n\x05LARGE\x10\x02\x12\n\n\x06XLARGE\x10\x03\x1a\0:\0\"'\
-    \n\nImageGroup\x12\x17\n\x05image\x18\x01\x20\x03(\x0b2\x06.ImageB\0:\0\
-    \"`\n\tBiography\x12\x0e\n\x04text\x18\x01\x20\x01(\tB\0\x12\x1a\n\x08po\
-    rtrait\x18\x02\x20\x03(\x0b2\x06.ImageB\0\x12%\n\x0eportrait_group\x18\
-    \x03\x20\x03(\x0b2\x0b.ImageGroupB\0:\0\"C\n\x04Disc\x12\x10\n\x06number\
-    \x18\x01\x20\x01(\x11B\0\x12\x0e\n\x04name\x18\x02\x20\x01(\tB\0\x12\x17\
-    \n\x05track\x18\x03\x20\x03(\x0b2\x06.TrackB\0:\0\"U\n\tCopyright\x12\
-    \x1e\n\x03typ\x18\x01\x20\x01(\x0e2\x0f.Copyright.TypeB\0\x12\x0e\n\x04t\
-    ext\x18\x02\x20\x01(\tB\0\"\x16\n\x04Type\x12\x05\n\x01P\x10\0\x12\x05\n\
-    \x01C\x10\x01\x1a\0:\0\"\xa5\x02\n\x0bRestriction\x12+\n\tcatalogue\x18\
-    \x01\x20\x03(\x0e2\x16.Restriction.CatalogueB\0\x12\x1b\n\x11countries_a\
-    llowed\x18\x02\x20\x01(\tB\0\x12\x1d\n\x13countries_forbidden\x18\x03\
-    \x20\x01(\tB\0\x12\x20\n\x03typ\x18\x04\x20\x01(\x0e2\x11.Restriction.Ty\
-    peB\0\x12\x17\n\rcatalogue_str\x18\x05\x20\x03(\tB\0\"W\n\tCatalogue\x12\
-    \x06\n\x02AD\x10\0\x12\x10\n\x0cSUBSCRIPTION\x10\x01\x12\x11\n\rCATALOGU\
-    E_ALL\x10\x02\x12\x0b\n\x07SHUFFLE\x10\x03\x12\x0e\n\nCOMMERCIAL\x10\x04\
-    \x1a\0\"\x17\n\x04Type\x12\r\n\tSTREAMING\x10\0\x1a\0:\0\"A\n\x0cAvailab\
-    ility\x12\x17\n\rcatalogue_str\x18\x01\x20\x03(\tB\0\x12\x16\n\x05start\
-    \x18\x02\x20\x01(\x0b2\x05.DateB\0:\0\"a\n\nSalePeriod\x12#\n\x0brestric\
-    tion\x18\x01\x20\x03(\x0b2\x0c.RestrictionB\0\x12\x16\n\x05start\x18\x02\
-    \x20\x01(\x0b2\x05.DateB\0\x12\x14\n\x03end\x18\x03\x20\x01(\x0b2\x05.Da\
-    teB\0:\0\"+\n\nExternalId\x12\r\n\x03typ\x18\x01\x20\x01(\tB\0\x12\x0c\n\
-    \x02id\x18\x02\x20\x01(\tB\0:\0\"\xa2\x02\n\tAudioFile\x12\x11\n\x07file\
-    _id\x18\x01\x20\x01(\x0cB\0\x12#\n\x06format\x18\x02\x20\x01(\x0e2\x11.A\
-    udioFile.FormatB\0\"\xda\x01\n\x06Format\x12\x11\n\rOGG_VORBIS_96\x10\0\
-    \x12\x12\n\x0eOGG_VORBIS_160\x10\x01\x12\x12\n\x0eOGG_VORBIS_320\x10\x02\
-    \x12\x0b\n\x07MP3_256\x10\x03\x12\x0b\n\x07MP3_320\x10\x04\x12\x0b\n\x07\
-    MP3_160\x10\x05\x12\n\n\x06MP3_96\x10\x06\x12\x0f\n\x0bMP3_160_ENC\x10\
-    \x07\x12\x10\n\x0cMP4_128_DUAL\x10\x08\x12\n\n\x06OTHER3\x10\t\x12\x0b\n\
-    \x07AAC_160\x10\n\x12\x0b\n\x07AAC_320\x10\x0b\x12\x0b\n\x07MP4_128\x10\
-    \x0c\x12\n\n\x06OTHER5\x10\r\x1a\0:\0\"\x20\n\tVideoFile\x12\x11\n\x07fi\
-    le_id\x18\x01\x20\x01(\x0cB\0:\0\"\xf6\x05\n\x04Show\x12\r\n\x03gid\x18\
-    \x01\x20\x01(\x0cB\0\x12\x0e\n\x04name\x18\x02\x20\x01(\tB\0\x12\x15\n\
-    \x0bdescription\x18@\x20\x01(\tB\0\x12\x1f\n\x15deprecated_popularity\
-    \x18A\x20\x01(\x11B\0\x12\x13\n\tpublisher\x18B\x20\x01(\tB\0\x12\x12\n\
-    \x08language\x18C\x20\x01(\tB\0\x12\x12\n\x08explicit\x18D\x20\x01(\x08B\
-    \0\x12\x1d\n\x06covers\x18E\x20\x01(\x0b2\x0b.ImageGroupB\0\x12\x1b\n\
-    \x07episode\x18F\x20\x03(\x0b2\x08.EpisodeB\0\x12\x1f\n\tcopyright\x18G\
-    \x20\x03(\x0b2\n.CopyrightB\0\x12#\n\x0brestriction\x18H\x20\x03(\x0b2\
-    \x0c.RestrictionB\0\x12\x11\n\x07keyword\x18I\x20\x03(\tB\0\x12%\n\nmedi\
-    a_type\x18J\x20\x01(\x0e2\x0f.Show.MediaTypeB\0\x123\n\x11consumption_or\
-    der\x18K\x20\x01(\x0e2\x16.Show.ConsumptionOrderB\0\x12+\n!interpret_res\
-    triction_using_geoip\x18L\x20\x01(\x08B\0\x12%\n\x0cavailability\x18N\
-    \x20\x03(\x0b2\r.AvailabilityB\0\x12\x1b\n\x11country_of_origin\x18O\x20\
-    \x01(\tB\0\x12\x1f\n\ncategories\x18P\x20\x03(\x0b2\t.CategoryB\0\x12,\n\
-    \x0bpassthrough\x18Q\x20\x01(\x0e2\x15.Show.PassthroughEnumB\0\".\n\tMed\
-    iaType\x12\t\n\x05MIXED\x10\0\x12\t\n\x05AUDIO\x10\x01\x12\t\n\x05VIDEO\
-    \x10\x02\x1a\0\">\n\x10ConsumptionOrder\x12\x0e\n\nSEQUENTIAL\x10\x01\
-    \x12\x0c\n\x08EPISODIC\x10\x02\x12\n\n\x06RECENT\x10\x03\x1a\0\"7\n\x0fP\
-    assthroughEnum\x12\x0b\n\x07UNKNOWN\x10\0\x12\x08\n\x04NONE\x10\x01\x12\
-    \x0b\n\x07ALLOWED\x10\x02\x1a\0:\0\"\xd7\x05\n\x07Episode\x12\r\n\x03gid\
-    \x18\x01\x20\x01(\x0cB\0\x12\x0e\n\x04name\x18\x02\x20\x01(\tB\0\x12\x12\
-    \n\x08duration\x18\x07\x20\x01(\x11B\0\x12\x14\n\npopularity\x18\x08\x20\
-    \x01(\x11B\0\x12\x1a\n\x04file\x18\x0c\x20\x03(\x0b2\n.AudioFileB\0\x12\
-    \x15\n\x0bdescription\x18@\x20\x01(\tB\0\x12\x10\n\x06number\x18A\x20\
-    \x01(\x11B\0\x12\x1d\n\x0cpublish_time\x18B\x20\x01(\x0b2\x05.DateB\0\
-    \x12\x1f\n\x15deprecated_popularity\x18C\x20\x01(\x11B\0\x12\x1d\n\x06co\
-    vers\x18D\x20\x01(\x0b2\x0b.ImageGroupB\0\x12\x12\n\x08language\x18E\x20\
-    \x01(\tB\0\x12\x12\n\x08explicit\x18F\x20\x01(\x08B\0\x12\x15\n\x04show\
-    \x18G\x20\x01(\x0b2\x05.ShowB\0\x12\x1b\n\x05video\x18H\x20\x03(\x0b2\n.\
-    VideoFileB\0\x12#\n\rvideo_preview\x18I\x20\x03(\x0b2\n.VideoFileB\0\x12\
-    #\n\raudio_preview\x18J\x20\x03(\x0b2\n.AudioFileB\0\x12#\n\x0brestricti\
-    on\x18K\x20\x03(\x0b2\x0c.RestrictionB\0\x12#\n\x0cfreeze_frame\x18L\x20\
-    \x01(\x0b2\x0b.ImageGroupB\0\x12\x11\n\x07keyword\x18M\x20\x03(\tB\0\x12\
-    \x1f\n\x15suppress_monetization\x18N\x20\x01(\x08B\0\x12+\n!interpret_re\
-    striction_using_geoip\x18O\x20\x01(\x08B\0\x12#\n\x19allow_background_pl\
-    ayback\x18Q\x20\x01(\x08B\0\x12%\n\x0cavailability\x18R\x20\x03(\x0b2\r.\
-    AvailabilityB\0\x12\x16\n\x0cexternal_url\x18S\x20\x01(\tB\0\x12(\n\x0eo\
-    riginal_audio\x18T\x20\x01(\x0b2\x0e.OriginalAudioB\0:\0\"@\n\x08Categor\
-    y\x12\x0e\n\x04name\x18\x01\x20\x01(\tB\0\x12\"\n\rsubcategories\x18\x02\
-    \x20\x03(\x0b2\t.CategoryB\0:\0\"!\n\rOriginalAudio\x12\x0e\n\x04uuid\
-    \x18\x01\x20\x01(\x0cB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 3970
protocol/src/playlist4changes.rs

@@ -1,3970 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `playlist4changes.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ChangeInfo {
-    // message fields
-    user: ::protobuf::SingularField<::std::string::String>,
-    timestamp: ::std::option::Option<i32>,
-    admin: ::std::option::Option<bool>,
-    undo: ::std::option::Option<bool>,
-    redo: ::std::option::Option<bool>,
-    merge: ::std::option::Option<bool>,
-    compressed: ::std::option::Option<bool>,
-    migration: ::std::option::Option<bool>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ChangeInfo {
-    fn default() -> &'a ChangeInfo {
-        <ChangeInfo as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ChangeInfo {
-    pub fn new() -> ChangeInfo {
-        ::std::default::Default::default()
-    }
-
-    // optional string user = 1;
-
-    pub fn get_user(&self) -> &str {
-        match self.user.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_user(&mut self) {
-        self.user.clear();
-    }
-
-    pub fn has_user(&self) -> bool {
-        self.user.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_user(&mut self, v: ::std::string::String) {
-        self.user = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_user(&mut self) -> &mut ::std::string::String {
-        if self.user.is_none() {
-            self.user.set_default();
-        }
-        self.user.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_user(&mut self) -> ::std::string::String {
-        self.user
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional int32 timestamp = 2;
-
-    pub fn get_timestamp(&self) -> i32 {
-        self.timestamp.unwrap_or(0)
-    }
-    pub fn clear_timestamp(&mut self) {
-        self.timestamp = ::std::option::Option::None;
-    }
-
-    pub fn has_timestamp(&self) -> bool {
-        self.timestamp.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_timestamp(&mut self, v: i32) {
-        self.timestamp = ::std::option::Option::Some(v);
-    }
-
-    // optional bool admin = 3;
-
-    pub fn get_admin(&self) -> bool {
-        self.admin.unwrap_or(false)
-    }
-    pub fn clear_admin(&mut self) {
-        self.admin = ::std::option::Option::None;
-    }
-
-    pub fn has_admin(&self) -> bool {
-        self.admin.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_admin(&mut self, v: bool) {
-        self.admin = ::std::option::Option::Some(v);
-    }
-
-    // optional bool undo = 4;
-
-    pub fn get_undo(&self) -> bool {
-        self.undo.unwrap_or(false)
-    }
-    pub fn clear_undo(&mut self) {
-        self.undo = ::std::option::Option::None;
-    }
-
-    pub fn has_undo(&self) -> bool {
-        self.undo.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_undo(&mut self, v: bool) {
-        self.undo = ::std::option::Option::Some(v);
-    }
-
-    // optional bool redo = 5;
-
-    pub fn get_redo(&self) -> bool {
-        self.redo.unwrap_or(false)
-    }
-    pub fn clear_redo(&mut self) {
-        self.redo = ::std::option::Option::None;
-    }
-
-    pub fn has_redo(&self) -> bool {
-        self.redo.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_redo(&mut self, v: bool) {
-        self.redo = ::std::option::Option::Some(v);
-    }
-
-    // optional bool merge = 6;
-
-    pub fn get_merge(&self) -> bool {
-        self.merge.unwrap_or(false)
-    }
-    pub fn clear_merge(&mut self) {
-        self.merge = ::std::option::Option::None;
-    }
-
-    pub fn has_merge(&self) -> bool {
-        self.merge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_merge(&mut self, v: bool) {
-        self.merge = ::std::option::Option::Some(v);
-    }
-
-    // optional bool compressed = 7;
-
-    pub fn get_compressed(&self) -> bool {
-        self.compressed.unwrap_or(false)
-    }
-    pub fn clear_compressed(&mut self) {
-        self.compressed = ::std::option::Option::None;
-    }
-
-    pub fn has_compressed(&self) -> bool {
-        self.compressed.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_compressed(&mut self, v: bool) {
-        self.compressed = ::std::option::Option::Some(v);
-    }
-
-    // optional bool migration = 8;
-
-    pub fn get_migration(&self) -> bool {
-        self.migration.unwrap_or(false)
-    }
-    pub fn clear_migration(&mut self) {
-        self.migration = ::std::option::Option::None;
-    }
-
-    pub fn has_migration(&self) -> bool {
-        self.migration.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_migration(&mut self, v: bool) {
-        self.migration = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ChangeInfo {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.user)?;
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.timestamp = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.admin = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.undo = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.redo = ::std::option::Option::Some(tmp);
-                }
-                6 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.merge = ::std::option::Option::Some(tmp);
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.compressed = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.migration = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.user.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(v) = self.timestamp {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.admin {
-            my_size += 2;
-        }
-        if let Some(v) = self.undo {
-            my_size += 2;
-        }
-        if let Some(v) = self.redo {
-            my_size += 2;
-        }
-        if let Some(v) = self.merge {
-            my_size += 2;
-        }
-        if let Some(v) = self.compressed {
-            my_size += 2;
-        }
-        if let Some(v) = self.migration {
-            my_size += 2;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.user.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(v) = self.timestamp {
-            os.write_int32(2, v)?;
-        }
-        if let Some(v) = self.admin {
-            os.write_bool(3, v)?;
-        }
-        if let Some(v) = self.undo {
-            os.write_bool(4, v)?;
-        }
-        if let Some(v) = self.redo {
-            os.write_bool(5, v)?;
-        }
-        if let Some(v) = self.merge {
-            os.write_bool(6, v)?;
-        }
-        if let Some(v) = self.compressed {
-            os.write_bool(7, v)?;
-        }
-        if let Some(v) = self.migration {
-            os.write_bool(8, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ChangeInfo {
-        ChangeInfo::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "user",
-                        |m: &ChangeInfo| &m.user,
-                        |m: &mut ChangeInfo| &mut m.user,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "timestamp",
-                    |m: &ChangeInfo| &m.timestamp,
-                    |m: &mut ChangeInfo| &mut m.timestamp,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "admin",
-                    |m: &ChangeInfo| &m.admin,
-                    |m: &mut ChangeInfo| &mut m.admin,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "undo",
-                    |m: &ChangeInfo| &m.undo,
-                    |m: &mut ChangeInfo| &mut m.undo,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "redo",
-                    |m: &ChangeInfo| &m.redo,
-                    |m: &mut ChangeInfo| &mut m.redo,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "merge",
-                    |m: &ChangeInfo| &m.merge,
-                    |m: &mut ChangeInfo| &mut m.merge,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "compressed",
-                    |m: &ChangeInfo| &m.compressed,
-                    |m: &mut ChangeInfo| &mut m.compressed,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "migration",
-                    |m: &ChangeInfo| &m.migration,
-                    |m: &mut ChangeInfo| &mut m.migration,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ChangeInfo>(
-                    "ChangeInfo",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ChangeInfo {
-        static mut instance: ::protobuf::lazy::Lazy<ChangeInfo> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ChangeInfo::new) }
-    }
-}
-
-impl ::protobuf::Clear for ChangeInfo {
-    fn clear(&mut self) {
-        self.user.clear();
-        self.timestamp = ::std::option::Option::None;
-        self.admin = ::std::option::Option::None;
-        self.undo = ::std::option::Option::None;
-        self.redo = ::std::option::Option::None;
-        self.merge = ::std::option::Option::None;
-        self.compressed = ::std::option::Option::None;
-        self.migration = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ChangeInfo {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ChangeInfo {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Delta {
-    // message fields
-    base_version: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    ops: ::protobuf::RepeatedField<super::playlist4ops::Op>,
-    info: ::protobuf::SingularPtrField<ChangeInfo>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Delta {
-    fn default() -> &'a Delta {
-        <Delta as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Delta {
-    pub fn new() -> Delta {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes base_version = 1;
-
-    pub fn get_base_version(&self) -> &[u8] {
-        match self.base_version.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_base_version(&mut self) {
-        self.base_version.clear();
-    }
-
-    pub fn has_base_version(&self) -> bool {
-        self.base_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_base_version(&mut self, v: ::std::vec::Vec<u8>) {
-        self.base_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_base_version(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.base_version.is_none() {
-            self.base_version.set_default();
-        }
-        self.base_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_base_version(&mut self) -> ::std::vec::Vec<u8> {
-        self.base_version
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // repeated .Op ops = 2;
-
-    pub fn get_ops(&self) -> &[super::playlist4ops::Op] {
-        &self.ops
-    }
-    pub fn clear_ops(&mut self) {
-        self.ops.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ops(&mut self, v: ::protobuf::RepeatedField<super::playlist4ops::Op>) {
-        self.ops = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_ops(&mut self) -> &mut ::protobuf::RepeatedField<super::playlist4ops::Op> {
-        &mut self.ops
-    }
-
-    // Take field
-    pub fn take_ops(&mut self) -> ::protobuf::RepeatedField<super::playlist4ops::Op> {
-        ::std::mem::replace(&mut self.ops, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .ChangeInfo info = 4;
-
-    pub fn get_info(&self) -> &ChangeInfo {
-        self.info
-            .as_ref()
-            .unwrap_or_else(|| ChangeInfo::default_instance())
-    }
-    pub fn clear_info(&mut self) {
-        self.info.clear();
-    }
-
-    pub fn has_info(&self) -> bool {
-        self.info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_info(&mut self, v: ChangeInfo) {
-        self.info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_info(&mut self) -> &mut ChangeInfo {
-        if self.info.is_none() {
-            self.info.set_default();
-        }
-        self.info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_info(&mut self) -> ChangeInfo {
-        self.info.take().unwrap_or_else(|| ChangeInfo::new())
-    }
-}
-
-impl ::protobuf::Message for Delta {
-    fn is_initialized(&self) -> bool {
-        for v in &self.ops {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.base_version,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.ops)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.info)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.base_version.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        for value in &self.ops {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.info.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.base_version.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        for v in &self.ops {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.info.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Delta {
-        Delta::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "base_version",
-                        |m: &Delta| &m.base_version,
-                        |m: &mut Delta| &mut m.base_version,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4ops::Op>,
-                    >("ops", |m: &Delta| &m.ops, |m: &mut Delta| &mut m.ops),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ChangeInfo>,
-                    >("info", |m: &Delta| &m.info, |m: &mut Delta| &mut m.info),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Delta>(
-                    "Delta",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Delta {
-        static mut instance: ::protobuf::lazy::Lazy<Delta> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Delta::new) }
-    }
-}
-
-impl ::protobuf::Clear for Delta {
-    fn clear(&mut self) {
-        self.base_version.clear();
-        self.ops.clear();
-        self.info.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Delta {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Delta {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Merge {
-    // message fields
-    base_version: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    merge_version: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    info: ::protobuf::SingularPtrField<ChangeInfo>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Merge {
-    fn default() -> &'a Merge {
-        <Merge as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Merge {
-    pub fn new() -> Merge {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes base_version = 1;
-
-    pub fn get_base_version(&self) -> &[u8] {
-        match self.base_version.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_base_version(&mut self) {
-        self.base_version.clear();
-    }
-
-    pub fn has_base_version(&self) -> bool {
-        self.base_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_base_version(&mut self, v: ::std::vec::Vec<u8>) {
-        self.base_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_base_version(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.base_version.is_none() {
-            self.base_version.set_default();
-        }
-        self.base_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_base_version(&mut self) -> ::std::vec::Vec<u8> {
-        self.base_version
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes merge_version = 2;
-
-    pub fn get_merge_version(&self) -> &[u8] {
-        match self.merge_version.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_merge_version(&mut self) {
-        self.merge_version.clear();
-    }
-
-    pub fn has_merge_version(&self) -> bool {
-        self.merge_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_merge_version(&mut self, v: ::std::vec::Vec<u8>) {
-        self.merge_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_merge_version(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.merge_version.is_none() {
-            self.merge_version.set_default();
-        }
-        self.merge_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_merge_version(&mut self) -> ::std::vec::Vec<u8> {
-        self.merge_version
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .ChangeInfo info = 4;
-
-    pub fn get_info(&self) -> &ChangeInfo {
-        self.info
-            .as_ref()
-            .unwrap_or_else(|| ChangeInfo::default_instance())
-    }
-    pub fn clear_info(&mut self) {
-        self.info.clear();
-    }
-
-    pub fn has_info(&self) -> bool {
-        self.info.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_info(&mut self, v: ChangeInfo) {
-        self.info = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_info(&mut self) -> &mut ChangeInfo {
-        if self.info.is_none() {
-            self.info.set_default();
-        }
-        self.info.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_info(&mut self) -> ChangeInfo {
-        self.info.take().unwrap_or_else(|| ChangeInfo::new())
-    }
-}
-
-impl ::protobuf::Message for Merge {
-    fn is_initialized(&self) -> bool {
-        for v in &self.info {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.base_version,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.merge_version,
-                    )?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.info)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.base_version.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.merge_version.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(2, &v);
-        }
-        if let Some(ref v) = self.info.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.base_version.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.merge_version.as_ref() {
-            os.write_bytes(2, &v)?;
-        }
-        if let Some(ref v) = self.info.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Merge {
-        Merge::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "base_version",
-                        |m: &Merge| &m.base_version,
-                        |m: &mut Merge| &mut m.base_version,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "merge_version",
-                        |m: &Merge| &m.merge_version,
-                        |m: &mut Merge| &mut m.merge_version,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ChangeInfo>,
-                    >("info", |m: &Merge| &m.info, |m: &mut Merge| &mut m.info),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Merge>(
-                    "Merge",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Merge {
-        static mut instance: ::protobuf::lazy::Lazy<Merge> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Merge::new) }
-    }
-}
-
-impl ::protobuf::Clear for Merge {
-    fn clear(&mut self) {
-        self.base_version.clear();
-        self.merge_version.clear();
-        self.info.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Merge {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Merge {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ChangeSet {
-    // message fields
-    kind: ::std::option::Option<ChangeSet_Kind>,
-    delta: ::protobuf::SingularPtrField<Delta>,
-    merge: ::protobuf::SingularPtrField<Merge>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ChangeSet {
-    fn default() -> &'a ChangeSet {
-        <ChangeSet as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ChangeSet {
-    pub fn new() -> ChangeSet {
-        ::std::default::Default::default()
-    }
-
-    // optional .ChangeSet.Kind kind = 1;
-
-    pub fn get_kind(&self) -> ChangeSet_Kind {
-        self.kind.unwrap_or(ChangeSet_Kind::KIND_UNKNOWN)
-    }
-    pub fn clear_kind(&mut self) {
-        self.kind = ::std::option::Option::None;
-    }
-
-    pub fn has_kind(&self) -> bool {
-        self.kind.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_kind(&mut self, v: ChangeSet_Kind) {
-        self.kind = ::std::option::Option::Some(v);
-    }
-
-    // optional .Delta delta = 2;
-
-    pub fn get_delta(&self) -> &Delta {
-        self.delta
-            .as_ref()
-            .unwrap_or_else(|| Delta::default_instance())
-    }
-    pub fn clear_delta(&mut self) {
-        self.delta.clear();
-    }
-
-    pub fn has_delta(&self) -> bool {
-        self.delta.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_delta(&mut self, v: Delta) {
-        self.delta = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_delta(&mut self) -> &mut Delta {
-        if self.delta.is_none() {
-            self.delta.set_default();
-        }
-        self.delta.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_delta(&mut self) -> Delta {
-        self.delta.take().unwrap_or_else(|| Delta::new())
-    }
-
-    // optional .Merge merge = 3;
-
-    pub fn get_merge(&self) -> &Merge {
-        self.merge
-            .as_ref()
-            .unwrap_or_else(|| Merge::default_instance())
-    }
-    pub fn clear_merge(&mut self) {
-        self.merge.clear();
-    }
-
-    pub fn has_merge(&self) -> bool {
-        self.merge.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_merge(&mut self, v: Merge) {
-        self.merge = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_merge(&mut self) -> &mut Merge {
-        if self.merge.is_none() {
-            self.merge.set_default();
-        }
-        self.merge.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_merge(&mut self) -> Merge {
-        self.merge.take().unwrap_or_else(|| Merge::new())
-    }
-}
-
-impl ::protobuf::Message for ChangeSet {
-    fn is_initialized(&self) -> bool {
-        for v in &self.delta {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.merge {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.kind,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.delta)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.merge)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.kind {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        if let Some(ref v) = self.delta.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.merge.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.kind {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(ref v) = self.delta.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.merge.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ChangeSet {
-        ChangeSet::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ChangeSet_Kind>,
-                >(
-                    "kind",
-                    |m: &ChangeSet| &m.kind,
-                    |m: &mut ChangeSet| &mut m.kind,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Delta>,
-                    >(
-                        "delta",
-                        |m: &ChangeSet| &m.delta,
-                        |m: &mut ChangeSet| &mut m.delta,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Merge>,
-                    >(
-                        "merge",
-                        |m: &ChangeSet| &m.merge,
-                        |m: &mut ChangeSet| &mut m.merge,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ChangeSet>(
-                    "ChangeSet",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ChangeSet {
-        static mut instance: ::protobuf::lazy::Lazy<ChangeSet> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ChangeSet::new) }
-    }
-}
-
-impl ::protobuf::Clear for ChangeSet {
-    fn clear(&mut self) {
-        self.kind = ::std::option::Option::None;
-        self.delta.clear();
-        self.merge.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ChangeSet {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ChangeSet {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ChangeSet_Kind {
-    KIND_UNKNOWN = 0,
-    DELTA = 2,
-    MERGE = 3,
-}
-
-impl ::protobuf::ProtobufEnum for ChangeSet_Kind {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ChangeSet_Kind> {
-        match value {
-            0 => ::std::option::Option::Some(ChangeSet_Kind::KIND_UNKNOWN),
-            2 => ::std::option::Option::Some(ChangeSet_Kind::DELTA),
-            3 => ::std::option::Option::Some(ChangeSet_Kind::MERGE),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ChangeSet_Kind] = &[
-            ChangeSet_Kind::KIND_UNKNOWN,
-            ChangeSet_Kind::DELTA,
-            ChangeSet_Kind::MERGE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ChangeSet_Kind>(
-                    "ChangeSet.Kind",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ChangeSet_Kind {}
-
-impl ::std::default::Default for ChangeSet_Kind {
-    fn default() -> Self {
-        ChangeSet_Kind::KIND_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ChangeSet_Kind {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct RevisionTaggedChangeSet {
-    // message fields
-    revision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    change_set: ::protobuf::SingularPtrField<ChangeSet>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a RevisionTaggedChangeSet {
-    fn default() -> &'a RevisionTaggedChangeSet {
-        <RevisionTaggedChangeSet as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl RevisionTaggedChangeSet {
-    pub fn new() -> RevisionTaggedChangeSet {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes revision = 1;
-
-    pub fn get_revision(&self) -> &[u8] {
-        match self.revision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_revision(&mut self) {
-        self.revision.clear();
-    }
-
-    pub fn has_revision(&self) -> bool {
-        self.revision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_revision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.revision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_revision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.revision.is_none() {
-            self.revision.set_default();
-        }
-        self.revision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_revision(&mut self) -> ::std::vec::Vec<u8> {
-        self.revision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional .ChangeSet change_set = 2;
-
-    pub fn get_change_set(&self) -> &ChangeSet {
-        self.change_set
-            .as_ref()
-            .unwrap_or_else(|| ChangeSet::default_instance())
-    }
-    pub fn clear_change_set(&mut self) {
-        self.change_set.clear();
-    }
-
-    pub fn has_change_set(&self) -> bool {
-        self.change_set.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_change_set(&mut self, v: ChangeSet) {
-        self.change_set = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_change_set(&mut self) -> &mut ChangeSet {
-        if self.change_set.is_none() {
-            self.change_set.set_default();
-        }
-        self.change_set.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_change_set(&mut self) -> ChangeSet {
-        self.change_set.take().unwrap_or_else(|| ChangeSet::new())
-    }
-}
-
-impl ::protobuf::Message for RevisionTaggedChangeSet {
-    fn is_initialized(&self) -> bool {
-        for v in &self.change_set {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.revision)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.change_set,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.revision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.change_set.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.revision.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.change_set.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> RevisionTaggedChangeSet {
-        RevisionTaggedChangeSet::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "revision",
-                        |m: &RevisionTaggedChangeSet| &m.revision,
-                        |m: &mut RevisionTaggedChangeSet| &mut m.revision,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ChangeSet>,
-                    >(
-                        "change_set",
-                        |m: &RevisionTaggedChangeSet| &m.change_set,
-                        |m: &mut RevisionTaggedChangeSet| &mut m.change_set,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<RevisionTaggedChangeSet>(
-                    "RevisionTaggedChangeSet",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static RevisionTaggedChangeSet {
-        static mut instance: ::protobuf::lazy::Lazy<RevisionTaggedChangeSet> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(RevisionTaggedChangeSet::new) }
-    }
-}
-
-impl ::protobuf::Clear for RevisionTaggedChangeSet {
-    fn clear(&mut self) {
-        self.revision.clear();
-        self.change_set.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for RevisionTaggedChangeSet {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for RevisionTaggedChangeSet {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Diff {
-    // message fields
-    from_revision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    ops: ::protobuf::RepeatedField<super::playlist4ops::Op>,
-    to_revision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Diff {
-    fn default() -> &'a Diff {
-        <Diff as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Diff {
-    pub fn new() -> Diff {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes from_revision = 1;
-
-    pub fn get_from_revision(&self) -> &[u8] {
-        match self.from_revision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_from_revision(&mut self) {
-        self.from_revision.clear();
-    }
-
-    pub fn has_from_revision(&self) -> bool {
-        self.from_revision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_from_revision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.from_revision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_from_revision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.from_revision.is_none() {
-            self.from_revision.set_default();
-        }
-        self.from_revision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_from_revision(&mut self) -> ::std::vec::Vec<u8> {
-        self.from_revision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // repeated .Op ops = 2;
-
-    pub fn get_ops(&self) -> &[super::playlist4ops::Op] {
-        &self.ops
-    }
-    pub fn clear_ops(&mut self) {
-        self.ops.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ops(&mut self, v: ::protobuf::RepeatedField<super::playlist4ops::Op>) {
-        self.ops = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_ops(&mut self) -> &mut ::protobuf::RepeatedField<super::playlist4ops::Op> {
-        &mut self.ops
-    }
-
-    // Take field
-    pub fn take_ops(&mut self) -> ::protobuf::RepeatedField<super::playlist4ops::Op> {
-        ::std::mem::replace(&mut self.ops, ::protobuf::RepeatedField::new())
-    }
-
-    // optional bytes to_revision = 3;
-
-    pub fn get_to_revision(&self) -> &[u8] {
-        match self.to_revision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_to_revision(&mut self) {
-        self.to_revision.clear();
-    }
-
-    pub fn has_to_revision(&self) -> bool {
-        self.to_revision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_to_revision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.to_revision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_to_revision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.to_revision.is_none() {
-            self.to_revision.set_default();
-        }
-        self.to_revision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_to_revision(&mut self) -> ::std::vec::Vec<u8> {
-        self.to_revision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for Diff {
-    fn is_initialized(&self) -> bool {
-        for v in &self.ops {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.from_revision,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.ops)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.to_revision)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.from_revision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        for value in &self.ops {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.to_revision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(3, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.from_revision.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        for v in &self.ops {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.to_revision.as_ref() {
-            os.write_bytes(3, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Diff {
-        Diff::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "from_revision",
-                        |m: &Diff| &m.from_revision,
-                        |m: &mut Diff| &mut m.from_revision,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4ops::Op>,
-                    >("ops", |m: &Diff| &m.ops, |m: &mut Diff| &mut m.ops),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "to_revision",
-                        |m: &Diff| &m.to_revision,
-                        |m: &mut Diff| &mut m.to_revision,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Diff>(
-                    "Diff",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Diff {
-        static mut instance: ::protobuf::lazy::Lazy<Diff> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Diff::new) }
-    }
-}
-
-impl ::protobuf::Clear for Diff {
-    fn clear(&mut self) {
-        self.from_revision.clear();
-        self.ops.clear();
-        self.to_revision.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Diff {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Diff {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListDump {
-    // message fields
-    latestRevision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    length: ::std::option::Option<i32>,
-    attributes: ::protobuf::SingularPtrField<super::playlist4meta::ListAttributes>,
-    checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    contents: ::protobuf::SingularPtrField<super::playlist4content::ListItems>,
-    pendingDeltas: ::protobuf::RepeatedField<Delta>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListDump {
-    fn default() -> &'a ListDump {
-        <ListDump as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListDump {
-    pub fn new() -> ListDump {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes latestRevision = 1;
-
-    pub fn get_latestRevision(&self) -> &[u8] {
-        match self.latestRevision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_latestRevision(&mut self) {
-        self.latestRevision.clear();
-    }
-
-    pub fn has_latestRevision(&self) -> bool {
-        self.latestRevision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_latestRevision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.latestRevision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_latestRevision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.latestRevision.is_none() {
-            self.latestRevision.set_default();
-        }
-        self.latestRevision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_latestRevision(&mut self) -> ::std::vec::Vec<u8> {
-        self.latestRevision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional int32 length = 2;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-
-    // optional .ListAttributes attributes = 3;
-
-    pub fn get_attributes(&self) -> &super::playlist4meta::ListAttributes {
-        self.attributes
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::default_instance())
-    }
-    pub fn clear_attributes(&mut self) {
-        self.attributes.clear();
-    }
-
-    pub fn has_attributes(&self) -> bool {
-        self.attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_attributes(&mut self, v: super::playlist4meta::ListAttributes) {
-        self.attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_attributes(&mut self) -> &mut super::playlist4meta::ListAttributes {
-        if self.attributes.is_none() {
-            self.attributes.set_default();
-        }
-        self.attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_attributes(&mut self) -> super::playlist4meta::ListAttributes {
-        self.attributes
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::new())
-    }
-
-    // optional .ListChecksum checksum = 4;
-
-    pub fn get_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_checksum(&mut self) {
-        self.checksum.clear();
-    }
-
-    pub fn has_checksum(&self) -> bool {
-        self.checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.checksum.is_none() {
-            self.checksum.set_default();
-        }
-        self.checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListItems contents = 5;
-
-    pub fn get_contents(&self) -> &super::playlist4content::ListItems {
-        self.contents
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4content::ListItems::default_instance())
-    }
-    pub fn clear_contents(&mut self) {
-        self.contents.clear();
-    }
-
-    pub fn has_contents(&self) -> bool {
-        self.contents.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_contents(&mut self, v: super::playlist4content::ListItems) {
-        self.contents = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_contents(&mut self) -> &mut super::playlist4content::ListItems {
-        if self.contents.is_none() {
-            self.contents.set_default();
-        }
-        self.contents.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_contents(&mut self) -> super::playlist4content::ListItems {
-        self.contents
-            .take()
-            .unwrap_or_else(|| super::playlist4content::ListItems::new())
-    }
-
-    // repeated .Delta pendingDeltas = 7;
-
-    pub fn get_pendingDeltas(&self) -> &[Delta] {
-        &self.pendingDeltas
-    }
-    pub fn clear_pendingDeltas(&mut self) {
-        self.pendingDeltas.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pendingDeltas(&mut self, v: ::protobuf::RepeatedField<Delta>) {
-        self.pendingDeltas = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_pendingDeltas(&mut self) -> &mut ::protobuf::RepeatedField<Delta> {
-        &mut self.pendingDeltas
-    }
-
-    // Take field
-    pub fn take_pendingDeltas(&mut self) -> ::protobuf::RepeatedField<Delta> {
-        ::std::mem::replace(&mut self.pendingDeltas, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for ListDump {
-    fn is_initialized(&self) -> bool {
-        for v in &self.attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.contents {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.pendingDeltas {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.latestRevision,
-                    )?;
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.attributes,
-                    )?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.checksum)?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.contents)?;
-                }
-                7 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.pendingDeltas,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.latestRevision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.contents.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.pendingDeltas {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.latestRevision.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(2, v)?;
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.contents.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.pendingDeltas {
-            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListDump {
-        ListDump::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "latestRevision",
-                        |m: &ListDump| &m.latestRevision,
-                        |m: &mut ListDump| &mut m.latestRevision,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length",
-                    |m: &ListDump| &m.length,
-                    |m: &mut ListDump| &mut m.length,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4meta::ListAttributes,
-                        >,
-                    >(
-                        "attributes",
-                        |m: &ListDump| &m.attributes,
-                        |m: &mut ListDump| &mut m.attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "checksum",
-                        |m: &ListDump| &m.checksum,
-                        |m: &mut ListDump| &mut m.checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4content::ListItems>,
-                    >(
-                        "contents",
-                        |m: &ListDump| &m.contents,
-                        |m: &mut ListDump| &mut m.contents,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Delta>,
-                    >(
-                        "pendingDeltas",
-                        |m: &ListDump| &m.pendingDeltas,
-                        |m: &mut ListDump| &mut m.pendingDeltas,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListDump>(
-                    "ListDump",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListDump {
-        static mut instance: ::protobuf::lazy::Lazy<ListDump> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListDump::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListDump {
-    fn clear(&mut self) {
-        self.latestRevision.clear();
-        self.length = ::std::option::Option::None;
-        self.attributes.clear();
-        self.checksum.clear();
-        self.contents.clear();
-        self.pendingDeltas.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListDump {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListDump {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListChanges {
-    // message fields
-    baseRevision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    deltas: ::protobuf::RepeatedField<Delta>,
-    wantResultingRevisions: ::std::option::Option<bool>,
-    wantSyncResult: ::std::option::Option<bool>,
-    dump: ::protobuf::SingularPtrField<ListDump>,
-    nonces: ::std::vec::Vec<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListChanges {
-    fn default() -> &'a ListChanges {
-        <ListChanges as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListChanges {
-    pub fn new() -> ListChanges {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes baseRevision = 1;
-
-    pub fn get_baseRevision(&self) -> &[u8] {
-        match self.baseRevision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_baseRevision(&mut self) {
-        self.baseRevision.clear();
-    }
-
-    pub fn has_baseRevision(&self) -> bool {
-        self.baseRevision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_baseRevision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.baseRevision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_baseRevision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.baseRevision.is_none() {
-            self.baseRevision.set_default();
-        }
-        self.baseRevision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_baseRevision(&mut self) -> ::std::vec::Vec<u8> {
-        self.baseRevision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // repeated .Delta deltas = 2;
-
-    pub fn get_deltas(&self) -> &[Delta] {
-        &self.deltas
-    }
-    pub fn clear_deltas(&mut self) {
-        self.deltas.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_deltas(&mut self, v: ::protobuf::RepeatedField<Delta>) {
-        self.deltas = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_deltas(&mut self) -> &mut ::protobuf::RepeatedField<Delta> {
-        &mut self.deltas
-    }
-
-    // Take field
-    pub fn take_deltas(&mut self) -> ::protobuf::RepeatedField<Delta> {
-        ::std::mem::replace(&mut self.deltas, ::protobuf::RepeatedField::new())
-    }
-
-    // optional bool wantResultingRevisions = 3;
-
-    pub fn get_wantResultingRevisions(&self) -> bool {
-        self.wantResultingRevisions.unwrap_or(false)
-    }
-    pub fn clear_wantResultingRevisions(&mut self) {
-        self.wantResultingRevisions = ::std::option::Option::None;
-    }
-
-    pub fn has_wantResultingRevisions(&self) -> bool {
-        self.wantResultingRevisions.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantResultingRevisions(&mut self, v: bool) {
-        self.wantResultingRevisions = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantSyncResult = 4;
-
-    pub fn get_wantSyncResult(&self) -> bool {
-        self.wantSyncResult.unwrap_or(false)
-    }
-    pub fn clear_wantSyncResult(&mut self) {
-        self.wantSyncResult = ::std::option::Option::None;
-    }
-
-    pub fn has_wantSyncResult(&self) -> bool {
-        self.wantSyncResult.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantSyncResult(&mut self, v: bool) {
-        self.wantSyncResult = ::std::option::Option::Some(v);
-    }
-
-    // optional .ListDump dump = 5;
-
-    pub fn get_dump(&self) -> &ListDump {
-        self.dump
-            .as_ref()
-            .unwrap_or_else(|| ListDump::default_instance())
-    }
-    pub fn clear_dump(&mut self) {
-        self.dump.clear();
-    }
-
-    pub fn has_dump(&self) -> bool {
-        self.dump.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_dump(&mut self, v: ListDump) {
-        self.dump = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_dump(&mut self) -> &mut ListDump {
-        if self.dump.is_none() {
-            self.dump.set_default();
-        }
-        self.dump.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_dump(&mut self) -> ListDump {
-        self.dump.take().unwrap_or_else(|| ListDump::new())
-    }
-
-    // repeated int32 nonces = 6;
-
-    pub fn get_nonces(&self) -> &[i32] {
-        &self.nonces
-    }
-    pub fn clear_nonces(&mut self) {
-        self.nonces.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_nonces(&mut self, v: ::std::vec::Vec<i32>) {
-        self.nonces = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_nonces(&mut self) -> &mut ::std::vec::Vec<i32> {
-        &mut self.nonces
-    }
-
-    // Take field
-    pub fn take_nonces(&mut self) -> ::std::vec::Vec<i32> {
-        ::std::mem::replace(&mut self.nonces, ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for ListChanges {
-    fn is_initialized(&self) -> bool {
-        for v in &self.deltas {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.dump {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.baseRevision,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.deltas)?;
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantResultingRevisions = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantSyncResult = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.dump)?;
-                }
-                6 => {
-                    ::protobuf::rt::read_repeated_int32_into(wire_type, is, &mut self.nonces)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.baseRevision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        for value in &self.deltas {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.wantResultingRevisions {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantSyncResult {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.dump.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.nonces {
-            my_size +=
-                ::protobuf::rt::value_size(6, *value, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.baseRevision.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        for v in &self.deltas {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.wantResultingRevisions {
-            os.write_bool(3, v)?;
-        }
-        if let Some(v) = self.wantSyncResult {
-            os.write_bool(4, v)?;
-        }
-        if let Some(ref v) = self.dump.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.nonces {
-            os.write_int32(6, *v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListChanges {
-        ListChanges::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "baseRevision",
-                        |m: &ListChanges| &m.baseRevision,
-                        |m: &mut ListChanges| &mut m.baseRevision,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Delta>,
-                    >(
-                        "deltas",
-                        |m: &ListChanges| &m.deltas,
-                        |m: &mut ListChanges| &mut m.deltas,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantResultingRevisions",
-                    |m: &ListChanges| &m.wantResultingRevisions,
-                    |m: &mut ListChanges| &mut m.wantResultingRevisions,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantSyncResult",
-                    |m: &ListChanges| &m.wantSyncResult,
-                    |m: &mut ListChanges| &mut m.wantSyncResult,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ListDump>,
-                    >(
-                        "dump",
-                        |m: &ListChanges| &m.dump,
-                        |m: &mut ListChanges| &mut m.dump,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "nonces",
-                    |m: &ListChanges| &m.nonces,
-                    |m: &mut ListChanges| &mut m.nonces,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListChanges>(
-                    "ListChanges",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListChanges {
-        static mut instance: ::protobuf::lazy::Lazy<ListChanges> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListChanges::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListChanges {
-    fn clear(&mut self) {
-        self.baseRevision.clear();
-        self.deltas.clear();
-        self.wantResultingRevisions = ::std::option::Option::None;
-        self.wantSyncResult = ::std::option::Option::None;
-        self.dump.clear();
-        self.nonces.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListChanges {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListChanges {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct SelectedListContent {
-    // message fields
-    revision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    length: ::std::option::Option<i32>,
-    attributes: ::protobuf::SingularPtrField<super::playlist4meta::ListAttributes>,
-    checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    contents: ::protobuf::SingularPtrField<super::playlist4content::ListItems>,
-    diff: ::protobuf::SingularPtrField<Diff>,
-    syncResult: ::protobuf::SingularPtrField<Diff>,
-    resultingRevisions: ::protobuf::RepeatedField<::std::vec::Vec<u8>>,
-    multipleHeads: ::std::option::Option<bool>,
-    upToDate: ::std::option::Option<bool>,
-    resolveAction: ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction>,
-    issues: ::protobuf::RepeatedField<super::playlist4issues::ClientIssue>,
-    nonces: ::std::vec::Vec<i32>,
-    owner_username: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a SelectedListContent {
-    fn default() -> &'a SelectedListContent {
-        <SelectedListContent as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl SelectedListContent {
-    pub fn new() -> SelectedListContent {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes revision = 1;
-
-    pub fn get_revision(&self) -> &[u8] {
-        match self.revision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_revision(&mut self) {
-        self.revision.clear();
-    }
-
-    pub fn has_revision(&self) -> bool {
-        self.revision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_revision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.revision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_revision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.revision.is_none() {
-            self.revision.set_default();
-        }
-        self.revision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_revision(&mut self) -> ::std::vec::Vec<u8> {
-        self.revision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional int32 length = 2;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-
-    // optional .ListAttributes attributes = 3;
-
-    pub fn get_attributes(&self) -> &super::playlist4meta::ListAttributes {
-        self.attributes
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::default_instance())
-    }
-    pub fn clear_attributes(&mut self) {
-        self.attributes.clear();
-    }
-
-    pub fn has_attributes(&self) -> bool {
-        self.attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_attributes(&mut self, v: super::playlist4meta::ListAttributes) {
-        self.attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_attributes(&mut self) -> &mut super::playlist4meta::ListAttributes {
-        if self.attributes.is_none() {
-            self.attributes.set_default();
-        }
-        self.attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_attributes(&mut self) -> super::playlist4meta::ListAttributes {
-        self.attributes
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::new())
-    }
-
-    // optional .ListChecksum checksum = 4;
-
-    pub fn get_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_checksum(&mut self) {
-        self.checksum.clear();
-    }
-
-    pub fn has_checksum(&self) -> bool {
-        self.checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.checksum.is_none() {
-            self.checksum.set_default();
-        }
-        self.checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListItems contents = 5;
-
-    pub fn get_contents(&self) -> &super::playlist4content::ListItems {
-        self.contents
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4content::ListItems::default_instance())
-    }
-    pub fn clear_contents(&mut self) {
-        self.contents.clear();
-    }
-
-    pub fn has_contents(&self) -> bool {
-        self.contents.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_contents(&mut self, v: super::playlist4content::ListItems) {
-        self.contents = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_contents(&mut self) -> &mut super::playlist4content::ListItems {
-        if self.contents.is_none() {
-            self.contents.set_default();
-        }
-        self.contents.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_contents(&mut self) -> super::playlist4content::ListItems {
-        self.contents
-            .take()
-            .unwrap_or_else(|| super::playlist4content::ListItems::new())
-    }
-
-    // optional .Diff diff = 6;
-
-    pub fn get_diff(&self) -> &Diff {
-        self.diff
-            .as_ref()
-            .unwrap_or_else(|| Diff::default_instance())
-    }
-    pub fn clear_diff(&mut self) {
-        self.diff.clear();
-    }
-
-    pub fn has_diff(&self) -> bool {
-        self.diff.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_diff(&mut self, v: Diff) {
-        self.diff = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_diff(&mut self) -> &mut Diff {
-        if self.diff.is_none() {
-            self.diff.set_default();
-        }
-        self.diff.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_diff(&mut self) -> Diff {
-        self.diff.take().unwrap_or_else(|| Diff::new())
-    }
-
-    // optional .Diff syncResult = 7;
-
-    pub fn get_syncResult(&self) -> &Diff {
-        self.syncResult
-            .as_ref()
-            .unwrap_or_else(|| Diff::default_instance())
-    }
-    pub fn clear_syncResult(&mut self) {
-        self.syncResult.clear();
-    }
-
-    pub fn has_syncResult(&self) -> bool {
-        self.syncResult.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_syncResult(&mut self, v: Diff) {
-        self.syncResult = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_syncResult(&mut self) -> &mut Diff {
-        if self.syncResult.is_none() {
-            self.syncResult.set_default();
-        }
-        self.syncResult.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_syncResult(&mut self) -> Diff {
-        self.syncResult.take().unwrap_or_else(|| Diff::new())
-    }
-
-    // repeated bytes resultingRevisions = 8;
-
-    pub fn get_resultingRevisions(&self) -> &[::std::vec::Vec<u8>] {
-        &self.resultingRevisions
-    }
-    pub fn clear_resultingRevisions(&mut self) {
-        self.resultingRevisions.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_resultingRevisions(&mut self, v: ::protobuf::RepeatedField<::std::vec::Vec<u8>>) {
-        self.resultingRevisions = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_resultingRevisions(
-        &mut self,
-    ) -> &mut ::protobuf::RepeatedField<::std::vec::Vec<u8>> {
-        &mut self.resultingRevisions
-    }
-
-    // Take field
-    pub fn take_resultingRevisions(&mut self) -> ::protobuf::RepeatedField<::std::vec::Vec<u8>> {
-        ::std::mem::replace(
-            &mut self.resultingRevisions,
-            ::protobuf::RepeatedField::new(),
-        )
-    }
-
-    // optional bool multipleHeads = 9;
-
-    pub fn get_multipleHeads(&self) -> bool {
-        self.multipleHeads.unwrap_or(false)
-    }
-    pub fn clear_multipleHeads(&mut self) {
-        self.multipleHeads = ::std::option::Option::None;
-    }
-
-    pub fn has_multipleHeads(&self) -> bool {
-        self.multipleHeads.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_multipleHeads(&mut self, v: bool) {
-        self.multipleHeads = ::std::option::Option::Some(v);
-    }
-
-    // optional bool upToDate = 10;
-
-    pub fn get_upToDate(&self) -> bool {
-        self.upToDate.unwrap_or(false)
-    }
-    pub fn clear_upToDate(&mut self) {
-        self.upToDate = ::std::option::Option::None;
-    }
-
-    pub fn has_upToDate(&self) -> bool {
-        self.upToDate.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_upToDate(&mut self, v: bool) {
-        self.upToDate = ::std::option::Option::Some(v);
-    }
-
-    // repeated .ClientResolveAction resolveAction = 12;
-
-    pub fn get_resolveAction(&self) -> &[super::playlist4issues::ClientResolveAction] {
-        &self.resolveAction
-    }
-    pub fn clear_resolveAction(&mut self) {
-        self.resolveAction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_resolveAction(
-        &mut self,
-        v: ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction>,
-    ) {
-        self.resolveAction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_resolveAction(
-        &mut self,
-    ) -> &mut ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction> {
-        &mut self.resolveAction
-    }
-
-    // Take field
-    pub fn take_resolveAction(
-        &mut self,
-    ) -> ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction> {
-        ::std::mem::replace(&mut self.resolveAction, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ClientIssue issues = 13;
-
-    pub fn get_issues(&self) -> &[super::playlist4issues::ClientIssue] {
-        &self.issues
-    }
-    pub fn clear_issues(&mut self) {
-        self.issues.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_issues(
-        &mut self,
-        v: ::protobuf::RepeatedField<super::playlist4issues::ClientIssue>,
-    ) {
-        self.issues = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_issues(
-        &mut self,
-    ) -> &mut ::protobuf::RepeatedField<super::playlist4issues::ClientIssue> {
-        &mut self.issues
-    }
-
-    // Take field
-    pub fn take_issues(
-        &mut self,
-    ) -> ::protobuf::RepeatedField<super::playlist4issues::ClientIssue> {
-        ::std::mem::replace(&mut self.issues, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated int32 nonces = 14;
-
-    pub fn get_nonces(&self) -> &[i32] {
-        &self.nonces
-    }
-    pub fn clear_nonces(&mut self) {
-        self.nonces.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_nonces(&mut self, v: ::std::vec::Vec<i32>) {
-        self.nonces = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_nonces(&mut self) -> &mut ::std::vec::Vec<i32> {
-        &mut self.nonces
-    }
-
-    // Take field
-    pub fn take_nonces(&mut self) -> ::std::vec::Vec<i32> {
-        ::std::mem::replace(&mut self.nonces, ::std::vec::Vec::new())
-    }
-
-    // optional string owner_username = 16;
-
-    pub fn get_owner_username(&self) -> &str {
-        match self.owner_username.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_owner_username(&mut self) {
-        self.owner_username.clear();
-    }
-
-    pub fn has_owner_username(&self) -> bool {
-        self.owner_username.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_owner_username(&mut self, v: ::std::string::String) {
-        self.owner_username = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_owner_username(&mut self) -> &mut ::std::string::String {
-        if self.owner_username.is_none() {
-            self.owner_username.set_default();
-        }
-        self.owner_username.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_owner_username(&mut self) -> ::std::string::String {
-        self.owner_username
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for SelectedListContent {
-    fn is_initialized(&self) -> bool {
-        for v in &self.attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.contents {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.diff {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.syncResult {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.resolveAction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.issues {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.revision)?;
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.attributes,
-                    )?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.checksum)?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.contents)?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.diff)?;
-                }
-                7 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.syncResult,
-                    )?;
-                }
-                8 => {
-                    ::protobuf::rt::read_repeated_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.resultingRevisions,
-                    )?;
-                }
-                9 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.multipleHeads = ::std::option::Option::Some(tmp);
-                }
-                10 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.upToDate = ::std::option::Option::Some(tmp);
-                }
-                12 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.resolveAction,
-                    )?;
-                }
-                13 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.issues)?;
-                }
-                14 => {
-                    ::protobuf::rt::read_repeated_int32_into(wire_type, is, &mut self.nonces)?;
-                }
-                16 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.owner_username,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.revision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.contents.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.diff.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.syncResult.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.resultingRevisions {
-            my_size += ::protobuf::rt::bytes_size(8, &value);
-        }
-        if let Some(v) = self.multipleHeads {
-            my_size += 2;
-        }
-        if let Some(v) = self.upToDate {
-            my_size += 2;
-        }
-        for value in &self.resolveAction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.issues {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.nonces {
-            my_size +=
-                ::protobuf::rt::value_size(14, *value, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.owner_username.as_ref() {
-            my_size += ::protobuf::rt::string_size(16, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.revision.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(2, v)?;
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.contents.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.diff.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.syncResult.as_ref() {
-            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.resultingRevisions {
-            os.write_bytes(8, &v)?;
-        }
-        if let Some(v) = self.multipleHeads {
-            os.write_bool(9, v)?;
-        }
-        if let Some(v) = self.upToDate {
-            os.write_bool(10, v)?;
-        }
-        for v in &self.resolveAction {
-            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.issues {
-            os.write_tag(13, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.nonces {
-            os.write_int32(14, *v)?;
-        }
-        if let Some(ref v) = self.owner_username.as_ref() {
-            os.write_string(16, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> SelectedListContent {
-        SelectedListContent::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "revision",
-                        |m: &SelectedListContent| &m.revision,
-                        |m: &mut SelectedListContent| &mut m.revision,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length",
-                    |m: &SelectedListContent| &m.length,
-                    |m: &mut SelectedListContent| &mut m.length,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4meta::ListAttributes,
-                        >,
-                    >(
-                        "attributes",
-                        |m: &SelectedListContent| &m.attributes,
-                        |m: &mut SelectedListContent| &mut m.attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "checksum",
-                        |m: &SelectedListContent| &m.checksum,
-                        |m: &mut SelectedListContent| &mut m.checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4content::ListItems>,
-                    >(
-                        "contents",
-                        |m: &SelectedListContent| &m.contents,
-                        |m: &mut SelectedListContent| &mut m.contents,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Diff>,
-                    >(
-                        "diff",
-                        |m: &SelectedListContent| &m.diff,
-                        |m: &mut SelectedListContent| &mut m.diff,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Diff>,
-                    >(
-                        "syncResult",
-                        |m: &SelectedListContent| &m.syncResult,
-                        |m: &mut SelectedListContent| &mut m.syncResult,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "resultingRevisions",
-                        |m: &SelectedListContent| &m.resultingRevisions,
-                        |m: &mut SelectedListContent| &mut m.resultingRevisions,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "multipleHeads",
-                    |m: &SelectedListContent| &m.multipleHeads,
-                    |m: &mut SelectedListContent| &mut m.multipleHeads,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "upToDate",
-                    |m: &SelectedListContent| &m.upToDate,
-                    |m: &mut SelectedListContent| &mut m.upToDate,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4issues::ClientResolveAction,
-                        >,
-                    >(
-                        "resolveAction",
-                        |m: &SelectedListContent| &m.resolveAction,
-                        |m: &mut SelectedListContent| &mut m.resolveAction,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4issues::ClientIssue>,
-                    >(
-                        "issues",
-                        |m: &SelectedListContent| &m.issues,
-                        |m: &mut SelectedListContent| &mut m.issues,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "nonces",
-                    |m: &SelectedListContent| &m.nonces,
-                    |m: &mut SelectedListContent| &mut m.nonces,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "owner_username",
-                        |m: &SelectedListContent| &m.owner_username,
-                        |m: &mut SelectedListContent| &mut m.owner_username,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<SelectedListContent>(
-                    "SelectedListContent",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static SelectedListContent {
-        static mut instance: ::protobuf::lazy::Lazy<SelectedListContent> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(SelectedListContent::new) }
-    }
-}
-
-impl ::protobuf::Clear for SelectedListContent {
-    fn clear(&mut self) {
-        self.revision.clear();
-        self.length = ::std::option::Option::None;
-        self.attributes.clear();
-        self.checksum.clear();
-        self.contents.clear();
-        self.diff.clear();
-        self.syncResult.clear();
-        self.resultingRevisions.clear();
-        self.multipleHeads = ::std::option::Option::None;
-        self.upToDate = ::std::option::Option::None;
-        self.resolveAction.clear();
-        self.issues.clear();
-        self.nonces.clear();
-        self.owner_username.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for SelectedListContent {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for SelectedListContent {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x16playlist4changes.proto\x12\0\"\xa0\x01\n\nChangeInfo\x12\x0e\n\x04\
-    user\x18\x01\x20\x01(\tB\0\x12\x13\n\ttimestamp\x18\x02\x20\x01(\x05B\0\
-    \x12\x0f\n\x05admin\x18\x03\x20\x01(\x08B\0\x12\x0e\n\x04undo\x18\x04\
-    \x20\x01(\x08B\0\x12\x0e\n\x04redo\x18\x05\x20\x01(\x08B\0\x12\x0f\n\x05\
-    merge\x18\x06\x20\x01(\x08B\0\x12\x14\n\ncompressed\x18\x07\x20\x01(\x08\
-    B\0\x12\x13\n\tmigration\x18\x08\x20\x01(\x08B\0:\0\"R\n\x05Delta\x12\
-    \x16\n\x0cbase_version\x18\x01\x20\x01(\x0cB\0\x12\x12\n\x03ops\x18\x02\
-    \x20\x03(\x0b2\x03.OpB\0\x12\x1b\n\x04info\x18\x04\x20\x01(\x0b2\x0b.Cha\
-    ngeInfoB\0:\0\"W\n\x05Merge\x12\x16\n\x0cbase_version\x18\x01\x20\x01(\
-    \x0cB\0\x12\x17\n\rmerge_version\x18\x02\x20\x01(\x0cB\0\x12\x1b\n\x04in\
-    fo\x18\x04\x20\x01(\x0b2\x0b.ChangeInfoB\0:\0\"\x92\x01\n\tChangeSet\x12\
-    \x1f\n\x04kind\x18\x01\x20\x01(\x0e2\x0f.ChangeSet.KindB\0\x12\x17\n\x05\
-    delta\x18\x02\x20\x01(\x0b2\x06.DeltaB\0\x12\x17\n\x05merge\x18\x03\x20\
-    \x01(\x0b2\x06.MergeB\0\"0\n\x04Kind\x12\x10\n\x0cKIND_UNKNOWN\x10\0\x12\
-    \t\n\x05DELTA\x10\x02\x12\t\n\x05MERGE\x10\x03\x1a\0:\0\"Q\n\x17Revision\
-    TaggedChangeSet\x12\x12\n\x08revision\x18\x01\x20\x01(\x0cB\0\x12\x20\n\
-    \nchange_set\x18\x02\x20\x01(\x0b2\n.ChangeSetB\0:\0\"L\n\x04Diff\x12\
-    \x17\n\rfrom_revision\x18\x01\x20\x01(\x0cB\0\x12\x12\n\x03ops\x18\x02\
-    \x20\x03(\x0b2\x03.OpB\0\x12\x15\n\x0bto_revision\x18\x03\x20\x01(\x0cB\
-    \0:\0\"\xc3\x01\n\x08ListDump\x12\x18\n\x0elatestRevision\x18\x01\x20\
-    \x01(\x0cB\0\x12\x10\n\x06length\x18\x02\x20\x01(\x05B\0\x12%\n\nattribu\
-    tes\x18\x03\x20\x01(\x0b2\x0f.ListAttributesB\0\x12!\n\x08checksum\x18\
-    \x04\x20\x01(\x0b2\r.ListChecksumB\0\x12\x1e\n\x08contents\x18\x05\x20\
-    \x01(\x0b2\n.ListItemsB\0\x12\x1f\n\rpendingDeltas\x18\x07\x20\x03(\x0b2\
-    \x06.DeltaB\0:\0\"\xaa\x01\n\x0bListChanges\x12\x16\n\x0cbaseRevision\
-    \x18\x01\x20\x01(\x0cB\0\x12\x18\n\x06deltas\x18\x02\x20\x03(\x0b2\x06.D\
-    eltaB\0\x12\x20\n\x16wantResultingRevisions\x18\x03\x20\x01(\x08B\0\x12\
-    \x18\n\x0ewantSyncResult\x18\x04\x20\x01(\x08B\0\x12\x19\n\x04dump\x18\
-    \x05\x20\x01(\x0b2\t.ListDumpB\0\x12\x10\n\x06nonces\x18\x06\x20\x03(\
-    \x05B\0:\0\"\xa1\x03\n\x13SelectedListContent\x12\x12\n\x08revision\x18\
-    \x01\x20\x01(\x0cB\0\x12\x10\n\x06length\x18\x02\x20\x01(\x05B\0\x12%\n\
-    \nattributes\x18\x03\x20\x01(\x0b2\x0f.ListAttributesB\0\x12!\n\x08check\
-    sum\x18\x04\x20\x01(\x0b2\r.ListChecksumB\0\x12\x1e\n\x08contents\x18\
-    \x05\x20\x01(\x0b2\n.ListItemsB\0\x12\x15\n\x04diff\x18\x06\x20\x01(\x0b\
-    2\x05.DiffB\0\x12\x1b\n\nsyncResult\x18\x07\x20\x01(\x0b2\x05.DiffB\0\
-    \x12\x1c\n\x12resultingRevisions\x18\x08\x20\x03(\x0cB\0\x12\x17\n\rmult\
-    ipleHeads\x18\t\x20\x01(\x08B\0\x12\x12\n\x08upToDate\x18\n\x20\x01(\x08\
-    B\0\x12-\n\rresolveAction\x18\x0c\x20\x03(\x0b2\x14.ClientResolveActionB\
-    \0\x12\x1e\n\x06issues\x18\r\x20\x03(\x0b2\x0c.ClientIssueB\0\x12\x10\n\
-    \x06nonces\x18\x0e\x20\x03(\x05B\0\x12\x18\n\x0eowner_username\x18\x10\
-    \x20\x01(\tB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 1597
protocol/src/playlist4content.rs

@@ -1,1597 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `playlist4content.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Item {
-    // message fields
-    uri: ::protobuf::SingularField<::std::string::String>,
-    attributes: ::protobuf::SingularPtrField<super::playlist4meta::ItemAttributes>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Item {
-    fn default() -> &'a Item {
-        <Item as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Item {
-    pub fn new() -> Item {
-        ::std::default::Default::default()
-    }
-
-    // optional string uri = 1;
-
-    pub fn get_uri(&self) -> &str {
-        match self.uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_uri(&mut self) {
-        self.uri.clear();
-    }
-
-    pub fn has_uri(&self) -> bool {
-        self.uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uri(&mut self, v: ::std::string::String) {
-        self.uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
-        if self.uri.is_none() {
-            self.uri.set_default();
-        }
-        self.uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uri(&mut self) -> ::std::string::String {
-        self.uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .ItemAttributes attributes = 2;
-
-    pub fn get_attributes(&self) -> &super::playlist4meta::ItemAttributes {
-        self.attributes
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ItemAttributes::default_instance())
-    }
-    pub fn clear_attributes(&mut self) {
-        self.attributes.clear();
-    }
-
-    pub fn has_attributes(&self) -> bool {
-        self.attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_attributes(&mut self, v: super::playlist4meta::ItemAttributes) {
-        self.attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_attributes(&mut self) -> &mut super::playlist4meta::ItemAttributes {
-        if self.attributes.is_none() {
-            self.attributes.set_default();
-        }
-        self.attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_attributes(&mut self) -> super::playlist4meta::ItemAttributes {
-        self.attributes
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ItemAttributes::new())
-    }
-}
-
-impl ::protobuf::Message for Item {
-    fn is_initialized(&self) -> bool {
-        for v in &self.attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.uri)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.attributes,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.uri.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.attributes.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Item {
-        Item::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >("uri", |m: &Item| &m.uri, |m: &mut Item| &mut m.uri),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4meta::ItemAttributes,
-                        >,
-                    >(
-                        "attributes",
-                        |m: &Item| &m.attributes,
-                        |m: &mut Item| &mut m.attributes,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Item>(
-                    "Item",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Item {
-        static mut instance: ::protobuf::lazy::Lazy<Item> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Item::new) }
-    }
-}
-
-impl ::protobuf::Clear for Item {
-    fn clear(&mut self) {
-        self.uri.clear();
-        self.attributes.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Item {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Item {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListItems {
-    // message fields
-    pos: ::std::option::Option<i32>,
-    truncated: ::std::option::Option<bool>,
-    items: ::protobuf::RepeatedField<Item>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListItems {
-    fn default() -> &'a ListItems {
-        <ListItems as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListItems {
-    pub fn new() -> ListItems {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 pos = 1;
-
-    pub fn get_pos(&self) -> i32 {
-        self.pos.unwrap_or(0)
-    }
-    pub fn clear_pos(&mut self) {
-        self.pos = ::std::option::Option::None;
-    }
-
-    pub fn has_pos(&self) -> bool {
-        self.pos.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pos(&mut self, v: i32) {
-        self.pos = ::std::option::Option::Some(v);
-    }
-
-    // optional bool truncated = 2;
-
-    pub fn get_truncated(&self) -> bool {
-        self.truncated.unwrap_or(false)
-    }
-    pub fn clear_truncated(&mut self) {
-        self.truncated = ::std::option::Option::None;
-    }
-
-    pub fn has_truncated(&self) -> bool {
-        self.truncated.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_truncated(&mut self, v: bool) {
-        self.truncated = ::std::option::Option::Some(v);
-    }
-
-    // repeated .Item items = 3;
-
-    pub fn get_items(&self) -> &[Item] {
-        &self.items
-    }
-    pub fn clear_items(&mut self) {
-        self.items.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_items(&mut self, v: ::protobuf::RepeatedField<Item>) {
-        self.items = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_items(&mut self) -> &mut ::protobuf::RepeatedField<Item> {
-        &mut self.items
-    }
-
-    // Take field
-    pub fn take_items(&mut self) -> ::protobuf::RepeatedField<Item> {
-        ::std::mem::replace(&mut self.items, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for ListItems {
-    fn is_initialized(&self) -> bool {
-        for v in &self.items {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.pos = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.truncated = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.items)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.pos {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.truncated {
-            my_size += 2;
-        }
-        for value in &self.items {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.pos {
-            os.write_int32(1, v)?;
-        }
-        if let Some(v) = self.truncated {
-            os.write_bool(2, v)?;
-        }
-        for v in &self.items {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListItems {
-        ListItems::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "pos",
-                    |m: &ListItems| &m.pos,
-                    |m: &mut ListItems| &mut m.pos,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "truncated",
-                    |m: &ListItems| &m.truncated,
-                    |m: &mut ListItems| &mut m.truncated,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Item>,
-                    >(
-                        "items",
-                        |m: &ListItems| &m.items,
-                        |m: &mut ListItems| &mut m.items,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListItems>(
-                    "ListItems",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListItems {
-        static mut instance: ::protobuf::lazy::Lazy<ListItems> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListItems::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListItems {
-    fn clear(&mut self) {
-        self.pos = ::std::option::Option::None;
-        self.truncated = ::std::option::Option::None;
-        self.items.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListItems {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListItems {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ContentRange {
-    // message fields
-    pos: ::std::option::Option<i32>,
-    length: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ContentRange {
-    fn default() -> &'a ContentRange {
-        <ContentRange as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ContentRange {
-    pub fn new() -> ContentRange {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 pos = 1;
-
-    pub fn get_pos(&self) -> i32 {
-        self.pos.unwrap_or(0)
-    }
-    pub fn clear_pos(&mut self) {
-        self.pos = ::std::option::Option::None;
-    }
-
-    pub fn has_pos(&self) -> bool {
-        self.pos.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pos(&mut self, v: i32) {
-        self.pos = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 length = 2;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ContentRange {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.pos = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.pos {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.pos {
-            os.write_int32(1, v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(2, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ContentRange {
-        ContentRange::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "pos",
-                    |m: &ContentRange| &m.pos,
-                    |m: &mut ContentRange| &mut m.pos,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length",
-                    |m: &ContentRange| &m.length,
-                    |m: &mut ContentRange| &mut m.length,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ContentRange>(
-                    "ContentRange",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ContentRange {
-        static mut instance: ::protobuf::lazy::Lazy<ContentRange> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ContentRange::new) }
-    }
-}
-
-impl ::protobuf::Clear for ContentRange {
-    fn clear(&mut self) {
-        self.pos = ::std::option::Option::None;
-        self.length = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ContentRange {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ContentRange {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListContentSelection {
-    // message fields
-    wantRevision: ::std::option::Option<bool>,
-    wantLength: ::std::option::Option<bool>,
-    wantAttributes: ::std::option::Option<bool>,
-    wantChecksum: ::std::option::Option<bool>,
-    wantContent: ::std::option::Option<bool>,
-    contentRange: ::protobuf::SingularPtrField<ContentRange>,
-    wantDiff: ::std::option::Option<bool>,
-    baseRevision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    hintRevision: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    wantNothingIfUpToDate: ::std::option::Option<bool>,
-    wantResolveAction: ::std::option::Option<bool>,
-    issues: ::protobuf::RepeatedField<super::playlist4issues::ClientIssue>,
-    resolveAction: ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListContentSelection {
-    fn default() -> &'a ListContentSelection {
-        <ListContentSelection as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListContentSelection {
-    pub fn new() -> ListContentSelection {
-        ::std::default::Default::default()
-    }
-
-    // optional bool wantRevision = 1;
-
-    pub fn get_wantRevision(&self) -> bool {
-        self.wantRevision.unwrap_or(false)
-    }
-    pub fn clear_wantRevision(&mut self) {
-        self.wantRevision = ::std::option::Option::None;
-    }
-
-    pub fn has_wantRevision(&self) -> bool {
-        self.wantRevision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantRevision(&mut self, v: bool) {
-        self.wantRevision = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantLength = 2;
-
-    pub fn get_wantLength(&self) -> bool {
-        self.wantLength.unwrap_or(false)
-    }
-    pub fn clear_wantLength(&mut self) {
-        self.wantLength = ::std::option::Option::None;
-    }
-
-    pub fn has_wantLength(&self) -> bool {
-        self.wantLength.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantLength(&mut self, v: bool) {
-        self.wantLength = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantAttributes = 3;
-
-    pub fn get_wantAttributes(&self) -> bool {
-        self.wantAttributes.unwrap_or(false)
-    }
-    pub fn clear_wantAttributes(&mut self) {
-        self.wantAttributes = ::std::option::Option::None;
-    }
-
-    pub fn has_wantAttributes(&self) -> bool {
-        self.wantAttributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantAttributes(&mut self, v: bool) {
-        self.wantAttributes = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantChecksum = 4;
-
-    pub fn get_wantChecksum(&self) -> bool {
-        self.wantChecksum.unwrap_or(false)
-    }
-    pub fn clear_wantChecksum(&mut self) {
-        self.wantChecksum = ::std::option::Option::None;
-    }
-
-    pub fn has_wantChecksum(&self) -> bool {
-        self.wantChecksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantChecksum(&mut self, v: bool) {
-        self.wantChecksum = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantContent = 5;
-
-    pub fn get_wantContent(&self) -> bool {
-        self.wantContent.unwrap_or(false)
-    }
-    pub fn clear_wantContent(&mut self) {
-        self.wantContent = ::std::option::Option::None;
-    }
-
-    pub fn has_wantContent(&self) -> bool {
-        self.wantContent.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantContent(&mut self, v: bool) {
-        self.wantContent = ::std::option::Option::Some(v);
-    }
-
-    // optional .ContentRange contentRange = 6;
-
-    pub fn get_contentRange(&self) -> &ContentRange {
-        self.contentRange
-            .as_ref()
-            .unwrap_or_else(|| ContentRange::default_instance())
-    }
-    pub fn clear_contentRange(&mut self) {
-        self.contentRange.clear();
-    }
-
-    pub fn has_contentRange(&self) -> bool {
-        self.contentRange.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_contentRange(&mut self, v: ContentRange) {
-        self.contentRange = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_contentRange(&mut self) -> &mut ContentRange {
-        if self.contentRange.is_none() {
-            self.contentRange.set_default();
-        }
-        self.contentRange.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_contentRange(&mut self) -> ContentRange {
-        self.contentRange
-            .take()
-            .unwrap_or_else(|| ContentRange::new())
-    }
-
-    // optional bool wantDiff = 7;
-
-    pub fn get_wantDiff(&self) -> bool {
-        self.wantDiff.unwrap_or(false)
-    }
-    pub fn clear_wantDiff(&mut self) {
-        self.wantDiff = ::std::option::Option::None;
-    }
-
-    pub fn has_wantDiff(&self) -> bool {
-        self.wantDiff.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantDiff(&mut self, v: bool) {
-        self.wantDiff = ::std::option::Option::Some(v);
-    }
-
-    // optional bytes baseRevision = 8;
-
-    pub fn get_baseRevision(&self) -> &[u8] {
-        match self.baseRevision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_baseRevision(&mut self) {
-        self.baseRevision.clear();
-    }
-
-    pub fn has_baseRevision(&self) -> bool {
-        self.baseRevision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_baseRevision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.baseRevision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_baseRevision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.baseRevision.is_none() {
-            self.baseRevision.set_default();
-        }
-        self.baseRevision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_baseRevision(&mut self) -> ::std::vec::Vec<u8> {
-        self.baseRevision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes hintRevision = 9;
-
-    pub fn get_hintRevision(&self) -> &[u8] {
-        match self.hintRevision.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_hintRevision(&mut self) {
-        self.hintRevision.clear();
-    }
-
-    pub fn has_hintRevision(&self) -> bool {
-        self.hintRevision.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_hintRevision(&mut self, v: ::std::vec::Vec<u8>) {
-        self.hintRevision = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_hintRevision(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.hintRevision.is_none() {
-            self.hintRevision.set_default();
-        }
-        self.hintRevision.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_hintRevision(&mut self) -> ::std::vec::Vec<u8> {
-        self.hintRevision
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bool wantNothingIfUpToDate = 10;
-
-    pub fn get_wantNothingIfUpToDate(&self) -> bool {
-        self.wantNothingIfUpToDate.unwrap_or(false)
-    }
-    pub fn clear_wantNothingIfUpToDate(&mut self) {
-        self.wantNothingIfUpToDate = ::std::option::Option::None;
-    }
-
-    pub fn has_wantNothingIfUpToDate(&self) -> bool {
-        self.wantNothingIfUpToDate.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantNothingIfUpToDate(&mut self, v: bool) {
-        self.wantNothingIfUpToDate = ::std::option::Option::Some(v);
-    }
-
-    // optional bool wantResolveAction = 12;
-
-    pub fn get_wantResolveAction(&self) -> bool {
-        self.wantResolveAction.unwrap_or(false)
-    }
-    pub fn clear_wantResolveAction(&mut self) {
-        self.wantResolveAction = ::std::option::Option::None;
-    }
-
-    pub fn has_wantResolveAction(&self) -> bool {
-        self.wantResolveAction.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_wantResolveAction(&mut self, v: bool) {
-        self.wantResolveAction = ::std::option::Option::Some(v);
-    }
-
-    // repeated .ClientIssue issues = 13;
-
-    pub fn get_issues(&self) -> &[super::playlist4issues::ClientIssue] {
-        &self.issues
-    }
-    pub fn clear_issues(&mut self) {
-        self.issues.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_issues(
-        &mut self,
-        v: ::protobuf::RepeatedField<super::playlist4issues::ClientIssue>,
-    ) {
-        self.issues = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_issues(
-        &mut self,
-    ) -> &mut ::protobuf::RepeatedField<super::playlist4issues::ClientIssue> {
-        &mut self.issues
-    }
-
-    // Take field
-    pub fn take_issues(
-        &mut self,
-    ) -> ::protobuf::RepeatedField<super::playlist4issues::ClientIssue> {
-        ::std::mem::replace(&mut self.issues, ::protobuf::RepeatedField::new())
-    }
-
-    // repeated .ClientResolveAction resolveAction = 14;
-
-    pub fn get_resolveAction(&self) -> &[super::playlist4issues::ClientResolveAction] {
-        &self.resolveAction
-    }
-    pub fn clear_resolveAction(&mut self) {
-        self.resolveAction.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_resolveAction(
-        &mut self,
-        v: ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction>,
-    ) {
-        self.resolveAction = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_resolveAction(
-        &mut self,
-    ) -> &mut ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction> {
-        &mut self.resolveAction
-    }
-
-    // Take field
-    pub fn take_resolveAction(
-        &mut self,
-    ) -> ::protobuf::RepeatedField<super::playlist4issues::ClientResolveAction> {
-        ::std::mem::replace(&mut self.resolveAction, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for ListContentSelection {
-    fn is_initialized(&self) -> bool {
-        for v in &self.contentRange {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.issues {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.resolveAction {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantRevision = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantLength = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantAttributes = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantChecksum = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantContent = ::std::option::Option::Some(tmp);
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.contentRange,
-                    )?;
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantDiff = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.baseRevision,
-                    )?;
-                }
-                9 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.hintRevision,
-                    )?;
-                }
-                10 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantNothingIfUpToDate = ::std::option::Option::Some(tmp);
-                }
-                12 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.wantResolveAction = ::std::option::Option::Some(tmp);
-                }
-                13 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.issues)?;
-                }
-                14 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.resolveAction,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.wantRevision {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantLength {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantAttributes {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantChecksum {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantContent {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.contentRange.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.wantDiff {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.baseRevision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(8, &v);
-        }
-        if let Some(ref v) = self.hintRevision.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(9, &v);
-        }
-        if let Some(v) = self.wantNothingIfUpToDate {
-            my_size += 2;
-        }
-        if let Some(v) = self.wantResolveAction {
-            my_size += 2;
-        }
-        for value in &self.issues {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.resolveAction {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.wantRevision {
-            os.write_bool(1, v)?;
-        }
-        if let Some(v) = self.wantLength {
-            os.write_bool(2, v)?;
-        }
-        if let Some(v) = self.wantAttributes {
-            os.write_bool(3, v)?;
-        }
-        if let Some(v) = self.wantChecksum {
-            os.write_bool(4, v)?;
-        }
-        if let Some(v) = self.wantContent {
-            os.write_bool(5, v)?;
-        }
-        if let Some(ref v) = self.contentRange.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.wantDiff {
-            os.write_bool(7, v)?;
-        }
-        if let Some(ref v) = self.baseRevision.as_ref() {
-            os.write_bytes(8, &v)?;
-        }
-        if let Some(ref v) = self.hintRevision.as_ref() {
-            os.write_bytes(9, &v)?;
-        }
-        if let Some(v) = self.wantNothingIfUpToDate {
-            os.write_bool(10, v)?;
-        }
-        if let Some(v) = self.wantResolveAction {
-            os.write_bool(12, v)?;
-        }
-        for v in &self.issues {
-            os.write_tag(13, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.resolveAction {
-            os.write_tag(14, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListContentSelection {
-        ListContentSelection::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantRevision",
-                    |m: &ListContentSelection| &m.wantRevision,
-                    |m: &mut ListContentSelection| &mut m.wantRevision,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantLength",
-                    |m: &ListContentSelection| &m.wantLength,
-                    |m: &mut ListContentSelection| &mut m.wantLength,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantAttributes",
-                    |m: &ListContentSelection| &m.wantAttributes,
-                    |m: &mut ListContentSelection| &mut m.wantAttributes,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantChecksum",
-                    |m: &ListContentSelection| &m.wantChecksum,
-                    |m: &mut ListContentSelection| &mut m.wantChecksum,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantContent",
-                    |m: &ListContentSelection| &m.wantContent,
-                    |m: &mut ListContentSelection| &mut m.wantContent,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ContentRange>,
-                    >(
-                        "contentRange",
-                        |m: &ListContentSelection| &m.contentRange,
-                        |m: &mut ListContentSelection| &mut m.contentRange,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantDiff",
-                    |m: &ListContentSelection| &m.wantDiff,
-                    |m: &mut ListContentSelection| &mut m.wantDiff,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "baseRevision",
-                        |m: &ListContentSelection| &m.baseRevision,
-                        |m: &mut ListContentSelection| &mut m.baseRevision,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "hintRevision",
-                        |m: &ListContentSelection| &m.hintRevision,
-                        |m: &mut ListContentSelection| &mut m.hintRevision,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantNothingIfUpToDate",
-                    |m: &ListContentSelection| &m.wantNothingIfUpToDate,
-                    |m: &mut ListContentSelection| &mut m.wantNothingIfUpToDate,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "wantResolveAction",
-                    |m: &ListContentSelection| &m.wantResolveAction,
-                    |m: &mut ListContentSelection| &mut m.wantResolveAction,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4issues::ClientIssue>,
-                    >(
-                        "issues",
-                        |m: &ListContentSelection| &m.issues,
-                        |m: &mut ListContentSelection| &mut m.issues,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4issues::ClientResolveAction,
-                        >,
-                    >(
-                        "resolveAction",
-                        |m: &ListContentSelection| &m.resolveAction,
-                        |m: &mut ListContentSelection| &mut m.resolveAction,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListContentSelection>(
-                    "ListContentSelection",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListContentSelection {
-        static mut instance: ::protobuf::lazy::Lazy<ListContentSelection> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListContentSelection::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListContentSelection {
-    fn clear(&mut self) {
-        self.wantRevision = ::std::option::Option::None;
-        self.wantLength = ::std::option::Option::None;
-        self.wantAttributes = ::std::option::Option::None;
-        self.wantChecksum = ::std::option::Option::None;
-        self.wantContent = ::std::option::Option::None;
-        self.contentRange.clear();
-        self.wantDiff = ::std::option::Option::None;
-        self.baseRevision.clear();
-        self.hintRevision.clear();
-        self.wantNothingIfUpToDate = ::std::option::Option::None;
-        self.wantResolveAction = ::std::option::Option::None;
-        self.issues.clear();
-        self.resolveAction.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListContentSelection {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListContentSelection {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x16playlist4content.proto\x12\0\">\n\x04Item\x12\r\n\x03uri\x18\x01\
-    \x20\x01(\tB\0\x12%\n\nattributes\x18\x02\x20\x01(\x0b2\x0f.ItemAttribut\
-    esB\0:\0\"I\n\tListItems\x12\r\n\x03pos\x18\x01\x20\x01(\x05B\0\x12\x13\
-    \n\ttruncated\x18\x02\x20\x01(\x08B\0\x12\x16\n\x05items\x18\x03\x20\x03\
-    (\x0b2\x05.ItemB\0:\0\"1\n\x0cContentRange\x12\r\n\x03pos\x18\x01\x20\
-    \x01(\x05B\0\x12\x10\n\x06length\x18\x02\x20\x01(\x05B\0:\0\"\x87\x03\n\
-    \x14ListContentSelection\x12\x16\n\x0cwantRevision\x18\x01\x20\x01(\x08B\
-    \0\x12\x14\n\nwantLength\x18\x02\x20\x01(\x08B\0\x12\x18\n\x0ewantAttrib\
-    utes\x18\x03\x20\x01(\x08B\0\x12\x16\n\x0cwantChecksum\x18\x04\x20\x01(\
-    \x08B\0\x12\x15\n\x0bwantContent\x18\x05\x20\x01(\x08B\0\x12%\n\x0cconte\
-    ntRange\x18\x06\x20\x01(\x0b2\r.ContentRangeB\0\x12\x12\n\x08wantDiff\
-    \x18\x07\x20\x01(\x08B\0\x12\x16\n\x0cbaseRevision\x18\x08\x20\x01(\x0cB\
-    \0\x12\x16\n\x0chintRevision\x18\t\x20\x01(\x0cB\0\x12\x1f\n\x15wantNoth\
-    ingIfUpToDate\x18\n\x20\x01(\x08B\0\x12\x1b\n\x11wantResolveAction\x18\
-    \x0c\x20\x01(\x08B\0\x12\x1e\n\x06issues\x18\r\x20\x03(\x0b2\x0c.ClientI\
-    ssueB\0\x12-\n\rresolveAction\x18\x0e\x20\x03(\x0b2\x14.ClientResolveAct\
-    ionB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 794
protocol/src/playlist4issues.rs

@@ -1,794 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `playlist4issues.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientIssue {
-    // message fields
-    level: ::std::option::Option<ClientIssue_Level>,
-    code: ::std::option::Option<ClientIssue_Code>,
-    repeatCount: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientIssue {
-    fn default() -> &'a ClientIssue {
-        <ClientIssue as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientIssue {
-    pub fn new() -> ClientIssue {
-        ::std::default::Default::default()
-    }
-
-    // optional .ClientIssue.Level level = 1;
-
-    pub fn get_level(&self) -> ClientIssue_Level {
-        self.level.unwrap_or(ClientIssue_Level::LEVEL_UNKNOWN)
-    }
-    pub fn clear_level(&mut self) {
-        self.level = ::std::option::Option::None;
-    }
-
-    pub fn has_level(&self) -> bool {
-        self.level.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_level(&mut self, v: ClientIssue_Level) {
-        self.level = ::std::option::Option::Some(v);
-    }
-
-    // optional .ClientIssue.Code code = 2;
-
-    pub fn get_code(&self) -> ClientIssue_Code {
-        self.code.unwrap_or(ClientIssue_Code::CODE_UNKNOWN)
-    }
-    pub fn clear_code(&mut self) {
-        self.code = ::std::option::Option::None;
-    }
-
-    pub fn has_code(&self) -> bool {
-        self.code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_code(&mut self, v: ClientIssue_Code) {
-        self.code = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 repeatCount = 3;
-
-    pub fn get_repeatCount(&self) -> i32 {
-        self.repeatCount.unwrap_or(0)
-    }
-    pub fn clear_repeatCount(&mut self) {
-        self.repeatCount = ::std::option::Option::None;
-    }
-
-    pub fn has_repeatCount(&self) -> bool {
-        self.repeatCount.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_repeatCount(&mut self, v: i32) {
-        self.repeatCount = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ClientIssue {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.level,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.code,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.repeatCount = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.level {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        if let Some(v) = self.code {
-            my_size += ::protobuf::rt::enum_size(2, v);
-        }
-        if let Some(v) = self.repeatCount {
-            my_size += ::protobuf::rt::value_size(3, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.level {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(v) = self.code {
-            os.write_enum(2, v.value())?;
-        }
-        if let Some(v) = self.repeatCount {
-            os.write_int32(3, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientIssue {
-        ClientIssue::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ClientIssue_Level>,
-                >(
-                    "level",
-                    |m: &ClientIssue| &m.level,
-                    |m: &mut ClientIssue| &mut m.level,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ClientIssue_Code>,
-                >(
-                    "code",
-                    |m: &ClientIssue| &m.code,
-                    |m: &mut ClientIssue| &mut m.code,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "repeatCount",
-                    |m: &ClientIssue| &m.repeatCount,
-                    |m: &mut ClientIssue| &mut m.repeatCount,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientIssue>(
-                    "ClientIssue",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientIssue {
-        static mut instance: ::protobuf::lazy::Lazy<ClientIssue> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientIssue::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientIssue {
-    fn clear(&mut self) {
-        self.level = ::std::option::Option::None;
-        self.code = ::std::option::Option::None;
-        self.repeatCount = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientIssue {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientIssue {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ClientIssue_Level {
-    LEVEL_UNKNOWN = 0,
-    LEVEL_DEBUG = 1,
-    LEVEL_INFO = 2,
-    LEVEL_NOTICE = 3,
-    LEVEL_WARNING = 4,
-    LEVEL_ERROR = 5,
-}
-
-impl ::protobuf::ProtobufEnum for ClientIssue_Level {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ClientIssue_Level> {
-        match value {
-            0 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_UNKNOWN),
-            1 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_DEBUG),
-            2 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_INFO),
-            3 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_NOTICE),
-            4 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_WARNING),
-            5 => ::std::option::Option::Some(ClientIssue_Level::LEVEL_ERROR),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ClientIssue_Level] = &[
-            ClientIssue_Level::LEVEL_UNKNOWN,
-            ClientIssue_Level::LEVEL_DEBUG,
-            ClientIssue_Level::LEVEL_INFO,
-            ClientIssue_Level::LEVEL_NOTICE,
-            ClientIssue_Level::LEVEL_WARNING,
-            ClientIssue_Level::LEVEL_ERROR,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ClientIssue_Level>(
-                    "ClientIssue.Level",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ClientIssue_Level {}
-
-impl ::std::default::Default for ClientIssue_Level {
-    fn default() -> Self {
-        ClientIssue_Level::LEVEL_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientIssue_Level {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ClientIssue_Code {
-    CODE_UNKNOWN = 0,
-    CODE_INDEX_OUT_OF_BOUNDS = 1,
-    CODE_VERSION_MISMATCH = 2,
-    CODE_CACHED_CHANGE = 3,
-    CODE_OFFLINE_CHANGE = 4,
-    CODE_CONCURRENT_CHANGE = 5,
-}
-
-impl ::protobuf::ProtobufEnum for ClientIssue_Code {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ClientIssue_Code> {
-        match value {
-            0 => ::std::option::Option::Some(ClientIssue_Code::CODE_UNKNOWN),
-            1 => ::std::option::Option::Some(ClientIssue_Code::CODE_INDEX_OUT_OF_BOUNDS),
-            2 => ::std::option::Option::Some(ClientIssue_Code::CODE_VERSION_MISMATCH),
-            3 => ::std::option::Option::Some(ClientIssue_Code::CODE_CACHED_CHANGE),
-            4 => ::std::option::Option::Some(ClientIssue_Code::CODE_OFFLINE_CHANGE),
-            5 => ::std::option::Option::Some(ClientIssue_Code::CODE_CONCURRENT_CHANGE),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ClientIssue_Code] = &[
-            ClientIssue_Code::CODE_UNKNOWN,
-            ClientIssue_Code::CODE_INDEX_OUT_OF_BOUNDS,
-            ClientIssue_Code::CODE_VERSION_MISMATCH,
-            ClientIssue_Code::CODE_CACHED_CHANGE,
-            ClientIssue_Code::CODE_OFFLINE_CHANGE,
-            ClientIssue_Code::CODE_CONCURRENT_CHANGE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ClientIssue_Code>(
-                    "ClientIssue.Code",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ClientIssue_Code {}
-
-impl ::std::default::Default for ClientIssue_Code {
-    fn default() -> Self {
-        ClientIssue_Code::CODE_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientIssue_Code {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ClientResolveAction {
-    // message fields
-    code: ::std::option::Option<ClientResolveAction_Code>,
-    initiator: ::std::option::Option<ClientResolveAction_Initiator>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ClientResolveAction {
-    fn default() -> &'a ClientResolveAction {
-        <ClientResolveAction as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ClientResolveAction {
-    pub fn new() -> ClientResolveAction {
-        ::std::default::Default::default()
-    }
-
-    // optional .ClientResolveAction.Code code = 1;
-
-    pub fn get_code(&self) -> ClientResolveAction_Code {
-        self.code.unwrap_or(ClientResolveAction_Code::CODE_UNKNOWN)
-    }
-    pub fn clear_code(&mut self) {
-        self.code = ::std::option::Option::None;
-    }
-
-    pub fn has_code(&self) -> bool {
-        self.code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_code(&mut self, v: ClientResolveAction_Code) {
-        self.code = ::std::option::Option::Some(v);
-    }
-
-    // optional .ClientResolveAction.Initiator initiator = 2;
-
-    pub fn get_initiator(&self) -> ClientResolveAction_Initiator {
-        self.initiator
-            .unwrap_or(ClientResolveAction_Initiator::INITIATOR_UNKNOWN)
-    }
-    pub fn clear_initiator(&mut self) {
-        self.initiator = ::std::option::Option::None;
-    }
-
-    pub fn has_initiator(&self) -> bool {
-        self.initiator.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_initiator(&mut self, v: ClientResolveAction_Initiator) {
-        self.initiator = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ClientResolveAction {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.code,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.initiator,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.code {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        if let Some(v) = self.initiator {
-            my_size += ::protobuf::rt::enum_size(2, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.code {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(v) = self.initiator {
-            os.write_enum(2, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ClientResolveAction {
-        ClientResolveAction::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ClientResolveAction_Code>,
-                >(
-                    "code",
-                    |m: &ClientResolveAction| &m.code,
-                    |m: &mut ClientResolveAction| &mut m.code,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<ClientResolveAction_Initiator>,
-                >(
-                    "initiator",
-                    |m: &ClientResolveAction| &m.initiator,
-                    |m: &mut ClientResolveAction| &mut m.initiator,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ClientResolveAction>(
-                    "ClientResolveAction",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ClientResolveAction {
-        static mut instance: ::protobuf::lazy::Lazy<ClientResolveAction> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ClientResolveAction::new) }
-    }
-}
-
-impl ::protobuf::Clear for ClientResolveAction {
-    fn clear(&mut self) {
-        self.code = ::std::option::Option::None;
-        self.initiator = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ClientResolveAction {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientResolveAction {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ClientResolveAction_Code {
-    CODE_UNKNOWN = 0,
-    CODE_NO_ACTION = 1,
-    CODE_RETRY = 2,
-    CODE_RELOAD = 3,
-    CODE_DISCARD_LOCAL_CHANGES = 4,
-    CODE_SEND_DUMP = 5,
-    CODE_DISPLAY_ERROR_MESSAGE = 6,
-}
-
-impl ::protobuf::ProtobufEnum for ClientResolveAction_Code {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ClientResolveAction_Code> {
-        match value {
-            0 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_UNKNOWN),
-            1 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_NO_ACTION),
-            2 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_RETRY),
-            3 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_RELOAD),
-            4 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_DISCARD_LOCAL_CHANGES),
-            5 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_SEND_DUMP),
-            6 => ::std::option::Option::Some(ClientResolveAction_Code::CODE_DISPLAY_ERROR_MESSAGE),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ClientResolveAction_Code] = &[
-            ClientResolveAction_Code::CODE_UNKNOWN,
-            ClientResolveAction_Code::CODE_NO_ACTION,
-            ClientResolveAction_Code::CODE_RETRY,
-            ClientResolveAction_Code::CODE_RELOAD,
-            ClientResolveAction_Code::CODE_DISCARD_LOCAL_CHANGES,
-            ClientResolveAction_Code::CODE_SEND_DUMP,
-            ClientResolveAction_Code::CODE_DISPLAY_ERROR_MESSAGE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ClientResolveAction_Code>(
-                    "ClientResolveAction.Code",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ClientResolveAction_Code {}
-
-impl ::std::default::Default for ClientResolveAction_Code {
-    fn default() -> Self {
-        ClientResolveAction_Code::CODE_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientResolveAction_Code {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ClientResolveAction_Initiator {
-    INITIATOR_UNKNOWN = 0,
-    INITIATOR_SERVER = 1,
-    INITIATOR_CLIENT = 2,
-}
-
-impl ::protobuf::ProtobufEnum for ClientResolveAction_Initiator {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ClientResolveAction_Initiator> {
-        match value {
-            0 => ::std::option::Option::Some(ClientResolveAction_Initiator::INITIATOR_UNKNOWN),
-            1 => ::std::option::Option::Some(ClientResolveAction_Initiator::INITIATOR_SERVER),
-            2 => ::std::option::Option::Some(ClientResolveAction_Initiator::INITIATOR_CLIENT),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ClientResolveAction_Initiator] = &[
-            ClientResolveAction_Initiator::INITIATOR_UNKNOWN,
-            ClientResolveAction_Initiator::INITIATOR_SERVER,
-            ClientResolveAction_Initiator::INITIATOR_CLIENT,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<ClientResolveAction_Initiator>(
-                    "ClientResolveAction.Initiator",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ClientResolveAction_Initiator {}
-
-impl ::std::default::Default for ClientResolveAction_Initiator {
-    fn default() -> Self {
-        ClientResolveAction_Initiator::INITIATOR_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ClientResolveAction_Initiator {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x15playlist4issues.proto\x12\0\"\x86\x03\n\x0bClientIssue\x12#\n\x05l\
-    evel\x18\x01\x20\x01(\x0e2\x12.ClientIssue.LevelB\0\x12!\n\x04code\x18\
-    \x02\x20\x01(\x0e2\x11.ClientIssue.CodeB\0\x12\x15\n\x0brepeatCount\x18\
-    \x03\x20\x01(\x05B\0\"s\n\x05Level\x12\x11\n\rLEVEL_UNKNOWN\x10\0\x12\
-    \x0f\n\x0bLEVEL_DEBUG\x10\x01\x12\x0e\n\nLEVEL_INFO\x10\x02\x12\x10\n\
-    \x0cLEVEL_NOTICE\x10\x03\x12\x11\n\rLEVEL_WARNING\x10\x04\x12\x0f\n\x0bL\
-    EVEL_ERROR\x10\x05\x1a\0\"\xa0\x01\n\x04Code\x12\x10\n\x0cCODE_UNKNOWN\
-    \x10\0\x12\x1c\n\x18CODE_INDEX_OUT_OF_BOUNDS\x10\x01\x12\x19\n\x15CODE_V\
-    ERSION_MISMATCH\x10\x02\x12\x16\n\x12CODE_CACHED_CHANGE\x10\x03\x12\x17\
-    \n\x13CODE_OFFLINE_CHANGE\x10\x04\x12\x1a\n\x16CODE_CONCURRENT_CHANGE\
-    \x10\x05\x1a\0:\0\"\xef\x02\n\x13ClientResolveAction\x12)\n\x04code\x18\
-    \x01\x20\x01(\x0e2\x19.ClientResolveAction.CodeB\0\x123\n\tinitiator\x18\
-    \x02\x20\x01(\x0e2\x1e.ClientResolveAction.InitiatorB\0\"\xa3\x01\n\x04C\
-    ode\x12\x10\n\x0cCODE_UNKNOWN\x10\0\x12\x12\n\x0eCODE_NO_ACTION\x10\x01\
-    \x12\x0e\n\nCODE_RETRY\x10\x02\x12\x0f\n\x0bCODE_RELOAD\x10\x03\x12\x1e\
-    \n\x1aCODE_DISCARD_LOCAL_CHANGES\x10\x04\x12\x12\n\x0eCODE_SEND_DUMP\x10\
-    \x05\x12\x1e\n\x1aCODE_DISPLAY_ERROR_MESSAGE\x10\x06\x1a\0\"P\n\tInitiat\
-    or\x12\x15\n\x11INITIATOR_UNKNOWN\x10\0\x12\x14\n\x10INITIATOR_SERVER\
-    \x10\x01\x12\x14\n\x10INITIATOR_CLIENT\x10\x02\x1a\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 2240
protocol/src/playlist4meta.rs

@@ -1,2240 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `playlist4meta.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListChecksum {
-    // message fields
-    version: ::std::option::Option<i32>,
-    sha1: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListChecksum {
-    fn default() -> &'a ListChecksum {
-        <ListChecksum as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListChecksum {
-    pub fn new() -> ListChecksum {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 version = 1;
-
-    pub fn get_version(&self) -> i32 {
-        self.version.unwrap_or(0)
-    }
-    pub fn clear_version(&mut self) {
-        self.version = ::std::option::Option::None;
-    }
-
-    pub fn has_version(&self) -> bool {
-        self.version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_version(&mut self, v: i32) {
-        self.version = ::std::option::Option::Some(v);
-    }
-
-    // optional bytes sha1 = 4;
-
-    pub fn get_sha1(&self) -> &[u8] {
-        match self.sha1.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_sha1(&mut self) {
-        self.sha1.clear();
-    }
-
-    pub fn has_sha1(&self) -> bool {
-        self.sha1.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sha1(&mut self, v: ::std::vec::Vec<u8>) {
-        self.sha1 = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_sha1(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.sha1.is_none() {
-            self.sha1.set_default();
-        }
-        self.sha1.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_sha1(&mut self) -> ::std::vec::Vec<u8> {
-        self.sha1.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for ListChecksum {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.version = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.sha1)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.version {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.sha1.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(4, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.version {
-            os.write_int32(1, v)?;
-        }
-        if let Some(ref v) = self.sha1.as_ref() {
-            os.write_bytes(4, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListChecksum {
-        ListChecksum::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "version",
-                    |m: &ListChecksum| &m.version,
-                    |m: &mut ListChecksum| &mut m.version,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "sha1",
-                        |m: &ListChecksum| &m.sha1,
-                        |m: &mut ListChecksum| &mut m.sha1,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListChecksum>(
-                    "ListChecksum",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListChecksum {
-        static mut instance: ::protobuf::lazy::Lazy<ListChecksum> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListChecksum::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListChecksum {
-    fn clear(&mut self) {
-        self.version = ::std::option::Option::None;
-        self.sha1.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListChecksum {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListChecksum {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct DownloadFormat {
-    // message fields
-    codec: ::std::option::Option<DownloadFormat_Codec>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a DownloadFormat {
-    fn default() -> &'a DownloadFormat {
-        <DownloadFormat as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl DownloadFormat {
-    pub fn new() -> DownloadFormat {
-        ::std::default::Default::default()
-    }
-
-    // optional .DownloadFormat.Codec codec = 1;
-
-    pub fn get_codec(&self) -> DownloadFormat_Codec {
-        self.codec.unwrap_or(DownloadFormat_Codec::CODEC_UNKNOWN)
-    }
-    pub fn clear_codec(&mut self) {
-        self.codec = ::std::option::Option::None;
-    }
-
-    pub fn has_codec(&self) -> bool {
-        self.codec.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_codec(&mut self, v: DownloadFormat_Codec) {
-        self.codec = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for DownloadFormat {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.codec,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.codec {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.codec {
-            os.write_enum(1, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> DownloadFormat {
-        DownloadFormat::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<DownloadFormat_Codec>,
-                >(
-                    "codec",
-                    |m: &DownloadFormat| &m.codec,
-                    |m: &mut DownloadFormat| &mut m.codec,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<DownloadFormat>(
-                    "DownloadFormat",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static DownloadFormat {
-        static mut instance: ::protobuf::lazy::Lazy<DownloadFormat> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(DownloadFormat::new) }
-    }
-}
-
-impl ::protobuf::Clear for DownloadFormat {
-    fn clear(&mut self) {
-        self.codec = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for DownloadFormat {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for DownloadFormat {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum DownloadFormat_Codec {
-    CODEC_UNKNOWN = 0,
-    OGG_VORBIS = 1,
-    FLAC = 2,
-    MPEG_1_LAYER_3 = 3,
-}
-
-impl ::protobuf::ProtobufEnum for DownloadFormat_Codec {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<DownloadFormat_Codec> {
-        match value {
-            0 => ::std::option::Option::Some(DownloadFormat_Codec::CODEC_UNKNOWN),
-            1 => ::std::option::Option::Some(DownloadFormat_Codec::OGG_VORBIS),
-            2 => ::std::option::Option::Some(DownloadFormat_Codec::FLAC),
-            3 => ::std::option::Option::Some(DownloadFormat_Codec::MPEG_1_LAYER_3),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [DownloadFormat_Codec] = &[
-            DownloadFormat_Codec::CODEC_UNKNOWN,
-            DownloadFormat_Codec::OGG_VORBIS,
-            DownloadFormat_Codec::FLAC,
-            DownloadFormat_Codec::MPEG_1_LAYER_3,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<DownloadFormat_Codec>(
-                    "DownloadFormat.Codec",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for DownloadFormat_Codec {}
-
-impl ::std::default::Default for DownloadFormat_Codec {
-    fn default() -> Self {
-        DownloadFormat_Codec::CODEC_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for DownloadFormat_Codec {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListAttributes {
-    // message fields
-    name: ::protobuf::SingularField<::std::string::String>,
-    description: ::protobuf::SingularField<::std::string::String>,
-    picture: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    collaborative: ::std::option::Option<bool>,
-    pl3_version: ::protobuf::SingularField<::std::string::String>,
-    deleted_by_owner: ::std::option::Option<bool>,
-    restricted_collaborative: ::std::option::Option<bool>,
-    deprecated_client_id: ::std::option::Option<i64>,
-    public_starred: ::std::option::Option<bool>,
-    client_id: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListAttributes {
-    fn default() -> &'a ListAttributes {
-        <ListAttributes as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListAttributes {
-    pub fn new() -> ListAttributes {
-        ::std::default::Default::default()
-    }
-
-    // optional string name = 1;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string description = 2;
-
-    pub fn get_description(&self) -> &str {
-        match self.description.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_description(&mut self) {
-        self.description.clear();
-    }
-
-    pub fn has_description(&self) -> bool {
-        self.description.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_description(&mut self, v: ::std::string::String) {
-        self.description = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_description(&mut self) -> &mut ::std::string::String {
-        if self.description.is_none() {
-            self.description.set_default();
-        }
-        self.description.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_description(&mut self) -> ::std::string::String {
-        self.description
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bytes picture = 3;
-
-    pub fn get_picture(&self) -> &[u8] {
-        match self.picture.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_picture(&mut self) {
-        self.picture.clear();
-    }
-
-    pub fn has_picture(&self) -> bool {
-        self.picture.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_picture(&mut self, v: ::std::vec::Vec<u8>) {
-        self.picture = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_picture(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.picture.is_none() {
-            self.picture.set_default();
-        }
-        self.picture.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_picture(&mut self) -> ::std::vec::Vec<u8> {
-        self.picture
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bool collaborative = 4;
-
-    pub fn get_collaborative(&self) -> bool {
-        self.collaborative.unwrap_or(false)
-    }
-    pub fn clear_collaborative(&mut self) {
-        self.collaborative = ::std::option::Option::None;
-    }
-
-    pub fn has_collaborative(&self) -> bool {
-        self.collaborative.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_collaborative(&mut self, v: bool) {
-        self.collaborative = ::std::option::Option::Some(v);
-    }
-
-    // optional string pl3_version = 5;
-
-    pub fn get_pl3_version(&self) -> &str {
-        match self.pl3_version.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_pl3_version(&mut self) {
-        self.pl3_version.clear();
-    }
-
-    pub fn has_pl3_version(&self) -> bool {
-        self.pl3_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_pl3_version(&mut self, v: ::std::string::String) {
-        self.pl3_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_pl3_version(&mut self) -> &mut ::std::string::String {
-        if self.pl3_version.is_none() {
-            self.pl3_version.set_default();
-        }
-        self.pl3_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_pl3_version(&mut self) -> ::std::string::String {
-        self.pl3_version
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool deleted_by_owner = 6;
-
-    pub fn get_deleted_by_owner(&self) -> bool {
-        self.deleted_by_owner.unwrap_or(false)
-    }
-    pub fn clear_deleted_by_owner(&mut self) {
-        self.deleted_by_owner = ::std::option::Option::None;
-    }
-
-    pub fn has_deleted_by_owner(&self) -> bool {
-        self.deleted_by_owner.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_deleted_by_owner(&mut self, v: bool) {
-        self.deleted_by_owner = ::std::option::Option::Some(v);
-    }
-
-    // optional bool restricted_collaborative = 7;
-
-    pub fn get_restricted_collaborative(&self) -> bool {
-        self.restricted_collaborative.unwrap_or(false)
-    }
-    pub fn clear_restricted_collaborative(&mut self) {
-        self.restricted_collaborative = ::std::option::Option::None;
-    }
-
-    pub fn has_restricted_collaborative(&self) -> bool {
-        self.restricted_collaborative.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_restricted_collaborative(&mut self, v: bool) {
-        self.restricted_collaborative = ::std::option::Option::Some(v);
-    }
-
-    // optional int64 deprecated_client_id = 8;
-
-    pub fn get_deprecated_client_id(&self) -> i64 {
-        self.deprecated_client_id.unwrap_or(0)
-    }
-    pub fn clear_deprecated_client_id(&mut self) {
-        self.deprecated_client_id = ::std::option::Option::None;
-    }
-
-    pub fn has_deprecated_client_id(&self) -> bool {
-        self.deprecated_client_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_deprecated_client_id(&mut self, v: i64) {
-        self.deprecated_client_id = ::std::option::Option::Some(v);
-    }
-
-    // optional bool public_starred = 9;
-
-    pub fn get_public_starred(&self) -> bool {
-        self.public_starred.unwrap_or(false)
-    }
-    pub fn clear_public_starred(&mut self) {
-        self.public_starred = ::std::option::Option::None;
-    }
-
-    pub fn has_public_starred(&self) -> bool {
-        self.public_starred.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_public_starred(&mut self, v: bool) {
-        self.public_starred = ::std::option::Option::Some(v);
-    }
-
-    // optional string client_id = 10;
-
-    pub fn get_client_id(&self) -> &str {
-        match self.client_id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_client_id(&mut self) {
-        self.client_id.clear();
-    }
-
-    pub fn has_client_id(&self) -> bool {
-        self.client_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_client_id(&mut self, v: ::std::string::String) {
-        self.client_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_client_id(&mut self) -> &mut ::std::string::String {
-        if self.client_id.is_none() {
-            self.client_id.set_default();
-        }
-        self.client_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_client_id(&mut self) -> ::std::string::String {
-        self.client_id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for ListAttributes {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.description,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.picture)?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.collaborative = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.pl3_version,
-                    )?;
-                }
-                6 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.deleted_by_owner = ::std::option::Option::Some(tmp);
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.restricted_collaborative = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.deprecated_client_id = ::std::option::Option::Some(tmp);
-                }
-                9 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.public_starred = ::std::option::Option::Some(tmp);
-                }
-                10 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.client_id)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.picture.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(3, &v);
-        }
-        if let Some(v) = self.collaborative {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.pl3_version.as_ref() {
-            my_size += ::protobuf::rt::string_size(5, &v);
-        }
-        if let Some(v) = self.deleted_by_owner {
-            my_size += 2;
-        }
-        if let Some(v) = self.restricted_collaborative {
-            my_size += 2;
-        }
-        if let Some(v) = self.deprecated_client_id {
-            my_size += ::protobuf::rt::value_size(8, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.public_starred {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.client_id.as_ref() {
-            my_size += ::protobuf::rt::string_size(10, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.description.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.picture.as_ref() {
-            os.write_bytes(3, &v)?;
-        }
-        if let Some(v) = self.collaborative {
-            os.write_bool(4, v)?;
-        }
-        if let Some(ref v) = self.pl3_version.as_ref() {
-            os.write_string(5, &v)?;
-        }
-        if let Some(v) = self.deleted_by_owner {
-            os.write_bool(6, v)?;
-        }
-        if let Some(v) = self.restricted_collaborative {
-            os.write_bool(7, v)?;
-        }
-        if let Some(v) = self.deprecated_client_id {
-            os.write_int64(8, v)?;
-        }
-        if let Some(v) = self.public_starred {
-            os.write_bool(9, v)?;
-        }
-        if let Some(ref v) = self.client_id.as_ref() {
-            os.write_string(10, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListAttributes {
-        ListAttributes::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "name",
-                        |m: &ListAttributes| &m.name,
-                        |m: &mut ListAttributes| &mut m.name,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "description",
-                        |m: &ListAttributes| &m.description,
-                        |m: &mut ListAttributes| &mut m.description,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "picture",
-                        |m: &ListAttributes| &m.picture,
-                        |m: &mut ListAttributes| &mut m.picture,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "collaborative",
-                    |m: &ListAttributes| &m.collaborative,
-                    |m: &mut ListAttributes| &mut m.collaborative,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "pl3_version",
-                        |m: &ListAttributes| &m.pl3_version,
-                        |m: &mut ListAttributes| &mut m.pl3_version,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "deleted_by_owner",
-                    |m: &ListAttributes| &m.deleted_by_owner,
-                    |m: &mut ListAttributes| &mut m.deleted_by_owner,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "restricted_collaborative",
-                    |m: &ListAttributes| &m.restricted_collaborative,
-                    |m: &mut ListAttributes| &mut m.restricted_collaborative,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "deprecated_client_id",
-                    |m: &ListAttributes| &m.deprecated_client_id,
-                    |m: &mut ListAttributes| &mut m.deprecated_client_id,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "public_starred",
-                    |m: &ListAttributes| &m.public_starred,
-                    |m: &mut ListAttributes| &mut m.public_starred,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "client_id",
-                        |m: &ListAttributes| &m.client_id,
-                        |m: &mut ListAttributes| &mut m.client_id,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListAttributes>(
-                    "ListAttributes",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListAttributes {
-        static mut instance: ::protobuf::lazy::Lazy<ListAttributes> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListAttributes::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListAttributes {
-    fn clear(&mut self) {
-        self.name.clear();
-        self.description.clear();
-        self.picture.clear();
-        self.collaborative = ::std::option::Option::None;
-        self.pl3_version.clear();
-        self.deleted_by_owner = ::std::option::Option::None;
-        self.restricted_collaborative = ::std::option::Option::None;
-        self.deprecated_client_id = ::std::option::Option::None;
-        self.public_starred = ::std::option::Option::None;
-        self.client_id.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListAttributes {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListAttributes {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ItemAttributes {
-    // message fields
-    added_by: ::protobuf::SingularField<::std::string::String>,
-    timestamp: ::std::option::Option<i64>,
-    message: ::protobuf::SingularField<::std::string::String>,
-    seen: ::std::option::Option<bool>,
-    download_count: ::std::option::Option<i64>,
-    download_format: ::protobuf::SingularPtrField<DownloadFormat>,
-    sevendigital_id: ::protobuf::SingularField<::std::string::String>,
-    sevendigital_left: ::std::option::Option<i64>,
-    seen_at: ::std::option::Option<i64>,
-    public: ::std::option::Option<bool>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ItemAttributes {
-    fn default() -> &'a ItemAttributes {
-        <ItemAttributes as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ItemAttributes {
-    pub fn new() -> ItemAttributes {
-        ::std::default::Default::default()
-    }
-
-    // optional string added_by = 1;
-
-    pub fn get_added_by(&self) -> &str {
-        match self.added_by.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_added_by(&mut self) {
-        self.added_by.clear();
-    }
-
-    pub fn has_added_by(&self) -> bool {
-        self.added_by.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_added_by(&mut self, v: ::std::string::String) {
-        self.added_by = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_added_by(&mut self) -> &mut ::std::string::String {
-        if self.added_by.is_none() {
-            self.added_by.set_default();
-        }
-        self.added_by.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_added_by(&mut self) -> ::std::string::String {
-        self.added_by
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional int64 timestamp = 2;
-
-    pub fn get_timestamp(&self) -> i64 {
-        self.timestamp.unwrap_or(0)
-    }
-    pub fn clear_timestamp(&mut self) {
-        self.timestamp = ::std::option::Option::None;
-    }
-
-    pub fn has_timestamp(&self) -> bool {
-        self.timestamp.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_timestamp(&mut self, v: i64) {
-        self.timestamp = ::std::option::Option::Some(v);
-    }
-
-    // optional string message = 3;
-
-    pub fn get_message(&self) -> &str {
-        match self.message.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_message(&mut self) {
-        self.message.clear();
-    }
-
-    pub fn has_message(&self) -> bool {
-        self.message.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_message(&mut self, v: ::std::string::String) {
-        self.message = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_message(&mut self) -> &mut ::std::string::String {
-        if self.message.is_none() {
-            self.message.set_default();
-        }
-        self.message.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_message(&mut self) -> ::std::string::String {
-        self.message
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool seen = 4;
-
-    pub fn get_seen(&self) -> bool {
-        self.seen.unwrap_or(false)
-    }
-    pub fn clear_seen(&mut self) {
-        self.seen = ::std::option::Option::None;
-    }
-
-    pub fn has_seen(&self) -> bool {
-        self.seen.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_seen(&mut self, v: bool) {
-        self.seen = ::std::option::Option::Some(v);
-    }
-
-    // optional int64 download_count = 5;
-
-    pub fn get_download_count(&self) -> i64 {
-        self.download_count.unwrap_or(0)
-    }
-    pub fn clear_download_count(&mut self) {
-        self.download_count = ::std::option::Option::None;
-    }
-
-    pub fn has_download_count(&self) -> bool {
-        self.download_count.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_download_count(&mut self, v: i64) {
-        self.download_count = ::std::option::Option::Some(v);
-    }
-
-    // optional .DownloadFormat download_format = 6;
-
-    pub fn get_download_format(&self) -> &DownloadFormat {
-        self.download_format
-            .as_ref()
-            .unwrap_or_else(|| DownloadFormat::default_instance())
-    }
-    pub fn clear_download_format(&mut self) {
-        self.download_format.clear();
-    }
-
-    pub fn has_download_format(&self) -> bool {
-        self.download_format.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_download_format(&mut self, v: DownloadFormat) {
-        self.download_format = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_download_format(&mut self) -> &mut DownloadFormat {
-        if self.download_format.is_none() {
-            self.download_format.set_default();
-        }
-        self.download_format.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_download_format(&mut self) -> DownloadFormat {
-        self.download_format
-            .take()
-            .unwrap_or_else(|| DownloadFormat::new())
-    }
-
-    // optional string sevendigital_id = 7;
-
-    pub fn get_sevendigital_id(&self) -> &str {
-        match self.sevendigital_id.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_sevendigital_id(&mut self) {
-        self.sevendigital_id.clear();
-    }
-
-    pub fn has_sevendigital_id(&self) -> bool {
-        self.sevendigital_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sevendigital_id(&mut self, v: ::std::string::String) {
-        self.sevendigital_id = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_sevendigital_id(&mut self) -> &mut ::std::string::String {
-        if self.sevendigital_id.is_none() {
-            self.sevendigital_id.set_default();
-        }
-        self.sevendigital_id.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_sevendigital_id(&mut self) -> ::std::string::String {
-        self.sevendigital_id
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional int64 sevendigital_left = 8;
-
-    pub fn get_sevendigital_left(&self) -> i64 {
-        self.sevendigital_left.unwrap_or(0)
-    }
-    pub fn clear_sevendigital_left(&mut self) {
-        self.sevendigital_left = ::std::option::Option::None;
-    }
-
-    pub fn has_sevendigital_left(&self) -> bool {
-        self.sevendigital_left.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sevendigital_left(&mut self, v: i64) {
-        self.sevendigital_left = ::std::option::Option::Some(v);
-    }
-
-    // optional int64 seen_at = 9;
-
-    pub fn get_seen_at(&self) -> i64 {
-        self.seen_at.unwrap_or(0)
-    }
-    pub fn clear_seen_at(&mut self) {
-        self.seen_at = ::std::option::Option::None;
-    }
-
-    pub fn has_seen_at(&self) -> bool {
-        self.seen_at.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_seen_at(&mut self, v: i64) {
-        self.seen_at = ::std::option::Option::Some(v);
-    }
-
-    // optional bool public = 10;
-
-    pub fn get_public(&self) -> bool {
-        self.public.unwrap_or(false)
-    }
-    pub fn clear_public(&mut self) {
-        self.public = ::std::option::Option::None;
-    }
-
-    pub fn has_public(&self) -> bool {
-        self.public.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_public(&mut self, v: bool) {
-        self.public = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for ItemAttributes {
-    fn is_initialized(&self) -> bool {
-        for v in &self.download_format {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.added_by)?;
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.timestamp = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.message)?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.seen = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.download_count = ::std::option::Option::Some(tmp);
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.download_format,
-                    )?;
-                }
-                7 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.sevendigital_id,
-                    )?;
-                }
-                8 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.sevendigital_left = ::std::option::Option::Some(tmp);
-                }
-                9 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.seen_at = ::std::option::Option::Some(tmp);
-                }
-                10 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.public = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.added_by.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(v) = self.timestamp {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.message.as_ref() {
-            my_size += ::protobuf::rt::string_size(3, &v);
-        }
-        if let Some(v) = self.seen {
-            my_size += 2;
-        }
-        if let Some(v) = self.download_count {
-            my_size += ::protobuf::rt::value_size(5, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.download_format.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.sevendigital_id.as_ref() {
-            my_size += ::protobuf::rt::string_size(7, &v);
-        }
-        if let Some(v) = self.sevendigital_left {
-            my_size += ::protobuf::rt::value_size(8, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.seen_at {
-            my_size += ::protobuf::rt::value_size(9, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.public {
-            my_size += 2;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.added_by.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(v) = self.timestamp {
-            os.write_int64(2, v)?;
-        }
-        if let Some(ref v) = self.message.as_ref() {
-            os.write_string(3, &v)?;
-        }
-        if let Some(v) = self.seen {
-            os.write_bool(4, v)?;
-        }
-        if let Some(v) = self.download_count {
-            os.write_int64(5, v)?;
-        }
-        if let Some(ref v) = self.download_format.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.sevendigital_id.as_ref() {
-            os.write_string(7, &v)?;
-        }
-        if let Some(v) = self.sevendigital_left {
-            os.write_int64(8, v)?;
-        }
-        if let Some(v) = self.seen_at {
-            os.write_int64(9, v)?;
-        }
-        if let Some(v) = self.public {
-            os.write_bool(10, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ItemAttributes {
-        ItemAttributes::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "added_by",
-                        |m: &ItemAttributes| &m.added_by,
-                        |m: &mut ItemAttributes| &mut m.added_by,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "timestamp",
-                    |m: &ItemAttributes| &m.timestamp,
-                    |m: &mut ItemAttributes| &mut m.timestamp,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "message",
-                        |m: &ItemAttributes| &m.message,
-                        |m: &mut ItemAttributes| &mut m.message,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "seen",
-                    |m: &ItemAttributes| &m.seen,
-                    |m: &mut ItemAttributes| &mut m.seen,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "download_count",
-                    |m: &ItemAttributes| &m.download_count,
-                    |m: &mut ItemAttributes| &mut m.download_count,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<DownloadFormat>,
-                    >(
-                        "download_format",
-                        |m: &ItemAttributes| &m.download_format,
-                        |m: &mut ItemAttributes| &mut m.download_format,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "sevendigital_id",
-                        |m: &ItemAttributes| &m.sevendigital_id,
-                        |m: &mut ItemAttributes| &mut m.sevendigital_id,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "sevendigital_left",
-                    |m: &ItemAttributes| &m.sevendigital_left,
-                    |m: &mut ItemAttributes| &mut m.sevendigital_left,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "seen_at",
-                    |m: &ItemAttributes| &m.seen_at,
-                    |m: &mut ItemAttributes| &mut m.seen_at,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "public",
-                    |m: &ItemAttributes| &m.public,
-                    |m: &mut ItemAttributes| &mut m.public,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ItemAttributes>(
-                    "ItemAttributes",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ItemAttributes {
-        static mut instance: ::protobuf::lazy::Lazy<ItemAttributes> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ItemAttributes::new) }
-    }
-}
-
-impl ::protobuf::Clear for ItemAttributes {
-    fn clear(&mut self) {
-        self.added_by.clear();
-        self.timestamp = ::std::option::Option::None;
-        self.message.clear();
-        self.seen = ::std::option::Option::None;
-        self.download_count = ::std::option::Option::None;
-        self.download_format.clear();
-        self.sevendigital_id.clear();
-        self.sevendigital_left = ::std::option::Option::None;
-        self.seen_at = ::std::option::Option::None;
-        self.public = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ItemAttributes {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ItemAttributes {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct StringAttribute {
-    // message fields
-    key: ::protobuf::SingularField<::std::string::String>,
-    value: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a StringAttribute {
-    fn default() -> &'a StringAttribute {
-        <StringAttribute as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl StringAttribute {
-    pub fn new() -> StringAttribute {
-        ::std::default::Default::default()
-    }
-
-    // optional string key = 1;
-
-    pub fn get_key(&self) -> &str {
-        match self.key.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_key(&mut self) {
-        self.key.clear();
-    }
-
-    pub fn has_key(&self) -> bool {
-        self.key.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_key(&mut self, v: ::std::string::String) {
-        self.key = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_key(&mut self) -> &mut ::std::string::String {
-        if self.key.is_none() {
-            self.key.set_default();
-        }
-        self.key.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_key(&mut self) -> ::std::string::String {
-        self.key
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string value = 2;
-
-    pub fn get_value(&self) -> &str {
-        match self.value.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_value(&mut self) {
-        self.value.clear();
-    }
-
-    pub fn has_value(&self) -> bool {
-        self.value.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_value(&mut self, v: ::std::string::String) {
-        self.value = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_value(&mut self) -> &mut ::std::string::String {
-        if self.value.is_none() {
-            self.value.set_default();
-        }
-        self.value.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_value(&mut self) -> ::std::string::String {
-        self.value
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for StringAttribute {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.key)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.value)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.key.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.value.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.key.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.value.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> StringAttribute {
-        StringAttribute::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "key",
-                        |m: &StringAttribute| &m.key,
-                        |m: &mut StringAttribute| &mut m.key,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "value",
-                        |m: &StringAttribute| &m.value,
-                        |m: &mut StringAttribute| &mut m.value,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<StringAttribute>(
-                    "StringAttribute",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static StringAttribute {
-        static mut instance: ::protobuf::lazy::Lazy<StringAttribute> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(StringAttribute::new) }
-    }
-}
-
-impl ::protobuf::Clear for StringAttribute {
-    fn clear(&mut self) {
-        self.key.clear();
-        self.value.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for StringAttribute {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for StringAttribute {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct StringAttributes {
-    // message fields
-    attribute: ::protobuf::RepeatedField<StringAttribute>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a StringAttributes {
-    fn default() -> &'a StringAttributes {
-        <StringAttributes as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl StringAttributes {
-    pub fn new() -> StringAttributes {
-        ::std::default::Default::default()
-    }
-
-    // repeated .StringAttribute attribute = 1;
-
-    pub fn get_attribute(&self) -> &[StringAttribute] {
-        &self.attribute
-    }
-    pub fn clear_attribute(&mut self) {
-        self.attribute.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_attribute(&mut self, v: ::protobuf::RepeatedField<StringAttribute>) {
-        self.attribute = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_attribute(&mut self) -> &mut ::protobuf::RepeatedField<StringAttribute> {
-        &mut self.attribute
-    }
-
-    // Take field
-    pub fn take_attribute(&mut self) -> ::protobuf::RepeatedField<StringAttribute> {
-        ::std::mem::replace(&mut self.attribute, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for StringAttributes {
-    fn is_initialized(&self) -> bool {
-        for v in &self.attribute {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.attribute)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.attribute {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.attribute {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> StringAttributes {
-        StringAttributes::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<StringAttribute>,
-                    >(
-                        "attribute",
-                        |m: &StringAttributes| &m.attribute,
-                        |m: &mut StringAttributes| &mut m.attribute,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<StringAttributes>(
-                    "StringAttributes",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static StringAttributes {
-        static mut instance: ::protobuf::lazy::Lazy<StringAttributes> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(StringAttributes::new) }
-    }
-}
-
-impl ::protobuf::Clear for StringAttributes {
-    fn clear(&mut self) {
-        self.attribute.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for StringAttributes {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for StringAttributes {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x13playlist4meta.proto\x12\0\"3\n\x0cListChecksum\x12\x11\n\x07versio\
-    n\x18\x01\x20\x01(\x05B\0\x12\x0e\n\x04sha1\x18\x04\x20\x01(\x0cB\0:\0\"\
-    \x86\x01\n\x0eDownloadFormat\x12&\n\x05codec\x18\x01\x20\x01(\x0e2\x15.D\
-    ownloadFormat.CodecB\0\"J\n\x05Codec\x12\x11\n\rCODEC_UNKNOWN\x10\0\x12\
-    \x0e\n\nOGG_VORBIS\x10\x01\x12\x08\n\x04FLAC\x10\x02\x12\x12\n\x0eMPEG_1\
-    _LAYER_3\x10\x03\x1a\0:\0\"\x8b\x02\n\x0eListAttributes\x12\x0e\n\x04nam\
-    e\x18\x01\x20\x01(\tB\0\x12\x15\n\x0bdescription\x18\x02\x20\x01(\tB\0\
-    \x12\x11\n\x07picture\x18\x03\x20\x01(\x0cB\0\x12\x17\n\rcollaborative\
-    \x18\x04\x20\x01(\x08B\0\x12\x15\n\x0bpl3_version\x18\x05\x20\x01(\tB\0\
-    \x12\x1a\n\x10deleted_by_owner\x18\x06\x20\x01(\x08B\0\x12\"\n\x18restri\
-    cted_collaborative\x18\x07\x20\x01(\x08B\0\x12\x1e\n\x14deprecated_clien\
-    t_id\x18\x08\x20\x01(\x03B\0\x12\x18\n\x0epublic_starred\x18\t\x20\x01(\
-    \x08B\0\x12\x13\n\tclient_id\x18\n\x20\x01(\tB\0:\0\"\x81\x02\n\x0eItemA\
-    ttributes\x12\x12\n\x08added_by\x18\x01\x20\x01(\tB\0\x12\x13\n\ttimesta\
-    mp\x18\x02\x20\x01(\x03B\0\x12\x11\n\x07message\x18\x03\x20\x01(\tB\0\
-    \x12\x0e\n\x04seen\x18\x04\x20\x01(\x08B\0\x12\x18\n\x0edownload_count\
-    \x18\x05\x20\x01(\x03B\0\x12*\n\x0fdownload_format\x18\x06\x20\x01(\x0b2\
-    \x0f.DownloadFormatB\0\x12\x19\n\x0fsevendigital_id\x18\x07\x20\x01(\tB\
-    \0\x12\x1b\n\x11sevendigital_left\x18\x08\x20\x01(\x03B\0\x12\x11\n\x07s\
-    een_at\x18\t\x20\x01(\x03B\0\x12\x10\n\x06public\x18\n\x20\x01(\x08B\0:\
-    \0\"3\n\x0fStringAttribute\x12\r\n\x03key\x18\x01\x20\x01(\tB\0\x12\x0f\
-    \n\x05value\x18\x02\x20\x01(\tB\0:\0\";\n\x10StringAttributes\x12%\n\tat\
-    tribute\x18\x01\x20\x03(\x0b2\x10.StringAttributeB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 3742
protocol/src/playlist4ops.rs

@@ -1,3742 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `playlist4ops.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Add {
-    // message fields
-    fromIndex: ::std::option::Option<i32>,
-    items: ::protobuf::RepeatedField<super::playlist4content::Item>,
-    list_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    addLast: ::std::option::Option<bool>,
-    addFirst: ::std::option::Option<bool>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Add {
-    fn default() -> &'a Add {
-        <Add as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Add {
-    pub fn new() -> Add {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 fromIndex = 1;
-
-    pub fn get_fromIndex(&self) -> i32 {
-        self.fromIndex.unwrap_or(0)
-    }
-    pub fn clear_fromIndex(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-    }
-
-    pub fn has_fromIndex(&self) -> bool {
-        self.fromIndex.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fromIndex(&mut self, v: i32) {
-        self.fromIndex = ::std::option::Option::Some(v);
-    }
-
-    // repeated .Item items = 2;
-
-    pub fn get_items(&self) -> &[super::playlist4content::Item] {
-        &self.items
-    }
-    pub fn clear_items(&mut self) {
-        self.items.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_items(&mut self, v: ::protobuf::RepeatedField<super::playlist4content::Item>) {
-        self.items = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_items(&mut self) -> &mut ::protobuf::RepeatedField<super::playlist4content::Item> {
-        &mut self.items
-    }
-
-    // Take field
-    pub fn take_items(&mut self) -> ::protobuf::RepeatedField<super::playlist4content::Item> {
-        ::std::mem::replace(&mut self.items, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .ListChecksum list_checksum = 3;
-
-    pub fn get_list_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_list_checksum(&mut self) {
-        self.list_checksum.clear();
-    }
-
-    pub fn has_list_checksum(&self) -> bool {
-        self.list_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_list_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.list_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_list_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.list_checksum.is_none() {
-            self.list_checksum.set_default();
-        }
-        self.list_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_list_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional bool addLast = 4;
-
-    pub fn get_addLast(&self) -> bool {
-        self.addLast.unwrap_or(false)
-    }
-    pub fn clear_addLast(&mut self) {
-        self.addLast = ::std::option::Option::None;
-    }
-
-    pub fn has_addLast(&self) -> bool {
-        self.addLast.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_addLast(&mut self, v: bool) {
-        self.addLast = ::std::option::Option::Some(v);
-    }
-
-    // optional bool addFirst = 5;
-
-    pub fn get_addFirst(&self) -> bool {
-        self.addFirst.unwrap_or(false)
-    }
-    pub fn clear_addFirst(&mut self) {
-        self.addFirst = ::std::option::Option::None;
-    }
-
-    pub fn has_addFirst(&self) -> bool {
-        self.addFirst.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_addFirst(&mut self, v: bool) {
-        self.addFirst = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Add {
-    fn is_initialized(&self) -> bool {
-        for v in &self.items {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.list_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.fromIndex = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.items)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.list_checksum,
-                    )?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.addLast = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.addFirst = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.fromIndex {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        for value in &self.items {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.addLast {
-            my_size += 2;
-        }
-        if let Some(v) = self.addFirst {
-            my_size += 2;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.fromIndex {
-            os.write_int32(1, v)?;
-        }
-        for v in &self.items {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.addLast {
-            os.write_bool(4, v)?;
-        }
-        if let Some(v) = self.addFirst {
-            os.write_bool(5, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Add {
-        Add::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "fromIndex",
-                    |m: &Add| &m.fromIndex,
-                    |m: &mut Add| &mut m.fromIndex,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4content::Item>,
-                    >("items", |m: &Add| &m.items, |m: &mut Add| &mut m.items),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "list_checksum",
-                        |m: &Add| &m.list_checksum,
-                        |m: &mut Add| &mut m.list_checksum,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "addLast",
-                    |m: &Add| &m.addLast,
-                    |m: &mut Add| &mut m.addLast,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "addFirst",
-                    |m: &Add| &m.addFirst,
-                    |m: &mut Add| &mut m.addFirst,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Add>(
-                    "Add",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Add {
-        static mut instance: ::protobuf::lazy::Lazy<Add> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Add::new) }
-    }
-}
-
-impl ::protobuf::Clear for Add {
-    fn clear(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-        self.items.clear();
-        self.list_checksum.clear();
-        self.addLast = ::std::option::Option::None;
-        self.addFirst = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Add {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Add {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Rem {
-    // message fields
-    fromIndex: ::std::option::Option<i32>,
-    length: ::std::option::Option<i32>,
-    items: ::protobuf::RepeatedField<super::playlist4content::Item>,
-    list_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    items_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    uris_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    itemsAsKey: ::std::option::Option<bool>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Rem {
-    fn default() -> &'a Rem {
-        <Rem as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Rem {
-    pub fn new() -> Rem {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 fromIndex = 1;
-
-    pub fn get_fromIndex(&self) -> i32 {
-        self.fromIndex.unwrap_or(0)
-    }
-    pub fn clear_fromIndex(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-    }
-
-    pub fn has_fromIndex(&self) -> bool {
-        self.fromIndex.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fromIndex(&mut self, v: i32) {
-        self.fromIndex = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 length = 2;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-
-    // repeated .Item items = 3;
-
-    pub fn get_items(&self) -> &[super::playlist4content::Item] {
-        &self.items
-    }
-    pub fn clear_items(&mut self) {
-        self.items.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_items(&mut self, v: ::protobuf::RepeatedField<super::playlist4content::Item>) {
-        self.items = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_items(&mut self) -> &mut ::protobuf::RepeatedField<super::playlist4content::Item> {
-        &mut self.items
-    }
-
-    // Take field
-    pub fn take_items(&mut self) -> ::protobuf::RepeatedField<super::playlist4content::Item> {
-        ::std::mem::replace(&mut self.items, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .ListChecksum list_checksum = 4;
-
-    pub fn get_list_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_list_checksum(&mut self) {
-        self.list_checksum.clear();
-    }
-
-    pub fn has_list_checksum(&self) -> bool {
-        self.list_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_list_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.list_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_list_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.list_checksum.is_none() {
-            self.list_checksum.set_default();
-        }
-        self.list_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_list_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum items_checksum = 5;
-
-    pub fn get_items_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.items_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_items_checksum(&mut self) {
-        self.items_checksum.clear();
-    }
-
-    pub fn has_items_checksum(&self) -> bool {
-        self.items_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_items_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.items_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_items_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.items_checksum.is_none() {
-            self.items_checksum.set_default();
-        }
-        self.items_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_items_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.items_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum uris_checksum = 6;
-
-    pub fn get_uris_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.uris_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_uris_checksum(&mut self) {
-        self.uris_checksum.clear();
-    }
-
-    pub fn has_uris_checksum(&self) -> bool {
-        self.uris_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uris_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.uris_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uris_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.uris_checksum.is_none() {
-            self.uris_checksum.set_default();
-        }
-        self.uris_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uris_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.uris_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional bool itemsAsKey = 7;
-
-    pub fn get_itemsAsKey(&self) -> bool {
-        self.itemsAsKey.unwrap_or(false)
-    }
-    pub fn clear_itemsAsKey(&mut self) {
-        self.itemsAsKey = ::std::option::Option::None;
-    }
-
-    pub fn has_itemsAsKey(&self) -> bool {
-        self.itemsAsKey.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_itemsAsKey(&mut self, v: bool) {
-        self.itemsAsKey = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Rem {
-    fn is_initialized(&self) -> bool {
-        for v in &self.items {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.list_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.items_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.uris_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.fromIndex = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.items)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.list_checksum,
-                    )?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.items_checksum,
-                    )?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.uris_checksum,
-                    )?;
-                }
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.itemsAsKey = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.fromIndex {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        for value in &self.items {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.items_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.uris_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.itemsAsKey {
-            my_size += 2;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.fromIndex {
-            os.write_int32(1, v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(2, v)?;
-        }
-        for v in &self.items {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.items_checksum.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.uris_checksum.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.itemsAsKey {
-            os.write_bool(7, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Rem {
-        Rem::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "fromIndex",
-                    |m: &Rem| &m.fromIndex,
-                    |m: &mut Rem| &mut m.fromIndex,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length", |m: &Rem| &m.length, |m: &mut Rem| &mut m.length
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4content::Item>,
-                    >("items", |m: &Rem| &m.items, |m: &mut Rem| &mut m.items),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "list_checksum",
-                        |m: &Rem| &m.list_checksum,
-                        |m: &mut Rem| &mut m.list_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "items_checksum",
-                        |m: &Rem| &m.items_checksum,
-                        |m: &mut Rem| &mut m.items_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "uris_checksum",
-                        |m: &Rem| &m.uris_checksum,
-                        |m: &mut Rem| &mut m.uris_checksum,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "itemsAsKey",
-                    |m: &Rem| &m.itemsAsKey,
-                    |m: &mut Rem| &mut m.itemsAsKey,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Rem>(
-                    "Rem",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Rem {
-        static mut instance: ::protobuf::lazy::Lazy<Rem> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Rem::new) }
-    }
-}
-
-impl ::protobuf::Clear for Rem {
-    fn clear(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-        self.length = ::std::option::Option::None;
-        self.items.clear();
-        self.list_checksum.clear();
-        self.items_checksum.clear();
-        self.uris_checksum.clear();
-        self.itemsAsKey = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Rem {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Rem {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Mov {
-    // message fields
-    fromIndex: ::std::option::Option<i32>,
-    length: ::std::option::Option<i32>,
-    toIndex: ::std::option::Option<i32>,
-    list_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    items_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    uris_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Mov {
-    fn default() -> &'a Mov {
-        <Mov as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Mov {
-    pub fn new() -> Mov {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 fromIndex = 1;
-
-    pub fn get_fromIndex(&self) -> i32 {
-        self.fromIndex.unwrap_or(0)
-    }
-    pub fn clear_fromIndex(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-    }
-
-    pub fn has_fromIndex(&self) -> bool {
-        self.fromIndex.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_fromIndex(&mut self, v: i32) {
-        self.fromIndex = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 length = 2;
-
-    pub fn get_length(&self) -> i32 {
-        self.length.unwrap_or(0)
-    }
-    pub fn clear_length(&mut self) {
-        self.length = ::std::option::Option::None;
-    }
-
-    pub fn has_length(&self) -> bool {
-        self.length.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_length(&mut self, v: i32) {
-        self.length = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 toIndex = 3;
-
-    pub fn get_toIndex(&self) -> i32 {
-        self.toIndex.unwrap_or(0)
-    }
-    pub fn clear_toIndex(&mut self) {
-        self.toIndex = ::std::option::Option::None;
-    }
-
-    pub fn has_toIndex(&self) -> bool {
-        self.toIndex.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_toIndex(&mut self, v: i32) {
-        self.toIndex = ::std::option::Option::Some(v);
-    }
-
-    // optional .ListChecksum list_checksum = 4;
-
-    pub fn get_list_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_list_checksum(&mut self) {
-        self.list_checksum.clear();
-    }
-
-    pub fn has_list_checksum(&self) -> bool {
-        self.list_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_list_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.list_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_list_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.list_checksum.is_none() {
-            self.list_checksum.set_default();
-        }
-        self.list_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_list_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum items_checksum = 5;
-
-    pub fn get_items_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.items_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_items_checksum(&mut self) {
-        self.items_checksum.clear();
-    }
-
-    pub fn has_items_checksum(&self) -> bool {
-        self.items_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_items_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.items_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_items_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.items_checksum.is_none() {
-            self.items_checksum.set_default();
-        }
-        self.items_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_items_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.items_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum uris_checksum = 6;
-
-    pub fn get_uris_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.uris_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_uris_checksum(&mut self) {
-        self.uris_checksum.clear();
-    }
-
-    pub fn has_uris_checksum(&self) -> bool {
-        self.uris_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uris_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.uris_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uris_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.uris_checksum.is_none() {
-            self.uris_checksum.set_default();
-        }
-        self.uris_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uris_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.uris_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-}
-
-impl ::protobuf::Message for Mov {
-    fn is_initialized(&self) -> bool {
-        for v in &self.list_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.items_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.uris_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.fromIndex = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.length = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.toIndex = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.list_checksum,
-                    )?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.items_checksum,
-                    )?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.uris_checksum,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.fromIndex {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.length {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.toIndex {
-            my_size += ::protobuf::rt::value_size(3, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.items_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.uris_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.fromIndex {
-            os.write_int32(1, v)?;
-        }
-        if let Some(v) = self.length {
-            os.write_int32(2, v)?;
-        }
-        if let Some(v) = self.toIndex {
-            os.write_int32(3, v)?;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.items_checksum.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.uris_checksum.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Mov {
-        Mov::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "fromIndex",
-                    |m: &Mov| &m.fromIndex,
-                    |m: &mut Mov| &mut m.fromIndex,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "length", |m: &Mov| &m.length, |m: &mut Mov| &mut m.length
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "toIndex",
-                    |m: &Mov| &m.toIndex,
-                    |m: &mut Mov| &mut m.toIndex,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "list_checksum",
-                        |m: &Mov| &m.list_checksum,
-                        |m: &mut Mov| &mut m.list_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "items_checksum",
-                        |m: &Mov| &m.items_checksum,
-                        |m: &mut Mov| &mut m.items_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "uris_checksum",
-                        |m: &Mov| &m.uris_checksum,
-                        |m: &mut Mov| &mut m.uris_checksum,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Mov>(
-                    "Mov",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Mov {
-        static mut instance: ::protobuf::lazy::Lazy<Mov> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Mov::new) }
-    }
-}
-
-impl ::protobuf::Clear for Mov {
-    fn clear(&mut self) {
-        self.fromIndex = ::std::option::Option::None;
-        self.length = ::std::option::Option::None;
-        self.toIndex = ::std::option::Option::None;
-        self.list_checksum.clear();
-        self.items_checksum.clear();
-        self.uris_checksum.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Mov {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Mov {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ItemAttributesPartialState {
-    // message fields
-    values: ::protobuf::SingularPtrField<super::playlist4meta::ItemAttributes>,
-    no_value: ::std::vec::Vec<ItemAttributesPartialState_ItemAttributeKind>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ItemAttributesPartialState {
-    fn default() -> &'a ItemAttributesPartialState {
-        <ItemAttributesPartialState as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ItemAttributesPartialState {
-    pub fn new() -> ItemAttributesPartialState {
-        ::std::default::Default::default()
-    }
-
-    // optional .ItemAttributes values = 1;
-
-    pub fn get_values(&self) -> &super::playlist4meta::ItemAttributes {
-        self.values
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ItemAttributes::default_instance())
-    }
-    pub fn clear_values(&mut self) {
-        self.values.clear();
-    }
-
-    pub fn has_values(&self) -> bool {
-        self.values.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_values(&mut self, v: super::playlist4meta::ItemAttributes) {
-        self.values = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_values(&mut self) -> &mut super::playlist4meta::ItemAttributes {
-        if self.values.is_none() {
-            self.values.set_default();
-        }
-        self.values.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_values(&mut self) -> super::playlist4meta::ItemAttributes {
-        self.values
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ItemAttributes::new())
-    }
-
-    // repeated .ItemAttributesPartialState.ItemAttributeKind no_value = 2;
-
-    pub fn get_no_value(&self) -> &[ItemAttributesPartialState_ItemAttributeKind] {
-        &self.no_value
-    }
-    pub fn clear_no_value(&mut self) {
-        self.no_value.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_no_value(
-        &mut self,
-        v: ::std::vec::Vec<ItemAttributesPartialState_ItemAttributeKind>,
-    ) {
-        self.no_value = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_no_value(
-        &mut self,
-    ) -> &mut ::std::vec::Vec<ItemAttributesPartialState_ItemAttributeKind> {
-        &mut self.no_value
-    }
-
-    // Take field
-    pub fn take_no_value(
-        &mut self,
-    ) -> ::std::vec::Vec<ItemAttributesPartialState_ItemAttributeKind> {
-        ::std::mem::replace(&mut self.no_value, ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for ItemAttributesPartialState {
-    fn is_initialized(&self) -> bool {
-        for v in &self.values {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.values)?;
-                }
-                2 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.no_value,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.values.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.no_value {
-            my_size += ::protobuf::rt::enum_size(2, *value);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.values.as_ref() {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.no_value {
-            os.write_enum(2, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ItemAttributesPartialState {
-        ItemAttributesPartialState::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4meta::ItemAttributes,
-                        >,
-                    >(
-                        "values",
-                        |m: &ItemAttributesPartialState| &m.values,
-                        |m: &mut ItemAttributesPartialState| &mut m.values,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<
-                        ItemAttributesPartialState_ItemAttributeKind,
-                    >,
-                >(
-                    "no_value",
-                    |m: &ItemAttributesPartialState| &m.no_value,
-                    |m: &mut ItemAttributesPartialState| &mut m.no_value,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ItemAttributesPartialState>(
-                    "ItemAttributesPartialState",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ItemAttributesPartialState {
-        static mut instance: ::protobuf::lazy::Lazy<ItemAttributesPartialState> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ItemAttributesPartialState::new) }
-    }
-}
-
-impl ::protobuf::Clear for ItemAttributesPartialState {
-    fn clear(&mut self) {
-        self.values.clear();
-        self.no_value.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ItemAttributesPartialState {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ItemAttributesPartialState {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ItemAttributesPartialState_ItemAttributeKind {
-    ITEM_UNKNOWN = 0,
-    ITEM_ADDED_BY = 1,
-    ITEM_TIMESTAMP = 2,
-    ITEM_MESSAGE = 3,
-    ITEM_SEEN = 4,
-    ITEM_DOWNLOAD_COUNT = 5,
-    ITEM_DOWNLOAD_FORMAT = 6,
-    ITEM_SEVENDIGITAL_ID = 7,
-    ITEM_SEVENDIGITAL_LEFT = 8,
-    ITEM_SEEN_AT = 9,
-    ITEM_PUBLIC = 10,
-}
-
-impl ::protobuf::ProtobufEnum for ItemAttributesPartialState_ItemAttributeKind {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ItemAttributesPartialState_ItemAttributeKind> {
-        match value {
-            0 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_UNKNOWN,
-            ),
-            1 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_ADDED_BY,
-            ),
-            2 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_TIMESTAMP,
-            ),
-            3 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_MESSAGE,
-            ),
-            4 => {
-                ::std::option::Option::Some(ItemAttributesPartialState_ItemAttributeKind::ITEM_SEEN)
-            }
-            5 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_DOWNLOAD_COUNT,
-            ),
-            6 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_DOWNLOAD_FORMAT,
-            ),
-            7 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_SEVENDIGITAL_ID,
-            ),
-            8 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_SEVENDIGITAL_LEFT,
-            ),
-            9 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_SEEN_AT,
-            ),
-            10 => ::std::option::Option::Some(
-                ItemAttributesPartialState_ItemAttributeKind::ITEM_PUBLIC,
-            ),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ItemAttributesPartialState_ItemAttributeKind] = &[
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_UNKNOWN,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_ADDED_BY,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_TIMESTAMP,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_MESSAGE,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_SEEN,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_DOWNLOAD_COUNT,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_DOWNLOAD_FORMAT,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_SEVENDIGITAL_ID,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_SEVENDIGITAL_LEFT,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_SEEN_AT,
-            ItemAttributesPartialState_ItemAttributeKind::ITEM_PUBLIC,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<
-                    ItemAttributesPartialState_ItemAttributeKind,
-                >(
-                    "ItemAttributesPartialState.ItemAttributeKind",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ItemAttributesPartialState_ItemAttributeKind {}
-
-impl ::std::default::Default for ItemAttributesPartialState_ItemAttributeKind {
-    fn default() -> Self {
-        ItemAttributesPartialState_ItemAttributeKind::ITEM_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ItemAttributesPartialState_ItemAttributeKind {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct ListAttributesPartialState {
-    // message fields
-    values: ::protobuf::SingularPtrField<super::playlist4meta::ListAttributes>,
-    no_value: ::std::vec::Vec<ListAttributesPartialState_ListAttributeKind>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a ListAttributesPartialState {
-    fn default() -> &'a ListAttributesPartialState {
-        <ListAttributesPartialState as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl ListAttributesPartialState {
-    pub fn new() -> ListAttributesPartialState {
-        ::std::default::Default::default()
-    }
-
-    // optional .ListAttributes values = 1;
-
-    pub fn get_values(&self) -> &super::playlist4meta::ListAttributes {
-        self.values
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::default_instance())
-    }
-    pub fn clear_values(&mut self) {
-        self.values.clear();
-    }
-
-    pub fn has_values(&self) -> bool {
-        self.values.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_values(&mut self, v: super::playlist4meta::ListAttributes) {
-        self.values = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_values(&mut self) -> &mut super::playlist4meta::ListAttributes {
-        if self.values.is_none() {
-            self.values.set_default();
-        }
-        self.values.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_values(&mut self) -> super::playlist4meta::ListAttributes {
-        self.values
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListAttributes::new())
-    }
-
-    // repeated .ListAttributesPartialState.ListAttributeKind no_value = 2;
-
-    pub fn get_no_value(&self) -> &[ListAttributesPartialState_ListAttributeKind] {
-        &self.no_value
-    }
-    pub fn clear_no_value(&mut self) {
-        self.no_value.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_no_value(
-        &mut self,
-        v: ::std::vec::Vec<ListAttributesPartialState_ListAttributeKind>,
-    ) {
-        self.no_value = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_no_value(
-        &mut self,
-    ) -> &mut ::std::vec::Vec<ListAttributesPartialState_ListAttributeKind> {
-        &mut self.no_value
-    }
-
-    // Take field
-    pub fn take_no_value(
-        &mut self,
-    ) -> ::std::vec::Vec<ListAttributesPartialState_ListAttributeKind> {
-        ::std::mem::replace(&mut self.no_value, ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for ListAttributesPartialState {
-    fn is_initialized(&self) -> bool {
-        for v in &self.values {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.values)?;
-                }
-                2 => ::protobuf::rt::read_repeated_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.no_value,
-                    2,
-                    &mut self.unknown_fields,
-                )?,
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.values.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        for value in &self.no_value {
-            my_size += ::protobuf::rt::enum_size(2, *value);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.values.as_ref() {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        for v in &self.no_value {
-            os.write_enum(2, v.value())?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> ListAttributesPartialState {
-        ListAttributesPartialState::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<
-                            super::playlist4meta::ListAttributes,
-                        >,
-                    >(
-                        "values",
-                        |m: &ListAttributesPartialState| &m.values,
-                        |m: &mut ListAttributesPartialState| &mut m.values,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<
-                        ListAttributesPartialState_ListAttributeKind,
-                    >,
-                >(
-                    "no_value",
-                    |m: &ListAttributesPartialState| &m.no_value,
-                    |m: &mut ListAttributesPartialState| &mut m.no_value,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<ListAttributesPartialState>(
-                    "ListAttributesPartialState",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static ListAttributesPartialState {
-        static mut instance: ::protobuf::lazy::Lazy<ListAttributesPartialState> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(ListAttributesPartialState::new) }
-    }
-}
-
-impl ::protobuf::Clear for ListAttributesPartialState {
-    fn clear(&mut self) {
-        self.values.clear();
-        self.no_value.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for ListAttributesPartialState {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListAttributesPartialState {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum ListAttributesPartialState_ListAttributeKind {
-    LIST_UNKNOWN = 0,
-    LIST_NAME = 1,
-    LIST_DESCRIPTION = 2,
-    LIST_PICTURE = 3,
-    LIST_COLLABORATIVE = 4,
-    LIST_PL3_VERSION = 5,
-    LIST_DELETED_BY_OWNER = 6,
-    LIST_RESTRICTED_COLLABORATIVE = 7,
-}
-
-impl ::protobuf::ProtobufEnum for ListAttributesPartialState_ListAttributeKind {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<ListAttributesPartialState_ListAttributeKind> {
-        match value {
-            0 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_UNKNOWN,
-            ),
-            1 => {
-                ::std::option::Option::Some(ListAttributesPartialState_ListAttributeKind::LIST_NAME)
-            }
-            2 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_DESCRIPTION,
-            ),
-            3 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_PICTURE,
-            ),
-            4 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_COLLABORATIVE,
-            ),
-            5 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_PL3_VERSION,
-            ),
-            6 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_DELETED_BY_OWNER,
-            ),
-            7 => ::std::option::Option::Some(
-                ListAttributesPartialState_ListAttributeKind::LIST_RESTRICTED_COLLABORATIVE,
-            ),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [ListAttributesPartialState_ListAttributeKind] = &[
-            ListAttributesPartialState_ListAttributeKind::LIST_UNKNOWN,
-            ListAttributesPartialState_ListAttributeKind::LIST_NAME,
-            ListAttributesPartialState_ListAttributeKind::LIST_DESCRIPTION,
-            ListAttributesPartialState_ListAttributeKind::LIST_PICTURE,
-            ListAttributesPartialState_ListAttributeKind::LIST_COLLABORATIVE,
-            ListAttributesPartialState_ListAttributeKind::LIST_PL3_VERSION,
-            ListAttributesPartialState_ListAttributeKind::LIST_DELETED_BY_OWNER,
-            ListAttributesPartialState_ListAttributeKind::LIST_RESTRICTED_COLLABORATIVE,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<
-                    ListAttributesPartialState_ListAttributeKind,
-                >(
-                    "ListAttributesPartialState.ListAttributeKind",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for ListAttributesPartialState_ListAttributeKind {}
-
-impl ::std::default::Default for ListAttributesPartialState_ListAttributeKind {
-    fn default() -> Self {
-        ListAttributesPartialState_ListAttributeKind::LIST_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for ListAttributesPartialState_ListAttributeKind {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct UpdateItemAttributes {
-    // message fields
-    index: ::std::option::Option<i32>,
-    new_attributes: ::protobuf::SingularPtrField<ItemAttributesPartialState>,
-    old_attributes: ::protobuf::SingularPtrField<ItemAttributesPartialState>,
-    list_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    old_attributes_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a UpdateItemAttributes {
-    fn default() -> &'a UpdateItemAttributes {
-        <UpdateItemAttributes as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl UpdateItemAttributes {
-    pub fn new() -> UpdateItemAttributes {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 index = 1;
-
-    pub fn get_index(&self) -> i32 {
-        self.index.unwrap_or(0)
-    }
-    pub fn clear_index(&mut self) {
-        self.index = ::std::option::Option::None;
-    }
-
-    pub fn has_index(&self) -> bool {
-        self.index.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_index(&mut self, v: i32) {
-        self.index = ::std::option::Option::Some(v);
-    }
-
-    // optional .ItemAttributesPartialState new_attributes = 2;
-
-    pub fn get_new_attributes(&self) -> &ItemAttributesPartialState {
-        self.new_attributes
-            .as_ref()
-            .unwrap_or_else(|| ItemAttributesPartialState::default_instance())
-    }
-    pub fn clear_new_attributes(&mut self) {
-        self.new_attributes.clear();
-    }
-
-    pub fn has_new_attributes(&self) -> bool {
-        self.new_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_new_attributes(&mut self, v: ItemAttributesPartialState) {
-        self.new_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_new_attributes(&mut self) -> &mut ItemAttributesPartialState {
-        if self.new_attributes.is_none() {
-            self.new_attributes.set_default();
-        }
-        self.new_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_new_attributes(&mut self) -> ItemAttributesPartialState {
-        self.new_attributes
-            .take()
-            .unwrap_or_else(|| ItemAttributesPartialState::new())
-    }
-
-    // optional .ItemAttributesPartialState old_attributes = 3;
-
-    pub fn get_old_attributes(&self) -> &ItemAttributesPartialState {
-        self.old_attributes
-            .as_ref()
-            .unwrap_or_else(|| ItemAttributesPartialState::default_instance())
-    }
-    pub fn clear_old_attributes(&mut self) {
-        self.old_attributes.clear();
-    }
-
-    pub fn has_old_attributes(&self) -> bool {
-        self.old_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_old_attributes(&mut self, v: ItemAttributesPartialState) {
-        self.old_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_old_attributes(&mut self) -> &mut ItemAttributesPartialState {
-        if self.old_attributes.is_none() {
-            self.old_attributes.set_default();
-        }
-        self.old_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_old_attributes(&mut self) -> ItemAttributesPartialState {
-        self.old_attributes
-            .take()
-            .unwrap_or_else(|| ItemAttributesPartialState::new())
-    }
-
-    // optional .ListChecksum list_checksum = 4;
-
-    pub fn get_list_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_list_checksum(&mut self) {
-        self.list_checksum.clear();
-    }
-
-    pub fn has_list_checksum(&self) -> bool {
-        self.list_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_list_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.list_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_list_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.list_checksum.is_none() {
-            self.list_checksum.set_default();
-        }
-        self.list_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_list_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum old_attributes_checksum = 5;
-
-    pub fn get_old_attributes_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.old_attributes_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_old_attributes_checksum(&mut self) {
-        self.old_attributes_checksum.clear();
-    }
-
-    pub fn has_old_attributes_checksum(&self) -> bool {
-        self.old_attributes_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_old_attributes_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.old_attributes_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_old_attributes_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.old_attributes_checksum.is_none() {
-            self.old_attributes_checksum.set_default();
-        }
-        self.old_attributes_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_old_attributes_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.old_attributes_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-}
-
-impl ::protobuf::Message for UpdateItemAttributes {
-    fn is_initialized(&self) -> bool {
-        for v in &self.new_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.old_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.list_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.old_attributes_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.index = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.new_attributes,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.old_attributes,
-                    )?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.list_checksum,
-                    )?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.old_attributes_checksum,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.index {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.new_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.old_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.old_attributes_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.index {
-            os.write_int32(1, v)?;
-        }
-        if let Some(ref v) = self.new_attributes.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.old_attributes.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.old_attributes_checksum.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> UpdateItemAttributes {
-        UpdateItemAttributes::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "index",
-                    |m: &UpdateItemAttributes| &m.index,
-                    |m: &mut UpdateItemAttributes| &mut m.index,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ItemAttributesPartialState>,
-                    >(
-                        "new_attributes",
-                        |m: &UpdateItemAttributes| &m.new_attributes,
-                        |m: &mut UpdateItemAttributes| &mut m.new_attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ItemAttributesPartialState>,
-                    >(
-                        "old_attributes",
-                        |m: &UpdateItemAttributes| &m.old_attributes,
-                        |m: &mut UpdateItemAttributes| &mut m.old_attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "list_checksum",
-                        |m: &UpdateItemAttributes| &m.list_checksum,
-                        |m: &mut UpdateItemAttributes| &mut m.list_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "old_attributes_checksum",
-                        |m: &UpdateItemAttributes| &m.old_attributes_checksum,
-                        |m: &mut UpdateItemAttributes| &mut m.old_attributes_checksum,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<UpdateItemAttributes>(
-                    "UpdateItemAttributes",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static UpdateItemAttributes {
-        static mut instance: ::protobuf::lazy::Lazy<UpdateItemAttributes> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(UpdateItemAttributes::new) }
-    }
-}
-
-impl ::protobuf::Clear for UpdateItemAttributes {
-    fn clear(&mut self) {
-        self.index = ::std::option::Option::None;
-        self.new_attributes.clear();
-        self.old_attributes.clear();
-        self.list_checksum.clear();
-        self.old_attributes_checksum.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for UpdateItemAttributes {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for UpdateItemAttributes {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct UpdateListAttributes {
-    // message fields
-    new_attributes: ::protobuf::SingularPtrField<ListAttributesPartialState>,
-    old_attributes: ::protobuf::SingularPtrField<ListAttributesPartialState>,
-    list_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    old_attributes_checksum: ::protobuf::SingularPtrField<super::playlist4meta::ListChecksum>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a UpdateListAttributes {
-    fn default() -> &'a UpdateListAttributes {
-        <UpdateListAttributes as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl UpdateListAttributes {
-    pub fn new() -> UpdateListAttributes {
-        ::std::default::Default::default()
-    }
-
-    // optional .ListAttributesPartialState new_attributes = 1;
-
-    pub fn get_new_attributes(&self) -> &ListAttributesPartialState {
-        self.new_attributes
-            .as_ref()
-            .unwrap_or_else(|| ListAttributesPartialState::default_instance())
-    }
-    pub fn clear_new_attributes(&mut self) {
-        self.new_attributes.clear();
-    }
-
-    pub fn has_new_attributes(&self) -> bool {
-        self.new_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_new_attributes(&mut self, v: ListAttributesPartialState) {
-        self.new_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_new_attributes(&mut self) -> &mut ListAttributesPartialState {
-        if self.new_attributes.is_none() {
-            self.new_attributes.set_default();
-        }
-        self.new_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_new_attributes(&mut self) -> ListAttributesPartialState {
-        self.new_attributes
-            .take()
-            .unwrap_or_else(|| ListAttributesPartialState::new())
-    }
-
-    // optional .ListAttributesPartialState old_attributes = 2;
-
-    pub fn get_old_attributes(&self) -> &ListAttributesPartialState {
-        self.old_attributes
-            .as_ref()
-            .unwrap_or_else(|| ListAttributesPartialState::default_instance())
-    }
-    pub fn clear_old_attributes(&mut self) {
-        self.old_attributes.clear();
-    }
-
-    pub fn has_old_attributes(&self) -> bool {
-        self.old_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_old_attributes(&mut self, v: ListAttributesPartialState) {
-        self.old_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_old_attributes(&mut self) -> &mut ListAttributesPartialState {
-        if self.old_attributes.is_none() {
-            self.old_attributes.set_default();
-        }
-        self.old_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_old_attributes(&mut self) -> ListAttributesPartialState {
-        self.old_attributes
-            .take()
-            .unwrap_or_else(|| ListAttributesPartialState::new())
-    }
-
-    // optional .ListChecksum list_checksum = 3;
-
-    pub fn get_list_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_list_checksum(&mut self) {
-        self.list_checksum.clear();
-    }
-
-    pub fn has_list_checksum(&self) -> bool {
-        self.list_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_list_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.list_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_list_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.list_checksum.is_none() {
-            self.list_checksum.set_default();
-        }
-        self.list_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_list_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.list_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-
-    // optional .ListChecksum old_attributes_checksum = 4;
-
-    pub fn get_old_attributes_checksum(&self) -> &super::playlist4meta::ListChecksum {
-        self.old_attributes_checksum
-            .as_ref()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::default_instance())
-    }
-    pub fn clear_old_attributes_checksum(&mut self) {
-        self.old_attributes_checksum.clear();
-    }
-
-    pub fn has_old_attributes_checksum(&self) -> bool {
-        self.old_attributes_checksum.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_old_attributes_checksum(&mut self, v: super::playlist4meta::ListChecksum) {
-        self.old_attributes_checksum = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_old_attributes_checksum(&mut self) -> &mut super::playlist4meta::ListChecksum {
-        if self.old_attributes_checksum.is_none() {
-            self.old_attributes_checksum.set_default();
-        }
-        self.old_attributes_checksum.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_old_attributes_checksum(&mut self) -> super::playlist4meta::ListChecksum {
-        self.old_attributes_checksum
-            .take()
-            .unwrap_or_else(|| super::playlist4meta::ListChecksum::new())
-    }
-}
-
-impl ::protobuf::Message for UpdateListAttributes {
-    fn is_initialized(&self) -> bool {
-        for v in &self.new_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.old_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.list_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.old_attributes_checksum {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.new_attributes,
-                    )?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.old_attributes,
-                    )?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.list_checksum,
-                    )?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.old_attributes_checksum,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.new_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.old_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.old_attributes_checksum.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.new_attributes.as_ref() {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.old_attributes.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.list_checksum.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.old_attributes_checksum.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> UpdateListAttributes {
-        UpdateListAttributes::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ListAttributesPartialState>,
-                    >(
-                        "new_attributes",
-                        |m: &UpdateListAttributes| &m.new_attributes,
-                        |m: &mut UpdateListAttributes| &mut m.new_attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<ListAttributesPartialState>,
-                    >(
-                        "old_attributes",
-                        |m: &UpdateListAttributes| &m.old_attributes,
-                        |m: &mut UpdateListAttributes| &mut m.old_attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "list_checksum",
-                        |m: &UpdateListAttributes| &m.list_checksum,
-                        |m: &mut UpdateListAttributes| &mut m.list_checksum,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<super::playlist4meta::ListChecksum>,
-                    >(
-                        "old_attributes_checksum",
-                        |m: &UpdateListAttributes| &m.old_attributes_checksum,
-                        |m: &mut UpdateListAttributes| &mut m.old_attributes_checksum,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<UpdateListAttributes>(
-                    "UpdateListAttributes",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static UpdateListAttributes {
-        static mut instance: ::protobuf::lazy::Lazy<UpdateListAttributes> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(UpdateListAttributes::new) }
-    }
-}
-
-impl ::protobuf::Clear for UpdateListAttributes {
-    fn clear(&mut self) {
-        self.new_attributes.clear();
-        self.old_attributes.clear();
-        self.list_checksum.clear();
-        self.old_attributes_checksum.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for UpdateListAttributes {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for UpdateListAttributes {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Op {
-    // message fields
-    kind: ::std::option::Option<Op_Kind>,
-    add: ::protobuf::SingularPtrField<Add>,
-    rem: ::protobuf::SingularPtrField<Rem>,
-    mov: ::protobuf::SingularPtrField<Mov>,
-    update_item_attributes: ::protobuf::SingularPtrField<UpdateItemAttributes>,
-    update_list_attributes: ::protobuf::SingularPtrField<UpdateListAttributes>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Op {
-    fn default() -> &'a Op {
-        <Op as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Op {
-    pub fn new() -> Op {
-        ::std::default::Default::default()
-    }
-
-    // optional .Op.Kind kind = 1;
-
-    pub fn get_kind(&self) -> Op_Kind {
-        self.kind.unwrap_or(Op_Kind::KIND_UNKNOWN)
-    }
-    pub fn clear_kind(&mut self) {
-        self.kind = ::std::option::Option::None;
-    }
-
-    pub fn has_kind(&self) -> bool {
-        self.kind.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_kind(&mut self, v: Op_Kind) {
-        self.kind = ::std::option::Option::Some(v);
-    }
-
-    // optional .Add add = 2;
-
-    pub fn get_add(&self) -> &Add {
-        self.add.as_ref().unwrap_or_else(|| Add::default_instance())
-    }
-    pub fn clear_add(&mut self) {
-        self.add.clear();
-    }
-
-    pub fn has_add(&self) -> bool {
-        self.add.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_add(&mut self, v: Add) {
-        self.add = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_add(&mut self) -> &mut Add {
-        if self.add.is_none() {
-            self.add.set_default();
-        }
-        self.add.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_add(&mut self) -> Add {
-        self.add.take().unwrap_or_else(|| Add::new())
-    }
-
-    // optional .Rem rem = 3;
-
-    pub fn get_rem(&self) -> &Rem {
-        self.rem.as_ref().unwrap_or_else(|| Rem::default_instance())
-    }
-    pub fn clear_rem(&mut self) {
-        self.rem.clear();
-    }
-
-    pub fn has_rem(&self) -> bool {
-        self.rem.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_rem(&mut self, v: Rem) {
-        self.rem = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_rem(&mut self) -> &mut Rem {
-        if self.rem.is_none() {
-            self.rem.set_default();
-        }
-        self.rem.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_rem(&mut self) -> Rem {
-        self.rem.take().unwrap_or_else(|| Rem::new())
-    }
-
-    // optional .Mov mov = 4;
-
-    pub fn get_mov(&self) -> &Mov {
-        self.mov.as_ref().unwrap_or_else(|| Mov::default_instance())
-    }
-    pub fn clear_mov(&mut self) {
-        self.mov.clear();
-    }
-
-    pub fn has_mov(&self) -> bool {
-        self.mov.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_mov(&mut self, v: Mov) {
-        self.mov = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_mov(&mut self) -> &mut Mov {
-        if self.mov.is_none() {
-            self.mov.set_default();
-        }
-        self.mov.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_mov(&mut self) -> Mov {
-        self.mov.take().unwrap_or_else(|| Mov::new())
-    }
-
-    // optional .UpdateItemAttributes update_item_attributes = 5;
-
-    pub fn get_update_item_attributes(&self) -> &UpdateItemAttributes {
-        self.update_item_attributes
-            .as_ref()
-            .unwrap_or_else(|| UpdateItemAttributes::default_instance())
-    }
-    pub fn clear_update_item_attributes(&mut self) {
-        self.update_item_attributes.clear();
-    }
-
-    pub fn has_update_item_attributes(&self) -> bool {
-        self.update_item_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_update_item_attributes(&mut self, v: UpdateItemAttributes) {
-        self.update_item_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_update_item_attributes(&mut self) -> &mut UpdateItemAttributes {
-        if self.update_item_attributes.is_none() {
-            self.update_item_attributes.set_default();
-        }
-        self.update_item_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_update_item_attributes(&mut self) -> UpdateItemAttributes {
-        self.update_item_attributes
-            .take()
-            .unwrap_or_else(|| UpdateItemAttributes::new())
-    }
-
-    // optional .UpdateListAttributes update_list_attributes = 6;
-
-    pub fn get_update_list_attributes(&self) -> &UpdateListAttributes {
-        self.update_list_attributes
-            .as_ref()
-            .unwrap_or_else(|| UpdateListAttributes::default_instance())
-    }
-    pub fn clear_update_list_attributes(&mut self) {
-        self.update_list_attributes.clear();
-    }
-
-    pub fn has_update_list_attributes(&self) -> bool {
-        self.update_list_attributes.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_update_list_attributes(&mut self, v: UpdateListAttributes) {
-        self.update_list_attributes = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_update_list_attributes(&mut self) -> &mut UpdateListAttributes {
-        if self.update_list_attributes.is_none() {
-            self.update_list_attributes.set_default();
-        }
-        self.update_list_attributes.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_update_list_attributes(&mut self) -> UpdateListAttributes {
-        self.update_list_attributes
-            .take()
-            .unwrap_or_else(|| UpdateListAttributes::new())
-    }
-}
-
-impl ::protobuf::Message for Op {
-    fn is_initialized(&self) -> bool {
-        for v in &self.add {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.rem {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.mov {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.update_item_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.update_list_attributes {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.kind,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.add)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.rem)?;
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.mov)?;
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.update_item_attributes,
-                    )?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.update_list_attributes,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.kind {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        if let Some(ref v) = self.add.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.rem.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.mov.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.update_item_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.update_list_attributes.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.kind {
-            os.write_enum(1, v.value())?;
-        }
-        if let Some(ref v) = self.add.as_ref() {
-            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.rem.as_ref() {
-            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.mov.as_ref() {
-            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.update_item_attributes.as_ref() {
-            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.update_list_attributes.as_ref() {
-            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Op {
-        Op::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<Op_Kind>,
-                >(
-                    "kind", |m: &Op| &m.kind, |m: &mut Op| &mut m.kind
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Add>,
-                    >("add", |m: &Op| &m.add, |m: &mut Op| &mut m.add),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Rem>,
-                    >("rem", |m: &Op| &m.rem, |m: &mut Op| &mut m.rem),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Mov>,
-                    >("mov", |m: &Op| &m.mov, |m: &mut Op| &mut m.mov),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<UpdateItemAttributes>,
-                    >(
-                        "update_item_attributes",
-                        |m: &Op| &m.update_item_attributes,
-                        |m: &mut Op| &mut m.update_item_attributes,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<UpdateListAttributes>,
-                    >(
-                        "update_list_attributes",
-                        |m: &Op| &m.update_list_attributes,
-                        |m: &mut Op| &mut m.update_list_attributes,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Op>(
-                    "Op",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Op {
-        static mut instance: ::protobuf::lazy::Lazy<Op> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Op::new) }
-    }
-}
-
-impl ::protobuf::Clear for Op {
-    fn clear(&mut self) {
-        self.kind = ::std::option::Option::None;
-        self.add.clear();
-        self.rem.clear();
-        self.mov.clear();
-        self.update_item_attributes.clear();
-        self.update_list_attributes.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Op {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Op {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum Op_Kind {
-    KIND_UNKNOWN = 0,
-    ADD = 2,
-    REM = 3,
-    MOV = 4,
-    UPDATE_ITEM_ATTRIBUTES = 5,
-    UPDATE_LIST_ATTRIBUTES = 6,
-}
-
-impl ::protobuf::ProtobufEnum for Op_Kind {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<Op_Kind> {
-        match value {
-            0 => ::std::option::Option::Some(Op_Kind::KIND_UNKNOWN),
-            2 => ::std::option::Option::Some(Op_Kind::ADD),
-            3 => ::std::option::Option::Some(Op_Kind::REM),
-            4 => ::std::option::Option::Some(Op_Kind::MOV),
-            5 => ::std::option::Option::Some(Op_Kind::UPDATE_ITEM_ATTRIBUTES),
-            6 => ::std::option::Option::Some(Op_Kind::UPDATE_LIST_ATTRIBUTES),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [Op_Kind] = &[
-            Op_Kind::KIND_UNKNOWN,
-            Op_Kind::ADD,
-            Op_Kind::REM,
-            Op_Kind::MOV,
-            Op_Kind::UPDATE_ITEM_ATTRIBUTES,
-            Op_Kind::UPDATE_LIST_ATTRIBUTES,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<Op_Kind>(
-                    "Op.Kind",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for Op_Kind {}
-
-impl ::std::default::Default for Op_Kind {
-    fn default() -> Self {
-        Op_Kind::KIND_UNKNOWN
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Op_Kind {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct OpList {
-    // message fields
-    ops: ::protobuf::RepeatedField<Op>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a OpList {
-    fn default() -> &'a OpList {
-        <OpList as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl OpList {
-    pub fn new() -> OpList {
-        ::std::default::Default::default()
-    }
-
-    // repeated .Op ops = 1;
-
-    pub fn get_ops(&self) -> &[Op] {
-        &self.ops
-    }
-    pub fn clear_ops(&mut self) {
-        self.ops.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ops(&mut self, v: ::protobuf::RepeatedField<Op>) {
-        self.ops = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_ops(&mut self) -> &mut ::protobuf::RepeatedField<Op> {
-        &mut self.ops
-    }
-
-    // Take field
-    pub fn take_ops(&mut self) -> ::protobuf::RepeatedField<Op> {
-        ::std::mem::replace(&mut self.ops, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for OpList {
-    fn is_initialized(&self) -> bool {
-        for v in &self.ops {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.ops)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        for value in &self.ops {
-            let len = value.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        for v in &self.ops {
-            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> OpList {
-        OpList::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Op>,
-                    >("ops", |m: &OpList| &m.ops, |m: &mut OpList| &mut m.ops),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<OpList>(
-                    "OpList",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static OpList {
-        static mut instance: ::protobuf::lazy::Lazy<OpList> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(OpList::new) }
-    }
-}
-
-impl ::protobuf::Clear for OpList {
-    fn clear(&mut self) {
-        self.ops.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for OpList {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for OpList {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x12playlist4ops.proto\x12\0\"\x83\x01\n\x03Add\x12\x13\n\tfromIndex\
-    \x18\x01\x20\x01(\x05B\0\x12\x16\n\x05items\x18\x02\x20\x03(\x0b2\x05.It\
-    emB\0\x12&\n\rlist_checksum\x18\x03\x20\x01(\x0b2\r.ListChecksumB\0\x12\
-    \x11\n\x07addLast\x18\x04\x20\x01(\x08B\0\x12\x12\n\x08addFirst\x18\x05\
-    \x20\x01(\x08B\0:\0\"\xd5\x01\n\x03Rem\x12\x13\n\tfromIndex\x18\x01\x20\
-    \x01(\x05B\0\x12\x10\n\x06length\x18\x02\x20\x01(\x05B\0\x12\x16\n\x05it\
-    ems\x18\x03\x20\x03(\x0b2\x05.ItemB\0\x12&\n\rlist_checksum\x18\x04\x20\
-    \x01(\x0b2\r.ListChecksumB\0\x12'\n\x0eitems_checksum\x18\x05\x20\x01(\
-    \x0b2\r.ListChecksumB\0\x12&\n\ruris_checksum\x18\x06\x20\x01(\x0b2\r.Li\
-    stChecksumB\0\x12\x14\n\nitemsAsKey\x18\x07\x20\x01(\x08B\0:\0\"\xba\x01\
-    \n\x03Mov\x12\x13\n\tfromIndex\x18\x01\x20\x01(\x05B\0\x12\x10\n\x06leng\
-    th\x18\x02\x20\x01(\x05B\0\x12\x11\n\x07toIndex\x18\x03\x20\x01(\x05B\0\
-    \x12&\n\rlist_checksum\x18\x04\x20\x01(\x0b2\r.ListChecksumB\0\x12'\n\
-    \x0eitems_checksum\x18\x05\x20\x01(\x0b2\r.ListChecksumB\0\x12&\n\ruris_\
-    checksum\x18\x06\x20\x01(\x0b2\r.ListChecksumB\0:\0\"\x82\x03\n\x1aItemA\
-    ttributesPartialState\x12!\n\x06values\x18\x01\x20\x01(\x0b2\x0f.ItemAtt\
-    ributesB\0\x12A\n\x08no_value\x18\x02\x20\x03(\x0e2-.ItemAttributesParti\
-    alState.ItemAttributeKindB\0\"\xfb\x01\n\x11ItemAttributeKind\x12\x10\n\
-    \x0cITEM_UNKNOWN\x10\0\x12\x11\n\rITEM_ADDED_BY\x10\x01\x12\x12\n\x0eITE\
-    M_TIMESTAMP\x10\x02\x12\x10\n\x0cITEM_MESSAGE\x10\x03\x12\r\n\tITEM_SEEN\
-    \x10\x04\x12\x17\n\x13ITEM_DOWNLOAD_COUNT\x10\x05\x12\x18\n\x14ITEM_DOWN\
-    LOAD_FORMAT\x10\x06\x12\x18\n\x14ITEM_SEVENDIGITAL_ID\x10\x07\x12\x1a\n\
-    \x16ITEM_SEVENDIGITAL_LEFT\x10\x08\x12\x10\n\x0cITEM_SEEN_AT\x10\t\x12\
-    \x0f\n\x0bITEM_PUBLIC\x10\n\x1a\0:\0\"\xd1\x02\n\x1aListAttributesPartia\
-    lState\x12!\n\x06values\x18\x01\x20\x01(\x0b2\x0f.ListAttributesB\0\x12A\
-    \n\x08no_value\x18\x02\x20\x03(\x0e2-.ListAttributesPartialState.ListAtt\
-    ributeKindB\0\"\xca\x01\n\x11ListAttributeKind\x12\x10\n\x0cLIST_UNKNOWN\
-    \x10\0\x12\r\n\tLIST_NAME\x10\x01\x12\x14\n\x10LIST_DESCRIPTION\x10\x02\
-    \x12\x10\n\x0cLIST_PICTURE\x10\x03\x12\x16\n\x12LIST_COLLABORATIVE\x10\
-    \x04\x12\x14\n\x10LIST_PL3_VERSION\x10\x05\x12\x19\n\x15LIST_DELETED_BY_\
-    OWNER\x10\x06\x12!\n\x1dLIST_RESTRICTED_COLLABORATIVE\x10\x07\x1a\0:\0\"\
-    \xf1\x01\n\x14UpdateItemAttributes\x12\x0f\n\x05index\x18\x01\x20\x01(\
-    \x05B\0\x125\n\x0enew_attributes\x18\x02\x20\x01(\x0b2\x1b.ItemAttribute\
-    sPartialStateB\0\x125\n\x0eold_attributes\x18\x03\x20\x01(\x0b2\x1b.Item\
-    AttributesPartialStateB\0\x12&\n\rlist_checksum\x18\x04\x20\x01(\x0b2\r.\
-    ListChecksumB\0\x120\n\x17old_attributes_checksum\x18\x05\x20\x01(\x0b2\
-    \r.ListChecksumB\0:\0\"\xe0\x01\n\x14UpdateListAttributes\x125\n\x0enew_\
-    attributes\x18\x01\x20\x01(\x0b2\x1b.ListAttributesPartialStateB\0\x125\
-    \n\x0eold_attributes\x18\x02\x20\x01(\x0b2\x1b.ListAttributesPartialStat\
-    eB\0\x12&\n\rlist_checksum\x18\x03\x20\x01(\x0b2\r.ListChecksumB\0\x120\
-    \n\x17old_attributes_checksum\x18\x04\x20\x01(\x0b2\r.ListChecksumB\0:\0\
-    \"\xc0\x02\n\x02Op\x12\x18\n\x04kind\x18\x01\x20\x01(\x0e2\x08.Op.KindB\
-    \0\x12\x13\n\x03add\x18\x02\x20\x01(\x0b2\x04.AddB\0\x12\x13\n\x03rem\
-    \x18\x03\x20\x01(\x0b2\x04.RemB\0\x12\x13\n\x03mov\x18\x04\x20\x01(\x0b2\
-    \x04.MovB\0\x127\n\x16update_item_attributes\x18\x05\x20\x01(\x0b2\x15.U\
-    pdateItemAttributesB\0\x127\n\x16update_list_attributes\x18\x06\x20\x01(\
-    \x0b2\x15.UpdateListAttributesB\0\"m\n\x04Kind\x12\x10\n\x0cKIND_UNKNOWN\
-    \x10\0\x12\x07\n\x03ADD\x10\x02\x12\x07\n\x03REM\x10\x03\x12\x07\n\x03MO\
-    V\x10\x04\x12\x1a\n\x16UPDATE_ITEM_ATTRIBUTES\x10\x05\x12\x1a\n\x16UPDAT\
-    E_LIST_ATTRIBUTES\x10\x06\x1a\0:\0\"\x1e\n\x06OpList\x12\x12\n\x03ops\
-    \x18\x01\x20\x03(\x0b2\x03.OpB\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 320
protocol/src/pubsub.rs

@@ -1,320 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `pubsub.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Subscription {
-    // message fields
-    uri: ::protobuf::SingularField<::std::string::String>,
-    expiry: ::std::option::Option<i32>,
-    status_code: ::std::option::Option<i32>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Subscription {
-    fn default() -> &'a Subscription {
-        <Subscription as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Subscription {
-    pub fn new() -> Subscription {
-        ::std::default::Default::default()
-    }
-
-    // optional string uri = 1;
-
-    pub fn get_uri(&self) -> &str {
-        match self.uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_uri(&mut self) {
-        self.uri.clear();
-    }
-
-    pub fn has_uri(&self) -> bool {
-        self.uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uri(&mut self, v: ::std::string::String) {
-        self.uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
-        if self.uri.is_none() {
-            self.uri.set_default();
-        }
-        self.uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uri(&mut self) -> ::std::string::String {
-        self.uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional int32 expiry = 2;
-
-    pub fn get_expiry(&self) -> i32 {
-        self.expiry.unwrap_or(0)
-    }
-    pub fn clear_expiry(&mut self) {
-        self.expiry = ::std::option::Option::None;
-    }
-
-    pub fn has_expiry(&self) -> bool {
-        self.expiry.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_expiry(&mut self, v: i32) {
-        self.expiry = ::std::option::Option::Some(v);
-    }
-
-    // optional int32 status_code = 3;
-
-    pub fn get_status_code(&self) -> i32 {
-        self.status_code.unwrap_or(0)
-    }
-    pub fn clear_status_code(&mut self) {
-        self.status_code = ::std::option::Option::None;
-    }
-
-    pub fn has_status_code(&self) -> bool {
-        self.status_code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_status_code(&mut self, v: i32) {
-        self.status_code = ::std::option::Option::Some(v);
-    }
-}
-
-impl ::protobuf::Message for Subscription {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.uri)?;
-                }
-                2 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.expiry = ::std::option::Option::Some(tmp);
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.status_code = ::std::option::Option::Some(tmp);
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(v) = self.expiry {
-            my_size += ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.status_code {
-            my_size += ::protobuf::rt::value_size(3, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.uri.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(v) = self.expiry {
-            os.write_int32(2, v)?;
-        }
-        if let Some(v) = self.status_code {
-            os.write_int32(3, v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Subscription {
-        Subscription::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "uri",
-                        |m: &Subscription| &m.uri,
-                        |m: &mut Subscription| &mut m.uri,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "expiry",
-                    |m: &Subscription| &m.expiry,
-                    |m: &mut Subscription| &mut m.expiry,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "status_code",
-                    |m: &Subscription| &m.status_code,
-                    |m: &mut Subscription| &mut m.status_code,
-                ));
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Subscription>(
-                    "Subscription",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Subscription {
-        static mut instance: ::protobuf::lazy::Lazy<Subscription> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Subscription::new) }
-    }
-}
-
-impl ::protobuf::Clear for Subscription {
-    fn clear(&mut self) {
-        self.uri.clear();
-        self.expiry = ::std::option::Option::None;
-        self.status_code = ::std::option::Option::None;
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Subscription {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Subscription {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x0cpubsub.proto\x12\0\"H\n\x0cSubscription\x12\r\n\x03uri\x18\x01\x20\
-    \x01(\tB\0\x12\x10\n\x06expiry\x18\x02\x20\x01(\x05B\0\x12\x15\n\x0bstat\
-    us_code\x18\x03\x20\x01(\x05B\0:\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 0 - 4503
protocol/src/spirc.rs

@@ -1,4503 +0,0 @@
-// This file is generated by rust-protobuf 2.14.0. Do not edit
-// @generated
-
-// https://github.com/rust-lang/rust-clippy/issues/702
-#![allow(unknown_lints)]
-#![allow(clippy::all)]
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-
-#![allow(box_pointers)]
-#![allow(dead_code)]
-#![allow(missing_docs)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-#![allow(non_upper_case_globals)]
-#![allow(trivial_casts)]
-#![allow(unsafe_code)]
-#![allow(unused_imports)]
-#![allow(unused_results)]
-//! Generated file from `spirc.proto`
-
-use protobuf::Message as Message_imported_for_functions;
-use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
-
-/// Generated files are compatible only with the same version
-/// of protobuf runtime.
-// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_14_0;
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Frame {
-    // message fields
-    version: ::std::option::Option<u32>,
-    ident: ::protobuf::SingularField<::std::string::String>,
-    protocol_version: ::protobuf::SingularField<::std::string::String>,
-    seq_nr: ::std::option::Option<u32>,
-    typ: ::std::option::Option<MessageType>,
-    device_state: ::protobuf::SingularPtrField<DeviceState>,
-    goodbye: ::protobuf::SingularPtrField<Goodbye>,
-    state: ::protobuf::SingularPtrField<State>,
-    position: ::std::option::Option<u32>,
-    volume: ::std::option::Option<u32>,
-    state_update_id: ::std::option::Option<i64>,
-    recipient: ::protobuf::RepeatedField<::std::string::String>,
-    context_player_state: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    new_name: ::protobuf::SingularField<::std::string::String>,
-    metadata: ::protobuf::SingularPtrField<Metadata>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Frame {
-    fn default() -> &'a Frame {
-        <Frame as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Frame {
-    pub fn new() -> Frame {
-        ::std::default::Default::default()
-    }
-
-    // optional uint32 version = 1;
-
-    pub fn get_version(&self) -> u32 {
-        self.version.unwrap_or(0)
-    }
-    pub fn clear_version(&mut self) {
-        self.version = ::std::option::Option::None;
-    }
-
-    pub fn has_version(&self) -> bool {
-        self.version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_version(&mut self, v: u32) {
-        self.version = ::std::option::Option::Some(v);
-    }
-
-    // optional string ident = 2;
-
-    pub fn get_ident(&self) -> &str {
-        match self.ident.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_ident(&mut self) {
-        self.ident.clear();
-    }
-
-    pub fn has_ident(&self) -> bool {
-        self.ident.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ident(&mut self, v: ::std::string::String) {
-        self.ident = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_ident(&mut self) -> &mut ::std::string::String {
-        if self.ident.is_none() {
-            self.ident.set_default();
-        }
-        self.ident.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_ident(&mut self) -> ::std::string::String {
-        self.ident
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string protocol_version = 3;
-
-    pub fn get_protocol_version(&self) -> &str {
-        match self.protocol_version.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_protocol_version(&mut self) {
-        self.protocol_version.clear();
-    }
-
-    pub fn has_protocol_version(&self) -> bool {
-        self.protocol_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_protocol_version(&mut self, v: ::std::string::String) {
-        self.protocol_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_protocol_version(&mut self) -> &mut ::std::string::String {
-        if self.protocol_version.is_none() {
-            self.protocol_version.set_default();
-        }
-        self.protocol_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_protocol_version(&mut self) -> ::std::string::String {
-        self.protocol_version
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional uint32 seq_nr = 4;
-
-    pub fn get_seq_nr(&self) -> u32 {
-        self.seq_nr.unwrap_or(0)
-    }
-    pub fn clear_seq_nr(&mut self) {
-        self.seq_nr = ::std::option::Option::None;
-    }
-
-    pub fn has_seq_nr(&self) -> bool {
-        self.seq_nr.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_seq_nr(&mut self, v: u32) {
-        self.seq_nr = ::std::option::Option::Some(v);
-    }
-
-    // optional .MessageType typ = 5;
-
-    pub fn get_typ(&self) -> MessageType {
-        self.typ.unwrap_or(MessageType::kMessageTypeHello)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: MessageType) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // optional .DeviceState device_state = 7;
-
-    pub fn get_device_state(&self) -> &DeviceState {
-        self.device_state
-            .as_ref()
-            .unwrap_or_else(|| DeviceState::default_instance())
-    }
-    pub fn clear_device_state(&mut self) {
-        self.device_state.clear();
-    }
-
-    pub fn has_device_state(&self) -> bool {
-        self.device_state.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_device_state(&mut self, v: DeviceState) {
-        self.device_state = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_device_state(&mut self) -> &mut DeviceState {
-        if self.device_state.is_none() {
-            self.device_state.set_default();
-        }
-        self.device_state.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_device_state(&mut self) -> DeviceState {
-        self.device_state
-            .take()
-            .unwrap_or_else(|| DeviceState::new())
-    }
-
-    // optional .Goodbye goodbye = 11;
-
-    pub fn get_goodbye(&self) -> &Goodbye {
-        self.goodbye
-            .as_ref()
-            .unwrap_or_else(|| Goodbye::default_instance())
-    }
-    pub fn clear_goodbye(&mut self) {
-        self.goodbye.clear();
-    }
-
-    pub fn has_goodbye(&self) -> bool {
-        self.goodbye.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_goodbye(&mut self, v: Goodbye) {
-        self.goodbye = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_goodbye(&mut self) -> &mut Goodbye {
-        if self.goodbye.is_none() {
-            self.goodbye.set_default();
-        }
-        self.goodbye.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_goodbye(&mut self) -> Goodbye {
-        self.goodbye.take().unwrap_or_else(|| Goodbye::new())
-    }
-
-    // optional .State state = 12;
-
-    pub fn get_state(&self) -> &State {
-        self.state
-            .as_ref()
-            .unwrap_or_else(|| State::default_instance())
-    }
-    pub fn clear_state(&mut self) {
-        self.state.clear();
-    }
-
-    pub fn has_state(&self) -> bool {
-        self.state.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_state(&mut self, v: State) {
-        self.state = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_state(&mut self) -> &mut State {
-        if self.state.is_none() {
-            self.state.set_default();
-        }
-        self.state.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_state(&mut self) -> State {
-        self.state.take().unwrap_or_else(|| State::new())
-    }
-
-    // optional uint32 position = 13;
-
-    pub fn get_position(&self) -> u32 {
-        self.position.unwrap_or(0)
-    }
-    pub fn clear_position(&mut self) {
-        self.position = ::std::option::Option::None;
-    }
-
-    pub fn has_position(&self) -> bool {
-        self.position.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_position(&mut self, v: u32) {
-        self.position = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 volume = 14;
-
-    pub fn get_volume(&self) -> u32 {
-        self.volume.unwrap_or(0)
-    }
-    pub fn clear_volume(&mut self) {
-        self.volume = ::std::option::Option::None;
-    }
-
-    pub fn has_volume(&self) -> bool {
-        self.volume.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_volume(&mut self, v: u32) {
-        self.volume = ::std::option::Option::Some(v);
-    }
-
-    // optional int64 state_update_id = 17;
-
-    pub fn get_state_update_id(&self) -> i64 {
-        self.state_update_id.unwrap_or(0)
-    }
-    pub fn clear_state_update_id(&mut self) {
-        self.state_update_id = ::std::option::Option::None;
-    }
-
-    pub fn has_state_update_id(&self) -> bool {
-        self.state_update_id.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_state_update_id(&mut self, v: i64) {
-        self.state_update_id = ::std::option::Option::Some(v);
-    }
-
-    // repeated string recipient = 18;
-
-    pub fn get_recipient(&self) -> &[::std::string::String] {
-        &self.recipient
-    }
-    pub fn clear_recipient(&mut self) {
-        self.recipient.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_recipient(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.recipient = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_recipient(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.recipient
-    }
-
-    // Take field
-    pub fn take_recipient(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.recipient, ::protobuf::RepeatedField::new())
-    }
-
-    // optional bytes context_player_state = 19;
-
-    pub fn get_context_player_state(&self) -> &[u8] {
-        match self.context_player_state.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_context_player_state(&mut self) {
-        self.context_player_state.clear();
-    }
-
-    pub fn has_context_player_state(&self) -> bool {
-        self.context_player_state.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_context_player_state(&mut self, v: ::std::vec::Vec<u8>) {
-        self.context_player_state = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_context_player_state(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.context_player_state.is_none() {
-            self.context_player_state.set_default();
-        }
-        self.context_player_state.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_context_player_state(&mut self) -> ::std::vec::Vec<u8> {
-        self.context_player_state
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string new_name = 20;
-
-    pub fn get_new_name(&self) -> &str {
-        match self.new_name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_new_name(&mut self) {
-        self.new_name.clear();
-    }
-
-    pub fn has_new_name(&self) -> bool {
-        self.new_name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_new_name(&mut self, v: ::std::string::String) {
-        self.new_name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_new_name(&mut self) -> &mut ::std::string::String {
-        if self.new_name.is_none() {
-            self.new_name.set_default();
-        }
-        self.new_name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_new_name(&mut self) -> ::std::string::String {
-        self.new_name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional .Metadata metadata = 25;
-
-    pub fn get_metadata(&self) -> &Metadata {
-        self.metadata
-            .as_ref()
-            .unwrap_or_else(|| Metadata::default_instance())
-    }
-    pub fn clear_metadata(&mut self) {
-        self.metadata.clear();
-    }
-
-    pub fn has_metadata(&self) -> bool {
-        self.metadata.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_metadata(&mut self, v: Metadata) {
-        self.metadata = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_metadata(&mut self) -> &mut Metadata {
-        if self.metadata.is_none() {
-            self.metadata.set_default();
-        }
-        self.metadata.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_metadata(&mut self) -> Metadata {
-        self.metadata.take().unwrap_or_else(|| Metadata::new())
-    }
-}
-
-impl ::protobuf::Message for Frame {
-    fn is_initialized(&self) -> bool {
-        for v in &self.device_state {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.goodbye {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.state {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.metadata {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.version = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.ident)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.protocol_version,
-                    )?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.seq_nr = ::std::option::Option::Some(tmp);
-                }
-                5 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    5,
-                    &mut self.unknown_fields,
-                )?,
-                7 => {
-                    ::protobuf::rt::read_singular_message_into(
-                        wire_type,
-                        is,
-                        &mut self.device_state,
-                    )?;
-                }
-                11 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.goodbye)?;
-                }
-                12 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.state)?;
-                }
-                13 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.position = ::std::option::Option::Some(tmp);
-                }
-                14 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.volume = ::std::option::Option::Some(tmp);
-                }
-                17 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.state_update_id = ::std::option::Option::Some(tmp);
-                }
-                18 => {
-                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.recipient)?;
-                }
-                19 => {
-                    ::protobuf::rt::read_singular_bytes_into(
-                        wire_type,
-                        is,
-                        &mut self.context_player_state,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.new_name)?;
-                }
-                25 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.metadata)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.version {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.ident.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(ref v) = self.protocol_version.as_ref() {
-            my_size += ::protobuf::rt::string_size(3, &v);
-        }
-        if let Some(v) = self.seq_nr {
-            my_size += ::protobuf::rt::value_size(4, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(5, v);
-        }
-        if let Some(ref v) = self.device_state.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.goodbye.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.state.as_ref() {
-            let len = v.compute_size();
-            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(v) = self.position {
-            my_size += ::protobuf::rt::value_size(13, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.volume {
-            my_size += ::protobuf::rt::value_size(14, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.state_update_id {
-            my_size += ::protobuf::rt::value_size(17, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        for value in &self.recipient {
-            my_size += ::protobuf::rt::string_size(18, &value);
-        }
-        if let Some(ref v) = self.context_player_state.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(19, &v);
-        }
-        if let Some(ref v) = self.new_name.as_ref() {
-            my_size += ::protobuf::rt::string_size(20, &v);
-        }
-        if let Some(ref v) = self.metadata.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.version {
-            os.write_uint32(1, v)?;
-        }
-        if let Some(ref v) = self.ident.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(ref v) = self.protocol_version.as_ref() {
-            os.write_string(3, &v)?;
-        }
-        if let Some(v) = self.seq_nr {
-            os.write_uint32(4, v)?;
-        }
-        if let Some(v) = self.typ {
-            os.write_enum(5, v.value())?;
-        }
-        if let Some(ref v) = self.device_state.as_ref() {
-            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.goodbye.as_ref() {
-            os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.state.as_ref() {
-            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(v) = self.position {
-            os.write_uint32(13, v)?;
-        }
-        if let Some(v) = self.volume {
-            os.write_uint32(14, v)?;
-        }
-        if let Some(v) = self.state_update_id {
-            os.write_int64(17, v)?;
-        }
-        for v in &self.recipient {
-            os.write_string(18, &v)?;
-        }
-        if let Some(ref v) = self.context_player_state.as_ref() {
-            os.write_bytes(19, &v)?;
-        }
-        if let Some(ref v) = self.new_name.as_ref() {
-            os.write_string(20, &v)?;
-        }
-        if let Some(ref v) = self.metadata.as_ref() {
-            os.write_tag(25, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Frame {
-        Frame::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "version",
-                    |m: &Frame| &m.version,
-                    |m: &mut Frame| &mut m.version,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "ident", |m: &Frame| &m.ident, |m: &mut Frame| &mut m.ident
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "protocol_version",
-                        |m: &Frame| &m.protocol_version,
-                        |m: &mut Frame| &mut m.protocol_version,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "seq_nr",
-                    |m: &Frame| &m.seq_nr,
-                    |m: &mut Frame| &mut m.seq_nr,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<MessageType>,
-                >(
-                    "typ", |m: &Frame| &m.typ, |m: &mut Frame| &mut m.typ
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<DeviceState>,
-                    >(
-                        "device_state",
-                        |m: &Frame| &m.device_state,
-                        |m: &mut Frame| &mut m.device_state,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Goodbye>,
-                    >(
-                        "goodbye",
-                        |m: &Frame| &m.goodbye,
-                        |m: &mut Frame| &mut m.goodbye,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<State>,
-                    >(
-                        "state", |m: &Frame| &m.state, |m: &mut Frame| &mut m.state
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "position",
-                    |m: &Frame| &m.position,
-                    |m: &mut Frame| &mut m.position,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "volume",
-                    |m: &Frame| &m.volume,
-                    |m: &mut Frame| &mut m.volume,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "state_update_id",
-                    |m: &Frame| &m.state_update_id,
-                    |m: &mut Frame| &mut m.state_update_id,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "recipient",
-                        |m: &Frame| &m.recipient,
-                        |m: &mut Frame| &mut m.recipient,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "context_player_state",
-                        |m: &Frame| &m.context_player_state,
-                        |m: &mut Frame| &mut m.context_player_state,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "new_name",
-                        |m: &Frame| &m.new_name,
-                        |m: &mut Frame| &mut m.new_name,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Metadata>,
-                    >(
-                        "metadata",
-                        |m: &Frame| &m.metadata,
-                        |m: &mut Frame| &mut m.metadata,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Frame>(
-                    "Frame",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Frame {
-        static mut instance: ::protobuf::lazy::Lazy<Frame> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Frame::new) }
-    }
-}
-
-impl ::protobuf::Clear for Frame {
-    fn clear(&mut self) {
-        self.version = ::std::option::Option::None;
-        self.ident.clear();
-        self.protocol_version.clear();
-        self.seq_nr = ::std::option::Option::None;
-        self.typ = ::std::option::Option::None;
-        self.device_state.clear();
-        self.goodbye.clear();
-        self.state.clear();
-        self.position = ::std::option::Option::None;
-        self.volume = ::std::option::Option::None;
-        self.state_update_id = ::std::option::Option::None;
-        self.recipient.clear();
-        self.context_player_state.clear();
-        self.new_name.clear();
-        self.metadata.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Frame {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Frame {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct DeviceState {
-    // message fields
-    sw_version: ::protobuf::SingularField<::std::string::String>,
-    is_active: ::std::option::Option<bool>,
-    can_play: ::std::option::Option<bool>,
-    volume: ::std::option::Option<u32>,
-    name: ::protobuf::SingularField<::std::string::String>,
-    error_code: ::std::option::Option<u32>,
-    became_active_at: ::std::option::Option<i64>,
-    error_message: ::protobuf::SingularField<::std::string::String>,
-    capabilities: ::protobuf::RepeatedField<Capability>,
-    context_player_error: ::protobuf::SingularField<::std::string::String>,
-    metadata: ::protobuf::RepeatedField<Metadata>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a DeviceState {
-    fn default() -> &'a DeviceState {
-        <DeviceState as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl DeviceState {
-    pub fn new() -> DeviceState {
-        ::std::default::Default::default()
-    }
-
-    // optional string sw_version = 1;
-
-    pub fn get_sw_version(&self) -> &str {
-        match self.sw_version.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_sw_version(&mut self) {
-        self.sw_version.clear();
-    }
-
-    pub fn has_sw_version(&self) -> bool {
-        self.sw_version.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_sw_version(&mut self, v: ::std::string::String) {
-        self.sw_version = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_sw_version(&mut self) -> &mut ::std::string::String {
-        if self.sw_version.is_none() {
-            self.sw_version.set_default();
-        }
-        self.sw_version.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_sw_version(&mut self) -> ::std::string::String {
-        self.sw_version
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool is_active = 10;
-
-    pub fn get_is_active(&self) -> bool {
-        self.is_active.unwrap_or(false)
-    }
-    pub fn clear_is_active(&mut self) {
-        self.is_active = ::std::option::Option::None;
-    }
-
-    pub fn has_is_active(&self) -> bool {
-        self.is_active.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_is_active(&mut self, v: bool) {
-        self.is_active = ::std::option::Option::Some(v);
-    }
-
-    // optional bool can_play = 11;
-
-    pub fn get_can_play(&self) -> bool {
-        self.can_play.unwrap_or(false)
-    }
-    pub fn clear_can_play(&mut self) {
-        self.can_play = ::std::option::Option::None;
-    }
-
-    pub fn has_can_play(&self) -> bool {
-        self.can_play.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_can_play(&mut self, v: bool) {
-        self.can_play = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 volume = 12;
-
-    pub fn get_volume(&self) -> u32 {
-        self.volume.unwrap_or(0)
-    }
-    pub fn clear_volume(&mut self) {
-        self.volume = ::std::option::Option::None;
-    }
-
-    pub fn has_volume(&self) -> bool {
-        self.volume.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_volume(&mut self, v: u32) {
-        self.volume = ::std::option::Option::Some(v);
-    }
-
-    // optional string name = 13;
-
-    pub fn get_name(&self) -> &str {
-        match self.name.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_name(&mut self) {
-        self.name.clear();
-    }
-
-    pub fn has_name(&self) -> bool {
-        self.name.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_name(&mut self, v: ::std::string::String) {
-        self.name = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_name(&mut self) -> &mut ::std::string::String {
-        if self.name.is_none() {
-            self.name.set_default();
-        }
-        self.name.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_name(&mut self) -> ::std::string::String {
-        self.name
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional uint32 error_code = 14;
-
-    pub fn get_error_code(&self) -> u32 {
-        self.error_code.unwrap_or(0)
-    }
-    pub fn clear_error_code(&mut self) {
-        self.error_code = ::std::option::Option::None;
-    }
-
-    pub fn has_error_code(&self) -> bool {
-        self.error_code.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_error_code(&mut self, v: u32) {
-        self.error_code = ::std::option::Option::Some(v);
-    }
-
-    // optional int64 became_active_at = 15;
-
-    pub fn get_became_active_at(&self) -> i64 {
-        self.became_active_at.unwrap_or(0)
-    }
-    pub fn clear_became_active_at(&mut self) {
-        self.became_active_at = ::std::option::Option::None;
-    }
-
-    pub fn has_became_active_at(&self) -> bool {
-        self.became_active_at.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_became_active_at(&mut self, v: i64) {
-        self.became_active_at = ::std::option::Option::Some(v);
-    }
-
-    // optional string error_message = 16;
-
-    pub fn get_error_message(&self) -> &str {
-        match self.error_message.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_error_message(&mut self) {
-        self.error_message.clear();
-    }
-
-    pub fn has_error_message(&self) -> bool {
-        self.error_message.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_error_message(&mut self, v: ::std::string::String) {
-        self.error_message = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_error_message(&mut self) -> &mut ::std::string::String {
-        if self.error_message.is_none() {
-            self.error_message.set_default();
-        }
-        self.error_message.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_error_message(&mut self) -> ::std::string::String {
-        self.error_message
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Capability capabilities = 17;
-
-    pub fn get_capabilities(&self) -> &[Capability] {
-        &self.capabilities
-    }
-    pub fn clear_capabilities(&mut self) {
-        self.capabilities.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_capabilities(&mut self, v: ::protobuf::RepeatedField<Capability>) {
-        self.capabilities = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_capabilities(&mut self) -> &mut ::protobuf::RepeatedField<Capability> {
-        &mut self.capabilities
-    }
-
-    // Take field
-    pub fn take_capabilities(&mut self) -> ::protobuf::RepeatedField<Capability> {
-        ::std::mem::replace(&mut self.capabilities, ::protobuf::RepeatedField::new())
-    }
-
-    // optional string context_player_error = 20;
-
-    pub fn get_context_player_error(&self) -> &str {
-        match self.context_player_error.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_context_player_error(&mut self) {
-        self.context_player_error.clear();
-    }
-
-    pub fn has_context_player_error(&self) -> bool {
-        self.context_player_error.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_context_player_error(&mut self, v: ::std::string::String) {
-        self.context_player_error = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_context_player_error(&mut self) -> &mut ::std::string::String {
-        if self.context_player_error.is_none() {
-            self.context_player_error.set_default();
-        }
-        self.context_player_error.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_context_player_error(&mut self) -> ::std::string::String {
-        self.context_player_error
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // repeated .Metadata metadata = 25;
-
-    pub fn get_metadata(&self) -> &[Metadata] {
-        &self.metadata
-    }
-    pub fn clear_metadata(&mut self) {
-        self.metadata.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_metadata(&mut self, v: ::protobuf::RepeatedField<Metadata>) {
-        self.metadata = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_metadata(&mut self) -> &mut ::protobuf::RepeatedField<Metadata> {
-        &mut self.metadata
-    }
-
-    // Take field
-    pub fn take_metadata(&mut self) -> ::protobuf::RepeatedField<Metadata> {
-        ::std::mem::replace(&mut self.metadata, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for DeviceState {
-    fn is_initialized(&self) -> bool {
-        for v in &self.capabilities {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.metadata {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.sw_version)?;
-                }
-                10 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.is_active = ::std::option::Option::Some(tmp);
-                }
-                11 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.can_play = ::std::option::Option::Some(tmp);
-                }
-                12 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.volume = ::std::option::Option::Some(tmp);
-                }
-                13 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.name)?;
-                }
-                14 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.error_code = ::std::option::Option::Some(tmp);
-                }
-                15 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int64()?;
-                    self.became_active_at = ::std::option::Option::Some(tmp);
-                }
-                16 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.error_message,
-                    )?;
-                }
-                17 => {
-                    ::protobuf::rt::read_repeated_message_into(
-                        wire_type,
-                        is,
-                        &mut self.capabilities,
-                    )?;
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.context_player_error,
-                    )?;
-                }
-                25 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.metadata)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.sw_version.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(v) = self.is_active {
-            my_size += 2;
-        }
-        if let Some(v) = self.can_play {
-            my_size += 2;
-        }
-        if let Some(v) = self.volume {
-            my_size += ::protobuf::rt::value_size(12, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            my_size += ::protobuf::rt::string_size(13, &v);
-        }
-        if let Some(v) = self.error_code {
-            my_size += ::protobuf::rt::value_size(14, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.became_active_at {
-            my_size += ::protobuf::rt::value_size(15, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.error_message.as_ref() {
-            my_size += ::protobuf::rt::string_size(16, &v);
-        }
-        for value in &self.capabilities {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.context_player_error.as_ref() {
-            my_size += ::protobuf::rt::string_size(20, &v);
-        }
-        for value in &self.metadata {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.sw_version.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(v) = self.is_active {
-            os.write_bool(10, v)?;
-        }
-        if let Some(v) = self.can_play {
-            os.write_bool(11, v)?;
-        }
-        if let Some(v) = self.volume {
-            os.write_uint32(12, v)?;
-        }
-        if let Some(ref v) = self.name.as_ref() {
-            os.write_string(13, &v)?;
-        }
-        if let Some(v) = self.error_code {
-            os.write_uint32(14, v)?;
-        }
-        if let Some(v) = self.became_active_at {
-            os.write_int64(15, v)?;
-        }
-        if let Some(ref v) = self.error_message.as_ref() {
-            os.write_string(16, &v)?;
-        }
-        for v in &self.capabilities {
-            os.write_tag(17, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.context_player_error.as_ref() {
-            os.write_string(20, &v)?;
-        }
-        for v in &self.metadata {
-            os.write_tag(25, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> DeviceState {
-        DeviceState::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "sw_version",
-                        |m: &DeviceState| &m.sw_version,
-                        |m: &mut DeviceState| &mut m.sw_version,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "is_active",
-                    |m: &DeviceState| &m.is_active,
-                    |m: &mut DeviceState| &mut m.is_active,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "can_play",
-                    |m: &DeviceState| &m.can_play,
-                    |m: &mut DeviceState| &mut m.can_play,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "volume",
-                    |m: &DeviceState| &m.volume,
-                    |m: &mut DeviceState| &mut m.volume,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "name",
-                        |m: &DeviceState| &m.name,
-                        |m: &mut DeviceState| &mut m.name,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "error_code",
-                    |m: &DeviceState| &m.error_code,
-                    |m: &mut DeviceState| &mut m.error_code,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "became_active_at",
-                    |m: &DeviceState| &m.became_active_at,
-                    |m: &mut DeviceState| &mut m.became_active_at,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "error_message",
-                        |m: &DeviceState| &m.error_message,
-                        |m: &mut DeviceState| &mut m.error_message,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Capability>,
-                    >(
-                        "capabilities",
-                        |m: &DeviceState| &m.capabilities,
-                        |m: &mut DeviceState| &mut m.capabilities,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "context_player_error",
-                        |m: &DeviceState| &m.context_player_error,
-                        |m: &mut DeviceState| &mut m.context_player_error,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Metadata>,
-                    >(
-                        "metadata",
-                        |m: &DeviceState| &m.metadata,
-                        |m: &mut DeviceState| &mut m.metadata,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<DeviceState>(
-                    "DeviceState",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static DeviceState {
-        static mut instance: ::protobuf::lazy::Lazy<DeviceState> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(DeviceState::new) }
-    }
-}
-
-impl ::protobuf::Clear for DeviceState {
-    fn clear(&mut self) {
-        self.sw_version.clear();
-        self.is_active = ::std::option::Option::None;
-        self.can_play = ::std::option::Option::None;
-        self.volume = ::std::option::Option::None;
-        self.name.clear();
-        self.error_code = ::std::option::Option::None;
-        self.became_active_at = ::std::option::Option::None;
-        self.error_message.clear();
-        self.capabilities.clear();
-        self.context_player_error.clear();
-        self.metadata.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for DeviceState {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for DeviceState {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Capability {
-    // message fields
-    typ: ::std::option::Option<CapabilityType>,
-    intValue: ::std::vec::Vec<i64>,
-    stringValue: ::protobuf::RepeatedField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Capability {
-    fn default() -> &'a Capability {
-        <Capability as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Capability {
-    pub fn new() -> Capability {
-        ::std::default::Default::default()
-    }
-
-    // optional .CapabilityType typ = 1;
-
-    pub fn get_typ(&self) -> CapabilityType {
-        self.typ.unwrap_or(CapabilityType::kSupportedContexts)
-    }
-    pub fn clear_typ(&mut self) {
-        self.typ = ::std::option::Option::None;
-    }
-
-    pub fn has_typ(&self) -> bool {
-        self.typ.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_typ(&mut self, v: CapabilityType) {
-        self.typ = ::std::option::Option::Some(v);
-    }
-
-    // repeated int64 intValue = 2;
-
-    pub fn get_intValue(&self) -> &[i64] {
-        &self.intValue
-    }
-    pub fn clear_intValue(&mut self) {
-        self.intValue.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_intValue(&mut self, v: ::std::vec::Vec<i64>) {
-        self.intValue = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_intValue(&mut self) -> &mut ::std::vec::Vec<i64> {
-        &mut self.intValue
-    }
-
-    // Take field
-    pub fn take_intValue(&mut self) -> ::std::vec::Vec<i64> {
-        ::std::mem::replace(&mut self.intValue, ::std::vec::Vec::new())
-    }
-
-    // repeated string stringValue = 3;
-
-    pub fn get_stringValue(&self) -> &[::std::string::String] {
-        &self.stringValue
-    }
-    pub fn clear_stringValue(&mut self) {
-        self.stringValue.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_stringValue(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
-        self.stringValue = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_stringValue(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
-        &mut self.stringValue
-    }
-
-    // Take field
-    pub fn take_stringValue(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
-        ::std::mem::replace(&mut self.stringValue, ::protobuf::RepeatedField::new())
-    }
-}
-
-impl ::protobuf::Message for Capability {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.typ,
-                    1,
-                    &mut self.unknown_fields,
-                )?,
-                2 => {
-                    ::protobuf::rt::read_repeated_int64_into(wire_type, is, &mut self.intValue)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_repeated_string_into(
-                        wire_type,
-                        is,
-                        &mut self.stringValue,
-                    )?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.typ {
-            my_size += ::protobuf::rt::enum_size(1, v);
-        }
-        for value in &self.intValue {
-            my_size +=
-                ::protobuf::rt::value_size(2, *value, ::protobuf::wire_format::WireTypeVarint);
-        }
-        for value in &self.stringValue {
-            my_size += ::protobuf::rt::string_size(3, &value);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.typ {
-            os.write_enum(1, v.value())?;
-        }
-        for v in &self.intValue {
-            os.write_int64(2, *v)?;
-        }
-        for v in &self.stringValue {
-            os.write_string(3, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Capability {
-        Capability::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<CapabilityType>,
-                >(
-                    "typ",
-                    |m: &Capability| &m.typ,
-                    |m: &mut Capability| &mut m.typ,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt64,
-                >(
-                    "intValue",
-                    |m: &Capability| &m.intValue,
-                    |m: &mut Capability| &mut m.intValue,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "stringValue",
-                        |m: &Capability| &m.stringValue,
-                        |m: &mut Capability| &mut m.stringValue,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Capability>(
-                    "Capability",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Capability {
-        static mut instance: ::protobuf::lazy::Lazy<Capability> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Capability::new) }
-    }
-}
-
-impl ::protobuf::Clear for Capability {
-    fn clear(&mut self) {
-        self.typ = ::std::option::Option::None;
-        self.intValue.clear();
-        self.stringValue.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Capability {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Capability {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Goodbye {
-    // message fields
-    reason: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Goodbye {
-    fn default() -> &'a Goodbye {
-        <Goodbye as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Goodbye {
-    pub fn new() -> Goodbye {
-        ::std::default::Default::default()
-    }
-
-    // optional string reason = 1;
-
-    pub fn get_reason(&self) -> &str {
-        match self.reason.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_reason(&mut self) {
-        self.reason.clear();
-    }
-
-    pub fn has_reason(&self) -> bool {
-        self.reason.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_reason(&mut self, v: ::std::string::String) {
-        self.reason = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_reason(&mut self) -> &mut ::std::string::String {
-        if self.reason.is_none() {
-            self.reason.set_default();
-        }
-        self.reason.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_reason(&mut self) -> ::std::string::String {
-        self.reason
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for Goodbye {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.reason)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.reason.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.reason.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Goodbye {
-        Goodbye::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "reason",
-                        |m: &Goodbye| &m.reason,
-                        |m: &mut Goodbye| &mut m.reason,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Goodbye>(
-                    "Goodbye",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Goodbye {
-        static mut instance: ::protobuf::lazy::Lazy<Goodbye> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Goodbye::new) }
-    }
-}
-
-impl ::protobuf::Clear for Goodbye {
-    fn clear(&mut self) {
-        self.reason.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Goodbye {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Goodbye {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct State {
-    // message fields
-    context_uri: ::protobuf::SingularField<::std::string::String>,
-    index: ::std::option::Option<u32>,
-    position_ms: ::std::option::Option<u32>,
-    status: ::std::option::Option<PlayStatus>,
-    position_measured_at: ::std::option::Option<u64>,
-    context_description: ::protobuf::SingularField<::std::string::String>,
-    shuffle: ::std::option::Option<bool>,
-    repeat: ::std::option::Option<bool>,
-    last_command_ident: ::protobuf::SingularField<::std::string::String>,
-    last_command_msgid: ::std::option::Option<u32>,
-    playing_from_fallback: ::std::option::Option<bool>,
-    row: ::std::option::Option<u32>,
-    playing_track_index: ::std::option::Option<u32>,
-    track: ::protobuf::RepeatedField<TrackRef>,
-    ad: ::protobuf::SingularPtrField<Ad>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a State {
-    fn default() -> &'a State {
-        <State as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl State {
-    pub fn new() -> State {
-        ::std::default::Default::default()
-    }
-
-    // optional string context_uri = 2;
-
-    pub fn get_context_uri(&self) -> &str {
-        match self.context_uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_context_uri(&mut self) {
-        self.context_uri.clear();
-    }
-
-    pub fn has_context_uri(&self) -> bool {
-        self.context_uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_context_uri(&mut self, v: ::std::string::String) {
-        self.context_uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_context_uri(&mut self) -> &mut ::std::string::String {
-        if self.context_uri.is_none() {
-            self.context_uri.set_default();
-        }
-        self.context_uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_context_uri(&mut self) -> ::std::string::String {
-        self.context_uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional uint32 index = 3;
-
-    pub fn get_index(&self) -> u32 {
-        self.index.unwrap_or(0)
-    }
-    pub fn clear_index(&mut self) {
-        self.index = ::std::option::Option::None;
-    }
-
-    pub fn has_index(&self) -> bool {
-        self.index.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_index(&mut self, v: u32) {
-        self.index = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 position_ms = 4;
-
-    pub fn get_position_ms(&self) -> u32 {
-        self.position_ms.unwrap_or(0)
-    }
-    pub fn clear_position_ms(&mut self) {
-        self.position_ms = ::std::option::Option::None;
-    }
-
-    pub fn has_position_ms(&self) -> bool {
-        self.position_ms.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_position_ms(&mut self, v: u32) {
-        self.position_ms = ::std::option::Option::Some(v);
-    }
-
-    // optional .PlayStatus status = 5;
-
-    pub fn get_status(&self) -> PlayStatus {
-        self.status.unwrap_or(PlayStatus::kPlayStatusStop)
-    }
-    pub fn clear_status(&mut self) {
-        self.status = ::std::option::Option::None;
-    }
-
-    pub fn has_status(&self) -> bool {
-        self.status.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_status(&mut self, v: PlayStatus) {
-        self.status = ::std::option::Option::Some(v);
-    }
-
-    // optional uint64 position_measured_at = 7;
-
-    pub fn get_position_measured_at(&self) -> u64 {
-        self.position_measured_at.unwrap_or(0)
-    }
-    pub fn clear_position_measured_at(&mut self) {
-        self.position_measured_at = ::std::option::Option::None;
-    }
-
-    pub fn has_position_measured_at(&self) -> bool {
-        self.position_measured_at.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_position_measured_at(&mut self, v: u64) {
-        self.position_measured_at = ::std::option::Option::Some(v);
-    }
-
-    // optional string context_description = 8;
-
-    pub fn get_context_description(&self) -> &str {
-        match self.context_description.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_context_description(&mut self) {
-        self.context_description.clear();
-    }
-
-    pub fn has_context_description(&self) -> bool {
-        self.context_description.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_context_description(&mut self, v: ::std::string::String) {
-        self.context_description = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_context_description(&mut self) -> &mut ::std::string::String {
-        if self.context_description.is_none() {
-            self.context_description.set_default();
-        }
-        self.context_description.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_context_description(&mut self) -> ::std::string::String {
-        self.context_description
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool shuffle = 13;
-
-    pub fn get_shuffle(&self) -> bool {
-        self.shuffle.unwrap_or(false)
-    }
-    pub fn clear_shuffle(&mut self) {
-        self.shuffle = ::std::option::Option::None;
-    }
-
-    pub fn has_shuffle(&self) -> bool {
-        self.shuffle.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_shuffle(&mut self, v: bool) {
-        self.shuffle = ::std::option::Option::Some(v);
-    }
-
-    // optional bool repeat = 14;
-
-    pub fn get_repeat(&self) -> bool {
-        self.repeat.unwrap_or(false)
-    }
-    pub fn clear_repeat(&mut self) {
-        self.repeat = ::std::option::Option::None;
-    }
-
-    pub fn has_repeat(&self) -> bool {
-        self.repeat.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_repeat(&mut self, v: bool) {
-        self.repeat = ::std::option::Option::Some(v);
-    }
-
-    // optional string last_command_ident = 20;
-
-    pub fn get_last_command_ident(&self) -> &str {
-        match self.last_command_ident.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_last_command_ident(&mut self) {
-        self.last_command_ident.clear();
-    }
-
-    pub fn has_last_command_ident(&self) -> bool {
-        self.last_command_ident.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_last_command_ident(&mut self, v: ::std::string::String) {
-        self.last_command_ident = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_last_command_ident(&mut self) -> &mut ::std::string::String {
-        if self.last_command_ident.is_none() {
-            self.last_command_ident.set_default();
-        }
-        self.last_command_ident.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_last_command_ident(&mut self) -> ::std::string::String {
-        self.last_command_ident
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional uint32 last_command_msgid = 21;
-
-    pub fn get_last_command_msgid(&self) -> u32 {
-        self.last_command_msgid.unwrap_or(0)
-    }
-    pub fn clear_last_command_msgid(&mut self) {
-        self.last_command_msgid = ::std::option::Option::None;
-    }
-
-    pub fn has_last_command_msgid(&self) -> bool {
-        self.last_command_msgid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_last_command_msgid(&mut self, v: u32) {
-        self.last_command_msgid = ::std::option::Option::Some(v);
-    }
-
-    // optional bool playing_from_fallback = 24;
-
-    pub fn get_playing_from_fallback(&self) -> bool {
-        self.playing_from_fallback.unwrap_or(false)
-    }
-    pub fn clear_playing_from_fallback(&mut self) {
-        self.playing_from_fallback = ::std::option::Option::None;
-    }
-
-    pub fn has_playing_from_fallback(&self) -> bool {
-        self.playing_from_fallback.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_playing_from_fallback(&mut self, v: bool) {
-        self.playing_from_fallback = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 row = 25;
-
-    pub fn get_row(&self) -> u32 {
-        self.row.unwrap_or(0)
-    }
-    pub fn clear_row(&mut self) {
-        self.row = ::std::option::Option::None;
-    }
-
-    pub fn has_row(&self) -> bool {
-        self.row.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_row(&mut self, v: u32) {
-        self.row = ::std::option::Option::Some(v);
-    }
-
-    // optional uint32 playing_track_index = 26;
-
-    pub fn get_playing_track_index(&self) -> u32 {
-        self.playing_track_index.unwrap_or(0)
-    }
-    pub fn clear_playing_track_index(&mut self) {
-        self.playing_track_index = ::std::option::Option::None;
-    }
-
-    pub fn has_playing_track_index(&self) -> bool {
-        self.playing_track_index.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_playing_track_index(&mut self, v: u32) {
-        self.playing_track_index = ::std::option::Option::Some(v);
-    }
-
-    // repeated .TrackRef track = 27;
-
-    pub fn get_track(&self) -> &[TrackRef] {
-        &self.track
-    }
-    pub fn clear_track(&mut self) {
-        self.track.clear();
-    }
-
-    // Param is passed by value, moved
-    pub fn set_track(&mut self, v: ::protobuf::RepeatedField<TrackRef>) {
-        self.track = v;
-    }
-
-    // Mutable pointer to the field.
-    pub fn mut_track(&mut self) -> &mut ::protobuf::RepeatedField<TrackRef> {
-        &mut self.track
-    }
-
-    // Take field
-    pub fn take_track(&mut self) -> ::protobuf::RepeatedField<TrackRef> {
-        ::std::mem::replace(&mut self.track, ::protobuf::RepeatedField::new())
-    }
-
-    // optional .Ad ad = 28;
-
-    pub fn get_ad(&self) -> &Ad {
-        self.ad.as_ref().unwrap_or_else(|| Ad::default_instance())
-    }
-    pub fn clear_ad(&mut self) {
-        self.ad.clear();
-    }
-
-    pub fn has_ad(&self) -> bool {
-        self.ad.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ad(&mut self, v: Ad) {
-        self.ad = ::protobuf::SingularPtrField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_ad(&mut self) -> &mut Ad {
-        if self.ad.is_none() {
-            self.ad.set_default();
-        }
-        self.ad.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_ad(&mut self) -> Ad {
-        self.ad.take().unwrap_or_else(|| Ad::new())
-    }
-}
-
-impl ::protobuf::Message for State {
-    fn is_initialized(&self) -> bool {
-        for v in &self.track {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        for v in &self.ad {
-            if !v.is_initialized() {
-                return false;
-            }
-        }
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.context_uri,
-                    )?;
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.index = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.position_ms = ::std::option::Option::Some(tmp);
-                }
-                5 => ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(
-                    wire_type,
-                    is,
-                    &mut self.status,
-                    5,
-                    &mut self.unknown_fields,
-                )?,
-                7 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint64()?;
-                    self.position_measured_at = ::std::option::Option::Some(tmp);
-                }
-                8 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.context_description,
-                    )?;
-                }
-                13 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.shuffle = ::std::option::Option::Some(tmp);
-                }
-                14 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.repeat = ::std::option::Option::Some(tmp);
-                }
-                20 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.last_command_ident,
-                    )?;
-                }
-                21 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.last_command_msgid = ::std::option::Option::Some(tmp);
-                }
-                24 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.playing_from_fallback = ::std::option::Option::Some(tmp);
-                }
-                25 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.row = ::std::option::Option::Some(tmp);
-                }
-                26 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_uint32()?;
-                    self.playing_track_index = ::std::option::Option::Some(tmp);
-                }
-                27 => {
-                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.track)?;
-                }
-                28 => {
-                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.ad)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.context_uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(v) = self.index {
-            my_size += ::protobuf::rt::value_size(3, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.position_ms {
-            my_size += ::protobuf::rt::value_size(4, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.status {
-            my_size += ::protobuf::rt::enum_size(5, v);
-        }
-        if let Some(v) = self.position_measured_at {
-            my_size += ::protobuf::rt::value_size(7, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.context_description.as_ref() {
-            my_size += ::protobuf::rt::string_size(8, &v);
-        }
-        if let Some(v) = self.shuffle {
-            my_size += 2;
-        }
-        if let Some(v) = self.repeat {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.last_command_ident.as_ref() {
-            my_size += ::protobuf::rt::string_size(20, &v);
-        }
-        if let Some(v) = self.last_command_msgid {
-            my_size += ::protobuf::rt::value_size(21, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.playing_from_fallback {
-            my_size += 3;
-        }
-        if let Some(v) = self.row {
-            my_size += ::protobuf::rt::value_size(25, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(v) = self.playing_track_index {
-            my_size += ::protobuf::rt::value_size(26, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        for value in &self.track {
-            let len = value.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        if let Some(ref v) = self.ad.as_ref() {
-            let len = v.compute_size();
-            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.context_uri.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(v) = self.index {
-            os.write_uint32(3, v)?;
-        }
-        if let Some(v) = self.position_ms {
-            os.write_uint32(4, v)?;
-        }
-        if let Some(v) = self.status {
-            os.write_enum(5, v.value())?;
-        }
-        if let Some(v) = self.position_measured_at {
-            os.write_uint64(7, v)?;
-        }
-        if let Some(ref v) = self.context_description.as_ref() {
-            os.write_string(8, &v)?;
-        }
-        if let Some(v) = self.shuffle {
-            os.write_bool(13, v)?;
-        }
-        if let Some(v) = self.repeat {
-            os.write_bool(14, v)?;
-        }
-        if let Some(ref v) = self.last_command_ident.as_ref() {
-            os.write_string(20, &v)?;
-        }
-        if let Some(v) = self.last_command_msgid {
-            os.write_uint32(21, v)?;
-        }
-        if let Some(v) = self.playing_from_fallback {
-            os.write_bool(24, v)?;
-        }
-        if let Some(v) = self.row {
-            os.write_uint32(25, v)?;
-        }
-        if let Some(v) = self.playing_track_index {
-            os.write_uint32(26, v)?;
-        }
-        for v in &self.track {
-            os.write_tag(27, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        if let Some(ref v) = self.ad.as_ref() {
-            os.write_tag(28, ::protobuf::wire_format::WireTypeLengthDelimited)?;
-            os.write_raw_varint32(v.get_cached_size())?;
-            v.write_to_with_cached_sizes(os)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> State {
-        State::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "context_uri",
-                        |m: &State| &m.context_uri,
-                        |m: &mut State| &mut m.context_uri,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "index",
-                    |m: &State| &m.index,
-                    |m: &mut State| &mut m.index,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "position_ms",
-                    |m: &State| &m.position_ms,
-                    |m: &mut State| &mut m.position_ms,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeEnum<PlayStatus>,
-                >(
-                    "status",
-                    |m: &State| &m.status,
-                    |m: &mut State| &mut m.status,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint64,
-                >(
-                    "position_measured_at",
-                    |m: &State| &m.position_measured_at,
-                    |m: &mut State| &mut m.position_measured_at,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "context_description",
-                        |m: &State| &m.context_description,
-                        |m: &mut State| &mut m.context_description,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "shuffle",
-                    |m: &State| &m.shuffle,
-                    |m: &mut State| &mut m.shuffle,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "repeat",
-                    |m: &State| &m.repeat,
-                    |m: &mut State| &mut m.repeat,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "last_command_ident",
-                        |m: &State| &m.last_command_ident,
-                        |m: &mut State| &mut m.last_command_ident,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "last_command_msgid",
-                    |m: &State| &m.last_command_msgid,
-                    |m: &mut State| &mut m.last_command_msgid,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "playing_from_fallback",
-                    |m: &State| &m.playing_from_fallback,
-                    |m: &mut State| &mut m.playing_from_fallback,
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "row", |m: &State| &m.row, |m: &mut State| &mut m.row
-                ));
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeUint32,
-                >(
-                    "playing_track_index",
-                    |m: &State| &m.playing_track_index,
-                    |m: &mut State| &mut m.playing_track_index,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_repeated_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<TrackRef>,
-                    >(
-                        "track", |m: &State| &m.track, |m: &mut State| &mut m.track
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeMessage<Ad>,
-                    >("ad", |m: &State| &m.ad, |m: &mut State| &mut m.ad),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<State>(
-                    "State",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static State {
-        static mut instance: ::protobuf::lazy::Lazy<State> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(State::new) }
-    }
-}
-
-impl ::protobuf::Clear for State {
-    fn clear(&mut self) {
-        self.context_uri.clear();
-        self.index = ::std::option::Option::None;
-        self.position_ms = ::std::option::Option::None;
-        self.status = ::std::option::Option::None;
-        self.position_measured_at = ::std::option::Option::None;
-        self.context_description.clear();
-        self.shuffle = ::std::option::Option::None;
-        self.repeat = ::std::option::Option::None;
-        self.last_command_ident.clear();
-        self.last_command_msgid = ::std::option::Option::None;
-        self.playing_from_fallback = ::std::option::Option::None;
-        self.row = ::std::option::Option::None;
-        self.playing_track_index = ::std::option::Option::None;
-        self.track.clear();
-        self.ad.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for State {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for State {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct TrackRef {
-    // message fields
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    uri: ::protobuf::SingularField<::std::string::String>,
-    queued: ::std::option::Option<bool>,
-    context: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a TrackRef {
-    fn default() -> &'a TrackRef {
-        <TrackRef as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl TrackRef {
-    pub fn new() -> TrackRef {
-        ::std::default::Default::default()
-    }
-
-    // optional bytes gid = 1;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional string uri = 2;
-
-    pub fn get_uri(&self) -> &str {
-        match self.uri.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_uri(&mut self) {
-        self.uri.clear();
-    }
-
-    pub fn has_uri(&self) -> bool {
-        self.uri.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_uri(&mut self, v: ::std::string::String) {
-        self.uri = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
-        if self.uri.is_none() {
-            self.uri.set_default();
-        }
-        self.uri.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_uri(&mut self) -> ::std::string::String {
-        self.uri
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bool queued = 3;
-
-    pub fn get_queued(&self) -> bool {
-        self.queued.unwrap_or(false)
-    }
-    pub fn clear_queued(&mut self) {
-        self.queued = ::std::option::Option::None;
-    }
-
-    pub fn has_queued(&self) -> bool {
-        self.queued.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_queued(&mut self, v: bool) {
-        self.queued = ::std::option::Option::Some(v);
-    }
-
-    // optional string context = 4;
-
-    pub fn get_context(&self) -> &str {
-        match self.context.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_context(&mut self) {
-        self.context.clear();
-    }
-
-    pub fn has_context(&self) -> bool {
-        self.context.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_context(&mut self, v: ::std::string::String) {
-        self.context = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_context(&mut self) -> &mut ::std::string::String {
-        if self.context.is_none() {
-            self.context.set_default();
-        }
-        self.context.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_context(&mut self) -> ::std::string::String {
-        self.context
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for TrackRef {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.uri)?;
-                }
-                3 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_bool()?;
-                    self.queued = ::std::option::Option::Some(tmp);
-                }
-                4 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.context)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(1, &v);
-        }
-        if let Some(ref v) = self.uri.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        if let Some(v) = self.queued {
-            my_size += 2;
-        }
-        if let Some(ref v) = self.context.as_ref() {
-            my_size += ::protobuf::rt::string_size(4, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(1, &v)?;
-        }
-        if let Some(ref v) = self.uri.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        if let Some(v) = self.queued {
-            os.write_bool(3, v)?;
-        }
-        if let Some(ref v) = self.context.as_ref() {
-            os.write_string(4, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> TrackRef {
-        TrackRef::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "gid", |m: &TrackRef| &m.gid, |m: &mut TrackRef| &mut m.gid
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "uri", |m: &TrackRef| &m.uri, |m: &mut TrackRef| &mut m.uri
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeBool,
-                >(
-                    "queued",
-                    |m: &TrackRef| &m.queued,
-                    |m: &mut TrackRef| &mut m.queued,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "context",
-                        |m: &TrackRef| &m.context,
-                        |m: &mut TrackRef| &mut m.context,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<TrackRef>(
-                    "TrackRef",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static TrackRef {
-        static mut instance: ::protobuf::lazy::Lazy<TrackRef> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(TrackRef::new) }
-    }
-}
-
-impl ::protobuf::Clear for TrackRef {
-    fn clear(&mut self) {
-        self.gid.clear();
-        self.uri.clear();
-        self.queued = ::std::option::Option::None;
-        self.context.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for TrackRef {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for TrackRef {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Ad {
-    // message fields
-    next: ::std::option::Option<i32>,
-    ogg_fid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    image_fid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    duration: ::std::option::Option<i32>,
-    click_url: ::protobuf::SingularField<::std::string::String>,
-    impression_url: ::protobuf::SingularField<::std::string::String>,
-    product: ::protobuf::SingularField<::std::string::String>,
-    advertiser: ::protobuf::SingularField<::std::string::String>,
-    gid: ::protobuf::SingularField<::std::vec::Vec<u8>>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Ad {
-    fn default() -> &'a Ad {
-        <Ad as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Ad {
-    pub fn new() -> Ad {
-        ::std::default::Default::default()
-    }
-
-    // optional int32 next = 1;
-
-    pub fn get_next(&self) -> i32 {
-        self.next.unwrap_or(0)
-    }
-    pub fn clear_next(&mut self) {
-        self.next = ::std::option::Option::None;
-    }
-
-    pub fn has_next(&self) -> bool {
-        self.next.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_next(&mut self, v: i32) {
-        self.next = ::std::option::Option::Some(v);
-    }
-
-    // optional bytes ogg_fid = 2;
-
-    pub fn get_ogg_fid(&self) -> &[u8] {
-        match self.ogg_fid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_ogg_fid(&mut self) {
-        self.ogg_fid.clear();
-    }
-
-    pub fn has_ogg_fid(&self) -> bool {
-        self.ogg_fid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_ogg_fid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.ogg_fid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_ogg_fid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.ogg_fid.is_none() {
-            self.ogg_fid.set_default();
-        }
-        self.ogg_fid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_ogg_fid(&mut self) -> ::std::vec::Vec<u8> {
-        self.ogg_fid
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional bytes image_fid = 3;
-
-    pub fn get_image_fid(&self) -> &[u8] {
-        match self.image_fid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_image_fid(&mut self) {
-        self.image_fid.clear();
-    }
-
-    pub fn has_image_fid(&self) -> bool {
-        self.image_fid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_image_fid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.image_fid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_image_fid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.image_fid.is_none() {
-            self.image_fid.set_default();
-        }
-        self.image_fid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_image_fid(&mut self) -> ::std::vec::Vec<u8> {
-        self.image_fid
-            .take()
-            .unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-
-    // optional int32 duration = 4;
-
-    pub fn get_duration(&self) -> i32 {
-        self.duration.unwrap_or(0)
-    }
-    pub fn clear_duration(&mut self) {
-        self.duration = ::std::option::Option::None;
-    }
-
-    pub fn has_duration(&self) -> bool {
-        self.duration.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_duration(&mut self, v: i32) {
-        self.duration = ::std::option::Option::Some(v);
-    }
-
-    // optional string click_url = 5;
-
-    pub fn get_click_url(&self) -> &str {
-        match self.click_url.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_click_url(&mut self) {
-        self.click_url.clear();
-    }
-
-    pub fn has_click_url(&self) -> bool {
-        self.click_url.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_click_url(&mut self, v: ::std::string::String) {
-        self.click_url = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_click_url(&mut self) -> &mut ::std::string::String {
-        if self.click_url.is_none() {
-            self.click_url.set_default();
-        }
-        self.click_url.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_click_url(&mut self) -> ::std::string::String {
-        self.click_url
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string impression_url = 6;
-
-    pub fn get_impression_url(&self) -> &str {
-        match self.impression_url.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_impression_url(&mut self) {
-        self.impression_url.clear();
-    }
-
-    pub fn has_impression_url(&self) -> bool {
-        self.impression_url.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_impression_url(&mut self, v: ::std::string::String) {
-        self.impression_url = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_impression_url(&mut self) -> &mut ::std::string::String {
-        if self.impression_url.is_none() {
-            self.impression_url.set_default();
-        }
-        self.impression_url.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_impression_url(&mut self) -> ::std::string::String {
-        self.impression_url
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string product = 7;
-
-    pub fn get_product(&self) -> &str {
-        match self.product.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_product(&mut self) {
-        self.product.clear();
-    }
-
-    pub fn has_product(&self) -> bool {
-        self.product.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_product(&mut self, v: ::std::string::String) {
-        self.product = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_product(&mut self) -> &mut ::std::string::String {
-        if self.product.is_none() {
-            self.product.set_default();
-        }
-        self.product.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_product(&mut self) -> ::std::string::String {
-        self.product
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string advertiser = 8;
-
-    pub fn get_advertiser(&self) -> &str {
-        match self.advertiser.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_advertiser(&mut self) {
-        self.advertiser.clear();
-    }
-
-    pub fn has_advertiser(&self) -> bool {
-        self.advertiser.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_advertiser(&mut self, v: ::std::string::String) {
-        self.advertiser = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_advertiser(&mut self) -> &mut ::std::string::String {
-        if self.advertiser.is_none() {
-            self.advertiser.set_default();
-        }
-        self.advertiser.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_advertiser(&mut self) -> ::std::string::String {
-        self.advertiser
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional bytes gid = 9;
-
-    pub fn get_gid(&self) -> &[u8] {
-        match self.gid.as_ref() {
-            Some(v) => &v,
-            None => &[],
-        }
-    }
-    pub fn clear_gid(&mut self) {
-        self.gid.clear();
-    }
-
-    pub fn has_gid(&self) -> bool {
-        self.gid.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_gid(&mut self, v: ::std::vec::Vec<u8>) {
-        self.gid = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_gid(&mut self) -> &mut ::std::vec::Vec<u8> {
-        if self.gid.is_none() {
-            self.gid.set_default();
-        }
-        self.gid.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_gid(&mut self) -> ::std::vec::Vec<u8> {
-        self.gid.take().unwrap_or_else(|| ::std::vec::Vec::new())
-    }
-}
-
-impl ::protobuf::Message for Ad {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.next = ::std::option::Option::Some(tmp);
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.ogg_fid)?;
-                }
-                3 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.image_fid)?;
-                }
-                4 => {
-                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
-                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
-                            wire_type,
-                        ));
-                    }
-                    let tmp = is.read_int32()?;
-                    self.duration = ::std::option::Option::Some(tmp);
-                }
-                5 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.click_url)?;
-                }
-                6 => {
-                    ::protobuf::rt::read_singular_string_into(
-                        wire_type,
-                        is,
-                        &mut self.impression_url,
-                    )?;
-                }
-                7 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.product)?;
-                }
-                8 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.advertiser)?;
-                }
-                9 => {
-                    ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.gid)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(v) = self.next {
-            my_size += ::protobuf::rt::value_size(1, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.ogg_fid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(2, &v);
-        }
-        if let Some(ref v) = self.image_fid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(3, &v);
-        }
-        if let Some(v) = self.duration {
-            my_size += ::protobuf::rt::value_size(4, v, ::protobuf::wire_format::WireTypeVarint);
-        }
-        if let Some(ref v) = self.click_url.as_ref() {
-            my_size += ::protobuf::rt::string_size(5, &v);
-        }
-        if let Some(ref v) = self.impression_url.as_ref() {
-            my_size += ::protobuf::rt::string_size(6, &v);
-        }
-        if let Some(ref v) = self.product.as_ref() {
-            my_size += ::protobuf::rt::string_size(7, &v);
-        }
-        if let Some(ref v) = self.advertiser.as_ref() {
-            my_size += ::protobuf::rt::string_size(8, &v);
-        }
-        if let Some(ref v) = self.gid.as_ref() {
-            my_size += ::protobuf::rt::bytes_size(9, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(v) = self.next {
-            os.write_int32(1, v)?;
-        }
-        if let Some(ref v) = self.ogg_fid.as_ref() {
-            os.write_bytes(2, &v)?;
-        }
-        if let Some(ref v) = self.image_fid.as_ref() {
-            os.write_bytes(3, &v)?;
-        }
-        if let Some(v) = self.duration {
-            os.write_int32(4, v)?;
-        }
-        if let Some(ref v) = self.click_url.as_ref() {
-            os.write_string(5, &v)?;
-        }
-        if let Some(ref v) = self.impression_url.as_ref() {
-            os.write_string(6, &v)?;
-        }
-        if let Some(ref v) = self.product.as_ref() {
-            os.write_string(7, &v)?;
-        }
-        if let Some(ref v) = self.advertiser.as_ref() {
-            os.write_string(8, &v)?;
-        }
-        if let Some(ref v) = self.gid.as_ref() {
-            os.write_bytes(9, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Ad {
-        Ad::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "next", |m: &Ad| &m.next, |m: &mut Ad| &mut m.next
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "ogg_fid", |m: &Ad| &m.ogg_fid, |m: &mut Ad| &mut m.ogg_fid
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >(
-                        "image_fid",
-                        |m: &Ad| &m.image_fid,
-                        |m: &mut Ad| &mut m.image_fid,
-                    ),
-                );
-                fields.push(::protobuf::reflect::accessor::make_option_accessor::<
-                    _,
-                    ::protobuf::types::ProtobufTypeInt32,
-                >(
-                    "duration",
-                    |m: &Ad| &m.duration,
-                    |m: &mut Ad| &mut m.duration,
-                ));
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "click_url",
-                        |m: &Ad| &m.click_url,
-                        |m: &mut Ad| &mut m.click_url,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "impression_url",
-                        |m: &Ad| &m.impression_url,
-                        |m: &mut Ad| &mut m.impression_url,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "product", |m: &Ad| &m.product, |m: &mut Ad| &mut m.product
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "advertiser",
-                        |m: &Ad| &m.advertiser,
-                        |m: &mut Ad| &mut m.advertiser,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeBytes,
-                    >("gid", |m: &Ad| &m.gid, |m: &mut Ad| &mut m.gid),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Ad>(
-                    "Ad",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Ad {
-        static mut instance: ::protobuf::lazy::Lazy<Ad> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Ad::new) }
-    }
-}
-
-impl ::protobuf::Clear for Ad {
-    fn clear(&mut self) {
-        self.next = ::std::option::Option::None;
-        self.ogg_fid.clear();
-        self.image_fid.clear();
-        self.duration = ::std::option::Option::None;
-        self.click_url.clear();
-        self.impression_url.clear();
-        self.product.clear();
-        self.advertiser.clear();
-        self.gid.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Ad {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Ad {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(PartialEq, Clone, Default)]
-pub struct Metadata {
-    // message fields
-    field_type: ::protobuf::SingularField<::std::string::String>,
-    metadata: ::protobuf::SingularField<::std::string::String>,
-    // special fields
-    pub unknown_fields: ::protobuf::UnknownFields,
-    pub cached_size: ::protobuf::CachedSize,
-}
-
-impl<'a> ::std::default::Default for &'a Metadata {
-    fn default() -> &'a Metadata {
-        <Metadata as ::protobuf::Message>::default_instance()
-    }
-}
-
-impl Metadata {
-    pub fn new() -> Metadata {
-        ::std::default::Default::default()
-    }
-
-    // optional string type = 1;
-
-    pub fn get_field_type(&self) -> &str {
-        match self.field_type.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_field_type(&mut self) {
-        self.field_type.clear();
-    }
-
-    pub fn has_field_type(&self) -> bool {
-        self.field_type.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_field_type(&mut self, v: ::std::string::String) {
-        self.field_type = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_field_type(&mut self) -> &mut ::std::string::String {
-        if self.field_type.is_none() {
-            self.field_type.set_default();
-        }
-        self.field_type.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_field_type(&mut self) -> ::std::string::String {
-        self.field_type
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-
-    // optional string metadata = 2;
-
-    pub fn get_metadata(&self) -> &str {
-        match self.metadata.as_ref() {
-            Some(v) => &v,
-            None => "",
-        }
-    }
-    pub fn clear_metadata(&mut self) {
-        self.metadata.clear();
-    }
-
-    pub fn has_metadata(&self) -> bool {
-        self.metadata.is_some()
-    }
-
-    // Param is passed by value, moved
-    pub fn set_metadata(&mut self, v: ::std::string::String) {
-        self.metadata = ::protobuf::SingularField::some(v);
-    }
-
-    // Mutable pointer to the field.
-    // If field is not initialized, it is initialized with default value first.
-    pub fn mut_metadata(&mut self) -> &mut ::std::string::String {
-        if self.metadata.is_none() {
-            self.metadata.set_default();
-        }
-        self.metadata.as_mut().unwrap()
-    }
-
-    // Take field
-    pub fn take_metadata(&mut self) -> ::std::string::String {
-        self.metadata
-            .take()
-            .unwrap_or_else(|| ::std::string::String::new())
-    }
-}
-
-impl ::protobuf::Message for Metadata {
-    fn is_initialized(&self) -> bool {
-        true
-    }
-
-    fn merge_from(
-        &mut self,
-        is: &mut ::protobuf::CodedInputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        while !is.eof()? {
-            let (field_number, wire_type) = is.read_tag_unpack()?;
-            match field_number {
-                1 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.field_type)?;
-                }
-                2 => {
-                    ::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.metadata)?;
-                }
-                _ => {
-                    ::protobuf::rt::read_unknown_or_skip_group(
-                        field_number,
-                        wire_type,
-                        is,
-                        self.mut_unknown_fields(),
-                    )?;
-                }
-            };
-        }
-        ::std::result::Result::Ok(())
-    }
-
-    // Compute sizes of nested messages
-    #[allow(unused_variables)]
-    fn compute_size(&self) -> u32 {
-        let mut my_size = 0;
-        if let Some(ref v) = self.field_type.as_ref() {
-            my_size += ::protobuf::rt::string_size(1, &v);
-        }
-        if let Some(ref v) = self.metadata.as_ref() {
-            my_size += ::protobuf::rt::string_size(2, &v);
-        }
-        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
-        self.cached_size.set(my_size);
-        my_size
-    }
-
-    fn write_to_with_cached_sizes(
-        &self,
-        os: &mut ::protobuf::CodedOutputStream<'_>,
-    ) -> ::protobuf::ProtobufResult<()> {
-        if let Some(ref v) = self.field_type.as_ref() {
-            os.write_string(1, &v)?;
-        }
-        if let Some(ref v) = self.metadata.as_ref() {
-            os.write_string(2, &v)?;
-        }
-        os.write_unknown_fields(self.get_unknown_fields())?;
-        ::std::result::Result::Ok(())
-    }
-
-    fn get_cached_size(&self) -> u32 {
-        self.cached_size.get()
-    }
-
-    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
-        &self.unknown_fields
-    }
-
-    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
-        &mut self.unknown_fields
-    }
-
-    fn as_any(&self) -> &dyn (::std::any::Any) {
-        self as &dyn (::std::any::Any)
-    }
-    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
-        self as &mut dyn (::std::any::Any)
-    }
-    fn into_any(self: Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
-        self
-    }
-
-    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
-        Self::descriptor_static()
-    }
-
-    fn new() -> Metadata {
-        Metadata::new()
-    }
-
-    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                let mut fields = ::std::vec::Vec::new();
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "type",
-                        |m: &Metadata| &m.field_type,
-                        |m: &mut Metadata| &mut m.field_type,
-                    ),
-                );
-                fields.push(
-                    ::protobuf::reflect::accessor::make_singular_field_accessor::<
-                        _,
-                        ::protobuf::types::ProtobufTypeString,
-                    >(
-                        "metadata",
-                        |m: &Metadata| &m.metadata,
-                        |m: &mut Metadata| &mut m.metadata,
-                    ),
-                );
-                ::protobuf::reflect::MessageDescriptor::new_pb_name::<Metadata>(
-                    "Metadata",
-                    fields,
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-
-    fn default_instance() -> &'static Metadata {
-        static mut instance: ::protobuf::lazy::Lazy<Metadata> = ::protobuf::lazy::Lazy::INIT;
-        unsafe { instance.get(Metadata::new) }
-    }
-}
-
-impl ::protobuf::Clear for Metadata {
-    fn clear(&mut self) {
-        self.field_type.clear();
-        self.metadata.clear();
-        self.unknown_fields.clear();
-    }
-}
-
-impl ::std::fmt::Debug for Metadata {
-    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
-        ::protobuf::text_format::fmt(self, f)
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for Metadata {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Message(self)
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum MessageType {
-    kMessageTypeHello = 1,
-    kMessageTypeGoodbye = 2,
-    kMessageTypeProbe = 3,
-    kMessageTypeNotify = 10,
-    kMessageTypeLoad = 20,
-    kMessageTypePlay = 21,
-    kMessageTypePause = 22,
-    kMessageTypePlayPause = 23,
-    kMessageTypeSeek = 24,
-    kMessageTypePrev = 25,
-    kMessageTypeNext = 26,
-    kMessageTypeVolume = 27,
-    kMessageTypeShuffle = 28,
-    kMessageTypeRepeat = 29,
-    kMessageTypeVolumeDown = 31,
-    kMessageTypeVolumeUp = 32,
-    kMessageTypeReplace = 33,
-    kMessageTypeLogout = 34,
-    kMessageTypeAction = 35,
-    kMessageTypeRename = 36,
-    kMessageTypeUpdateMetadata = 128,
-}
-
-impl ::protobuf::ProtobufEnum for MessageType {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<MessageType> {
-        match value {
-            1 => ::std::option::Option::Some(MessageType::kMessageTypeHello),
-            2 => ::std::option::Option::Some(MessageType::kMessageTypeGoodbye),
-            3 => ::std::option::Option::Some(MessageType::kMessageTypeProbe),
-            10 => ::std::option::Option::Some(MessageType::kMessageTypeNotify),
-            20 => ::std::option::Option::Some(MessageType::kMessageTypeLoad),
-            21 => ::std::option::Option::Some(MessageType::kMessageTypePlay),
-            22 => ::std::option::Option::Some(MessageType::kMessageTypePause),
-            23 => ::std::option::Option::Some(MessageType::kMessageTypePlayPause),
-            24 => ::std::option::Option::Some(MessageType::kMessageTypeSeek),
-            25 => ::std::option::Option::Some(MessageType::kMessageTypePrev),
-            26 => ::std::option::Option::Some(MessageType::kMessageTypeNext),
-            27 => ::std::option::Option::Some(MessageType::kMessageTypeVolume),
-            28 => ::std::option::Option::Some(MessageType::kMessageTypeShuffle),
-            29 => ::std::option::Option::Some(MessageType::kMessageTypeRepeat),
-            31 => ::std::option::Option::Some(MessageType::kMessageTypeVolumeDown),
-            32 => ::std::option::Option::Some(MessageType::kMessageTypeVolumeUp),
-            33 => ::std::option::Option::Some(MessageType::kMessageTypeReplace),
-            34 => ::std::option::Option::Some(MessageType::kMessageTypeLogout),
-            35 => ::std::option::Option::Some(MessageType::kMessageTypeAction),
-            36 => ::std::option::Option::Some(MessageType::kMessageTypeRename),
-            128 => ::std::option::Option::Some(MessageType::kMessageTypeUpdateMetadata),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [MessageType] = &[
-            MessageType::kMessageTypeHello,
-            MessageType::kMessageTypeGoodbye,
-            MessageType::kMessageTypeProbe,
-            MessageType::kMessageTypeNotify,
-            MessageType::kMessageTypeLoad,
-            MessageType::kMessageTypePlay,
-            MessageType::kMessageTypePause,
-            MessageType::kMessageTypePlayPause,
-            MessageType::kMessageTypeSeek,
-            MessageType::kMessageTypePrev,
-            MessageType::kMessageTypeNext,
-            MessageType::kMessageTypeVolume,
-            MessageType::kMessageTypeShuffle,
-            MessageType::kMessageTypeRepeat,
-            MessageType::kMessageTypeVolumeDown,
-            MessageType::kMessageTypeVolumeUp,
-            MessageType::kMessageTypeReplace,
-            MessageType::kMessageTypeLogout,
-            MessageType::kMessageTypeAction,
-            MessageType::kMessageTypeRename,
-            MessageType::kMessageTypeUpdateMetadata,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<MessageType>(
-                    "MessageType",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for MessageType {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for MessageType {
-    fn default() -> Self {
-        MessageType::kMessageTypeHello
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for MessageType {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum CapabilityType {
-    kSupportedContexts = 1,
-    kCanBePlayer = 2,
-    kRestrictToLocal = 3,
-    kDeviceType = 4,
-    kGaiaEqConnectId = 5,
-    kSupportsLogout = 6,
-    kIsObservable = 7,
-    kVolumeSteps = 8,
-    kSupportedTypes = 9,
-    kCommandAcks = 10,
-    kSupportsRename = 11,
-    kHidden = 12,
-    kSupportsPlaylistV2 = 13,
-    kSupportsExternalEpisodes = 14,
-}
-
-impl ::protobuf::ProtobufEnum for CapabilityType {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<CapabilityType> {
-        match value {
-            1 => ::std::option::Option::Some(CapabilityType::kSupportedContexts),
-            2 => ::std::option::Option::Some(CapabilityType::kCanBePlayer),
-            3 => ::std::option::Option::Some(CapabilityType::kRestrictToLocal),
-            4 => ::std::option::Option::Some(CapabilityType::kDeviceType),
-            5 => ::std::option::Option::Some(CapabilityType::kGaiaEqConnectId),
-            6 => ::std::option::Option::Some(CapabilityType::kSupportsLogout),
-            7 => ::std::option::Option::Some(CapabilityType::kIsObservable),
-            8 => ::std::option::Option::Some(CapabilityType::kVolumeSteps),
-            9 => ::std::option::Option::Some(CapabilityType::kSupportedTypes),
-            10 => ::std::option::Option::Some(CapabilityType::kCommandAcks),
-            11 => ::std::option::Option::Some(CapabilityType::kSupportsRename),
-            12 => ::std::option::Option::Some(CapabilityType::kHidden),
-            13 => ::std::option::Option::Some(CapabilityType::kSupportsPlaylistV2),
-            14 => ::std::option::Option::Some(CapabilityType::kSupportsExternalEpisodes),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [CapabilityType] = &[
-            CapabilityType::kSupportedContexts,
-            CapabilityType::kCanBePlayer,
-            CapabilityType::kRestrictToLocal,
-            CapabilityType::kDeviceType,
-            CapabilityType::kGaiaEqConnectId,
-            CapabilityType::kSupportsLogout,
-            CapabilityType::kIsObservable,
-            CapabilityType::kVolumeSteps,
-            CapabilityType::kSupportedTypes,
-            CapabilityType::kCommandAcks,
-            CapabilityType::kSupportsRename,
-            CapabilityType::kHidden,
-            CapabilityType::kSupportsPlaylistV2,
-            CapabilityType::kSupportsExternalEpisodes,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<CapabilityType>(
-                    "CapabilityType",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for CapabilityType {}
-
-// Note, `Default` is implemented although default value is not 0
-impl ::std::default::Default for CapabilityType {
-    fn default() -> Self {
-        CapabilityType::kSupportedContexts
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for CapabilityType {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-#[derive(Clone, PartialEq, Eq, Debug, Hash)]
-pub enum PlayStatus {
-    kPlayStatusStop = 0,
-    kPlayStatusPlay = 1,
-    kPlayStatusPause = 2,
-    kPlayStatusLoading = 3,
-}
-
-impl ::protobuf::ProtobufEnum for PlayStatus {
-    fn value(&self) -> i32 {
-        *self as i32
-    }
-
-    fn from_i32(value: i32) -> ::std::option::Option<PlayStatus> {
-        match value {
-            0 => ::std::option::Option::Some(PlayStatus::kPlayStatusStop),
-            1 => ::std::option::Option::Some(PlayStatus::kPlayStatusPlay),
-            2 => ::std::option::Option::Some(PlayStatus::kPlayStatusPause),
-            3 => ::std::option::Option::Some(PlayStatus::kPlayStatusLoading),
-            _ => ::std::option::Option::None,
-        }
-    }
-
-    fn values() -> &'static [Self] {
-        static values: &'static [PlayStatus] = &[
-            PlayStatus::kPlayStatusStop,
-            PlayStatus::kPlayStatusPlay,
-            PlayStatus::kPlayStatusPause,
-            PlayStatus::kPlayStatusLoading,
-        ];
-        values
-    }
-
-    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
-        static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> =
-            ::protobuf::lazy::Lazy::INIT;
-        unsafe {
-            descriptor.get(|| {
-                ::protobuf::reflect::EnumDescriptor::new_pb_name::<PlayStatus>(
-                    "PlayStatus",
-                    file_descriptor_proto(),
-                )
-            })
-        }
-    }
-}
-
-impl ::std::marker::Copy for PlayStatus {}
-
-impl ::std::default::Default for PlayStatus {
-    fn default() -> Self {
-        PlayStatus::kPlayStatusStop
-    }
-}
-
-impl ::protobuf::reflect::ProtobufValue for PlayStatus {
-    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
-        ::protobuf::reflect::ReflectValueRef::Enum(self.descriptor())
-    }
-}
-
-static file_descriptor_proto_data: &'static [u8] = b"\
-    \n\x0bspirc.proto\x12\0\"\xfd\x02\n\x05Frame\x12\x11\n\x07version\x18\
-    \x01\x20\x01(\rB\0\x12\x0f\n\x05ident\x18\x02\x20\x01(\tB\0\x12\x1a\n\
-    \x10protocol_version\x18\x03\x20\x01(\tB\0\x12\x10\n\x06seq_nr\x18\x04\
-    \x20\x01(\rB\0\x12\x1b\n\x03typ\x18\x05\x20\x01(\x0e2\x0c.MessageTypeB\0\
-    \x12$\n\x0cdevice_state\x18\x07\x20\x01(\x0b2\x0c.DeviceStateB\0\x12\x1b\
-    \n\x07goodbye\x18\x0b\x20\x01(\x0b2\x08.GoodbyeB\0\x12\x17\n\x05state\
-    \x18\x0c\x20\x01(\x0b2\x06.StateB\0\x12\x12\n\x08position\x18\r\x20\x01(\
-    \rB\0\x12\x10\n\x06volume\x18\x0e\x20\x01(\rB\0\x12\x19\n\x0fstate_updat\
-    e_id\x18\x11\x20\x01(\x03B\0\x12\x13\n\trecipient\x18\x12\x20\x03(\tB\0\
-    \x12\x1e\n\x14context_player_state\x18\x13\x20\x01(\x0cB\0\x12\x12\n\x08\
-    new_name\x18\x14\x20\x01(\tB\0\x12\x1d\n\x08metadata\x18\x19\x20\x01(\
-    \x0b2\t.MetadataB\0:\0\"\x9f\x02\n\x0bDeviceState\x12\x14\n\nsw_version\
-    \x18\x01\x20\x01(\tB\0\x12\x13\n\tis_active\x18\n\x20\x01(\x08B\0\x12\
-    \x12\n\x08can_play\x18\x0b\x20\x01(\x08B\0\x12\x10\n\x06volume\x18\x0c\
-    \x20\x01(\rB\0\x12\x0e\n\x04name\x18\r\x20\x01(\tB\0\x12\x14\n\nerror_co\
-    de\x18\x0e\x20\x01(\rB\0\x12\x1a\n\x10became_active_at\x18\x0f\x20\x01(\
-    \x03B\0\x12\x17\n\rerror_message\x18\x10\x20\x01(\tB\0\x12#\n\x0ccapabil\
-    ities\x18\x11\x20\x03(\x0b2\x0b.CapabilityB\0\x12\x1e\n\x14context_playe\
-    r_error\x18\x14\x20\x01(\tB\0\x12\x1d\n\x08metadata\x18\x19\x20\x03(\x0b\
-    2\t.MetadataB\0:\0\"Y\n\nCapability\x12\x1e\n\x03typ\x18\x01\x20\x01(\
-    \x0e2\x0f.CapabilityTypeB\0\x12\x12\n\x08intValue\x18\x02\x20\x03(\x03B\
-    \0\x12\x15\n\x0bstringValue\x18\x03\x20\x03(\tB\0:\0\"\x1d\n\x07Goodbye\
-    \x12\x10\n\x06reason\x18\x01\x20\x01(\tB\0:\0\"\x85\x03\n\x05State\x12\
-    \x15\n\x0bcontext_uri\x18\x02\x20\x01(\tB\0\x12\x0f\n\x05index\x18\x03\
-    \x20\x01(\rB\0\x12\x15\n\x0bposition_ms\x18\x04\x20\x01(\rB\0\x12\x1d\n\
-    \x06status\x18\x05\x20\x01(\x0e2\x0b.PlayStatusB\0\x12\x1e\n\x14position\
-    _measured_at\x18\x07\x20\x01(\x04B\0\x12\x1d\n\x13context_description\
-    \x18\x08\x20\x01(\tB\0\x12\x11\n\x07shuffle\x18\r\x20\x01(\x08B\0\x12\
-    \x10\n\x06repeat\x18\x0e\x20\x01(\x08B\0\x12\x1c\n\x12last_command_ident\
-    \x18\x14\x20\x01(\tB\0\x12\x1c\n\x12last_command_msgid\x18\x15\x20\x01(\
-    \rB\0\x12\x1f\n\x15playing_from_fallback\x18\x18\x20\x01(\x08B\0\x12\r\n\
-    \x03row\x18\x19\x20\x01(\rB\0\x12\x1d\n\x13playing_track_index\x18\x1a\
-    \x20\x01(\rB\0\x12\x1a\n\x05track\x18\x1b\x20\x03(\x0b2\t.TrackRefB\0\
-    \x12\x11\n\x02ad\x18\x1c\x20\x01(\x0b2\x03.AdB\0:\0\"O\n\x08TrackRef\x12\
-    \r\n\x03gid\x18\x01\x20\x01(\x0cB\0\x12\r\n\x03uri\x18\x02\x20\x01(\tB\0\
-    \x12\x10\n\x06queued\x18\x03\x20\x01(\x08B\0\x12\x11\n\x07context\x18\
-    \x04\x20\x01(\tB\0:\0\"\xb9\x01\n\x02Ad\x12\x0e\n\x04next\x18\x01\x20\
-    \x01(\x05B\0\x12\x11\n\x07ogg_fid\x18\x02\x20\x01(\x0cB\0\x12\x13\n\tima\
-    ge_fid\x18\x03\x20\x01(\x0cB\0\x12\x12\n\x08duration\x18\x04\x20\x01(\
-    \x05B\0\x12\x13\n\tclick_url\x18\x05\x20\x01(\tB\0\x12\x18\n\x0eimpressi\
-    on_url\x18\x06\x20\x01(\tB\0\x12\x11\n\x07product\x18\x07\x20\x01(\tB\0\
-    \x12\x14\n\nadvertiser\x18\x08\x20\x01(\tB\0\x12\r\n\x03gid\x18\t\x20\
-    \x01(\x0cB\0:\0\"0\n\x08Metadata\x12\x0e\n\x04type\x18\x01\x20\x01(\tB\0\
-    \x12\x12\n\x08metadata\x18\x02\x20\x01(\tB\0:\0*\x8f\x04\n\x0bMessageTyp\
-    e\x12\x15\n\x11kMessageTypeHello\x10\x01\x12\x17\n\x13kMessageTypeGoodby\
-    e\x10\x02\x12\x15\n\x11kMessageTypeProbe\x10\x03\x12\x16\n\x12kMessageTy\
-    peNotify\x10\n\x12\x14\n\x10kMessageTypeLoad\x10\x14\x12\x14\n\x10kMessa\
-    geTypePlay\x10\x15\x12\x15\n\x11kMessageTypePause\x10\x16\x12\x19\n\x15k\
-    MessageTypePlayPause\x10\x17\x12\x14\n\x10kMessageTypeSeek\x10\x18\x12\
-    \x14\n\x10kMessageTypePrev\x10\x19\x12\x14\n\x10kMessageTypeNext\x10\x1a\
-    \x12\x16\n\x12kMessageTypeVolume\x10\x1b\x12\x17\n\x13kMessageTypeShuffl\
-    e\x10\x1c\x12\x16\n\x12kMessageTypeRepeat\x10\x1d\x12\x1a\n\x16kMessageT\
-    ypeVolumeDown\x10\x1f\x12\x18\n\x14kMessageTypeVolumeUp\x10\x20\x12\x17\
-    \n\x13kMessageTypeReplace\x10!\x12\x16\n\x12kMessageTypeLogout\x10\"\x12\
-    \x16\n\x12kMessageTypeAction\x10#\x12\x16\n\x12kMessageTypeRename\x10$\
-    \x12\x1f\n\x1akMessageTypeUpdateMetadata\x10\x80\x01\x1a\0*\xb4\x02\n\
-    \x0eCapabilityType\x12\x16\n\x12kSupportedContexts\x10\x01\x12\x10\n\x0c\
-    kCanBePlayer\x10\x02\x12\x14\n\x10kRestrictToLocal\x10\x03\x12\x0f\n\x0b\
-    kDeviceType\x10\x04\x12\x14\n\x10kGaiaEqConnectId\x10\x05\x12\x13\n\x0fk\
-    SupportsLogout\x10\x06\x12\x11\n\rkIsObservable\x10\x07\x12\x10\n\x0ckVo\
-    lumeSteps\x10\x08\x12\x13\n\x0fkSupportedTypes\x10\t\x12\x10\n\x0ckComma\
-    ndAcks\x10\n\x12\x13\n\x0fkSupportsRename\x10\x0b\x12\x0b\n\x07kHidden\
-    \x10\x0c\x12\x17\n\x13kSupportsPlaylistV2\x10\r\x12\x1d\n\x19kSupportsEx\
-    ternalEpisodes\x10\x0e\x1a\0*f\n\nPlayStatus\x12\x13\n\x0fkPlayStatusSto\
-    p\x10\0\x12\x13\n\x0fkPlayStatusPlay\x10\x01\x12\x14\n\x10kPlayStatusPau\
-    se\x10\x02\x12\x16\n\x12kPlayStatusLoading\x10\x03\x1a\0B\0b\x06proto2\
-";
-
-static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<
-    ::protobuf::descriptor::FileDescriptorProto,
-> = ::protobuf::lazy::Lazy::INIT;
-
-fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
-    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
-}
-
-pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
-    unsafe { file_descriptor_proto_lazy.get(|| parse_descriptor_proto()) }
-}

+ 19 - 1
publish.sh

@@ -24,6 +24,10 @@ function updateVersion {
     crate_path=${crate_path//\/\///}
     sed -i '' "s/^version.*/version = \"$1\"/g" "$crate_path"
     echo "Path is $crate_path"
+    if [ "$CRATE" = "librespot" ]
+    then
+      cargo update
+    fi
   done
 }
 
@@ -36,6 +40,20 @@ function get_crate_name {
   awk -v FS="name = " 'NF>1{print $2; exit}' Cargo.toml
 }
 
+function remoteWait() {
+  IFS=:
+  secs=${1}
+  crate_name=${2}
+  while [ $secs -gt 0 ]
+  do
+    sleep 1 &
+    printf "\rSleeping to allow %s to propagate on crates.io servers. Continuing in %2d second(s)." ${crate_name} ${secs}
+    secs=$(( $secs - 1 ))
+    wait
+  done
+  echo
+}
+
 function publishCrates {
   for CRATE in "${crates[@]}"
   do
@@ -58,7 +76,7 @@ function publishCrates {
       cargo publish
     fi
     echo "Successfully published $crate_name to crates.io"
-    # Should sleep here for 30 seconds to allow Crates.io time to push updated package to edge servers.
+    remoteWait 30 crate_name
   done
 }