diff --git a/Cargo.lock b/Cargo.lock index 28ceb02d..dc50aeb9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -159,23 +159,23 @@ dependencies = [ [[package]] name = "arrow" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa285343fba4d829d49985bdc541e3789cf6000ed0e84be7c039438df4a4e78c" +checksum = "219d05930b81663fd3b32e3bde8ce5bff3c4d23052a99f11a8fa50a3b47b2658" dependencies = [ - "arrow-arith 50.0.0", - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-cast 50.0.0", + "arrow-arith 51.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-cast 51.0.0", "arrow-csv", - "arrow-data 50.0.0", + "arrow-data 51.0.0", "arrow-ipc", "arrow-json", - "arrow-ord 50.0.0", - "arrow-row 50.0.0", - "arrow-schema 50.0.0", - "arrow-select 50.0.0", - "arrow-string 50.0.0", + "arrow-ord 51.0.0", + "arrow-row 51.0.0", + "arrow-schema 51.0.0", + "arrow-select 51.0.0", + "arrow-string 51.0.0", ] [[package]] @@ -195,14 +195,14 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753abd0a5290c1bcade7c6623a556f7d1659c5f4148b140b5b63ce7bd1a45705" +checksum = "0272150200c07a86a390be651abdd320a2d12e84535f0837566ca87ecd8f95e0" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "chrono", "half", "num", @@ -226,14 +226,14 @@ dependencies = [ [[package]] name = "arrow-array" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d390feeb7f21b78ec997a4081a025baef1e2e0d6069e181939b61864c9779609" +checksum = "8010572cf8c745e242d1b632bd97bd6d4f40fefed5ed1290a8f433abaa686fea" dependencies = [ "ahash 0.8.8", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "chrono", "half", "hashbrown 0.14.3", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69615b061701bcdffbc62756bc7e85c827d5290b472b580c972ebbbf690f5aa4" +checksum = "0d0a2432f0cba5692bf4cb757469c66791394bac9ec7ce63c1afe74744c37b27" dependencies = [ "bytes", "half", @@ -283,34 +283,36 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e448e5dd2f4113bf5b74a1f26531708f5edcacc77335b7066f9398f4bcf4cdef" +checksum = "9abc10cd7995e83505cc290df9384d6e5412b207b79ce6bdff89a10505ed2cba" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", - "arrow-select 50.0.0", - "base64 0.21.7", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", + "arrow-select 51.0.0", + "atoi", + "base64 0.22.0", "chrono", "comfy-table", "half", "lexical-core", "num", + "ryu", ] [[package]] name = "arrow-csv" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46af72211f0712612f5b18325530b9ad1bfbdc87290d5fbfd32a7da128983781" +checksum = "95cbcba196b862270bf2a5edb75927380a7f3a163622c61d40cbba416a6305f2" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-cast 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-cast 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "chrono", "csv", "csv-core", @@ -333,41 +335,41 @@ dependencies = [ [[package]] name = "arrow-data" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67d644b91a162f3ad3135ce1184d0a31c28b816a581e08f29e8e9277a574c64e" +checksum = "2742ac1f6650696ab08c88f6dd3f0eb68ce10f8c253958a18c943a68cd04aec5" dependencies = [ - "arrow-buffer 50.0.0", - "arrow-schema 50.0.0", + "arrow-buffer 51.0.0", + "arrow-schema 51.0.0", "half", "num", ] [[package]] name = "arrow-ipc" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dea5e79b48de6c2e04f03f62b0afea7105be7b77d134f6c5414868feefb80d" +checksum = "a42ea853130f7e78b9b9d178cb4cd01dee0f78e64d96c2949dc0a915d6d9e19d" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-cast 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-cast 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "flatbuffers", ] [[package]] name = "arrow-json" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8950719280397a47d37ac01492e3506a8a724b3fb81001900b866637a829ee0f" +checksum = "eaafb5714d4e59feae964714d724f880511500e3569cc2a94d02456b403a2a49" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-cast 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-cast 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "chrono", "half", "indexmap", @@ -394,15 +396,15 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed9630979034077982d8e74a942b7ac228f33dd93a93b615b4d02ad60c260be" +checksum = "e3e6b61e3dc468f503181dccc2fc705bdcc5f2f146755fa5b56d0a6c5943f412" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", - "arrow-select 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", + "arrow-select 51.0.0", "half", "num", ] @@ -424,15 +426,15 @@ dependencies = [ [[package]] name = "arrow-row" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007035e17ae09c4e8993e4cb8b5b96edf0afb927cd38e2dff27189b274d83dcf" +checksum = "848ee52bb92eb459b811fb471175ea3afcf620157674c8794f539838920f9228" dependencies = [ "ahash 0.8.8", - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "half", "hashbrown 0.14.3", ] @@ -448,9 +450,9 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ff3e9c01f7cd169379d269f926892d0e622a704960350d09d331be3ec9e0029" +checksum = "02d9483aaabe910c4781153ae1b6ae0393f72d9ef757d38d09d450070cf2e528" [[package]] name = "arrow-select" @@ -468,15 +470,15 @@ dependencies = [ [[package]] name = "arrow-select" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce20973c1912de6514348e064829e50947e35977bb9d7fb637dc99ea9ffd78c" +checksum = "849524fa70e0e3c5ab58394c770cb8f514d0122d20de08475f7b472ed8075830" dependencies = [ "ahash 0.8.8", - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", "num", ] @@ -498,15 +500,16 @@ dependencies = [ [[package]] name = "arrow-string" -version = "50.0.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f3b37f2aeece31a2636d1b037dabb69ef590e03bdc7eb68519b51ec86932a7" +checksum = "9373cb5a021aee58863498c37eb484998ef13377f69989c6c5ccfbd258236cdb" dependencies = [ - "arrow-array 50.0.0", - "arrow-buffer 50.0.0", - "arrow-data 50.0.0", - "arrow-schema 50.0.0", - "arrow-select 50.0.0", + "arrow-array 51.0.0", + "arrow-buffer 51.0.0", + "arrow-data 51.0.0", + "arrow-schema 51.0.0", + "arrow-select 51.0.0", + "memchr", "num", "regex", "regex-syntax", @@ -820,8 +823,10 @@ checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-targets 0.52.0", ] @@ -1084,7 +1089,7 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "dbt-converter" -version = "0.0.108" +version = "0.0.111" dependencies = [ "quary_proto", "regex", @@ -1520,9 +1525,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "google-cloud-auth" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1087f1fbd2dd3f58c17c7574ddd99cd61cbbbc2c4dc81114b8687209b196cb" +checksum = "fe54dd8b6eb2bcd5390998238bcc39d1daed4dbb70df2845832532540384fc41" dependencies = [ "async-trait", "base64 0.21.7", @@ -1531,7 +1536,7 @@ dependencies = [ "hex", "hmac", "home", - "jsonwebtoken", + "jsonwebtoken 9.3.0", "path-clean", "percent-encoding", "reqwest", @@ -1903,13 +1908,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ "base64 0.21.7", - "pem", + "pem 1.1.1", "ring 0.16.20", "serde", "serde_json", "simple_asn1", ] +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem 3.0.4", + "ring 0.17.8", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -2460,6 +2480,16 @@ dependencies = [ "base64 0.13.1", ] +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.0", + "serde", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -2895,12 +2925,13 @@ dependencies = [ [[package]] name = "quary" -version = "0.0.108" +version = "0.0.111" dependencies = [ - "arrow-array 50.0.0", + "arrow-array 51.0.0", "assert_cmd", "async-trait", "base64 0.22.0", + "chrono", "clap", "dbt-converter", "dotenv", @@ -2926,9 +2957,10 @@ dependencies = [ [[package]] name = "quary-core" -version = "0.0.108" +version = "0.0.111" dependencies = [ "async-trait", + "chrono", "csv", "data-encoding", "futures", @@ -2952,11 +2984,12 @@ dependencies = [ [[package]] name = "quary-databases" -version = "0.0.108" +version = "0.0.111" dependencies = [ - "arrow-array 50.0.0", + "arrow-array 51.0.0", "assert_cmd", "async-trait", + "chrono", "duckdb", "gcp-bigquery-client", "google-cloud-auth", @@ -3758,7 +3791,7 @@ name = "snowflake-api" version = "0.7.0" dependencies = [ "anyhow", - "arrow 50.0.0", + "arrow 51.0.0", "async-trait", "base64 0.22.0", "bytes", @@ -3789,7 +3822,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13a6dfdd7c433e0f4bb96d777c88d900c5abe3dc4d2f26d2340fd6c7caadcc6c" dependencies = [ "base64 0.21.7", - "jsonwebtoken", + "jsonwebtoken 8.3.0", "rsa", "serde", "sha2", @@ -3845,16 +3878,16 @@ dependencies = [ [[package]] name = "sqlinference" -version = "0.0.108" +version = "0.0.111" dependencies = [ "sqlparser", ] [[package]] name = "sqlparser" -version = "0.44.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf9c7ff146298ffda83a200f8d5084f08dcee1edfc135fcc1d646a45d50ffd6" +checksum = "f7bbffee862a796d67959a89859d6b1046bb5016d63e23835ad0da182777bbe0" dependencies = [ "log", ] @@ -3882,6 +3915,7 @@ dependencies = [ "atoi", "byteorder", "bytes", + "chrono", "crc", "crossbeam-queue", "dotenvy", @@ -3966,6 +4000,7 @@ dependencies = [ "bitflags 2.4.2", "byteorder", "bytes", + "chrono", "crc", "digest", "dotenvy", @@ -4007,6 +4042,7 @@ dependencies = [ "base64 0.21.7", "bitflags 2.4.2", "byteorder", + "chrono", "crc", "dotenvy", "etcetera", @@ -4043,6 +4079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "210976b7d948c7ba9fced8ca835b11cbb2d677c59c79de41ac0d397e14547490" dependencies = [ "atoi", + "chrono", "flume", "futures-channel", "futures-core", diff --git a/proto/gen/es/quary/service/v1/project_file_pb.ts b/proto/gen/es/quary/service/v1/project_file_pb.ts index 8f08f4bb..9e26c9ff 100644 --- a/proto/gen/es/quary/service/v1/project_file_pb.ts +++ b/proto/gen/es/quary/service/v1/project_file_pb.ts @@ -65,6 +65,9 @@ export class ProjectFile_Model extends Message { name = ""; /** + * Tags are used to group different parts of the project together. For example, you could tag all models that are + * related to a specific department with the same tag. + * * @generated from field: repeated string tags = 6; */ tags: string[] = []; @@ -133,6 +136,19 @@ export class ProjectFile_Snapshot extends Message { */ name = ""; + /** + * Tags are used to group different parts of the project together. For example, you could tag all models that are + * related to a specific department with the same tag. + * + * @generated from field: repeated string tags = 4; + */ + tags: string[] = []; + + /** + * @generated from field: optional string description = 5; + */ + description?: string; + /** * @generated from field: string unique_key = 2; */ @@ -152,6 +168,8 @@ export class ProjectFile_Snapshot extends Message { static readonly typeName = "quary.service.v1.ProjectFile.Snapshot"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "tags", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 5, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 2, name: "unique_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "strategy", kind: "message", T: ProjectFile_SnapshotStrategy }, ]); @@ -263,6 +281,9 @@ export class ProjectFileSource extends Message { name = ""; /** + * Tags are used to group different parts of the project together. For example, you could tag all sources that are + * related to a specific department with the same tag. + * * @generated from field: repeated string tags = 6; */ tags: string[] = []; diff --git a/proto/gen/es/quary/service/v1/types_pb.ts b/proto/gen/es/quary/service/v1/types_pb.ts index 7775edbe..a3c8b3ab 100644 --- a/proto/gen/es/quary/service/v1/types_pb.ts +++ b/proto/gen/es/quary/service/v1/types_pb.ts @@ -762,6 +762,8 @@ export class Model extends Message { description?: string; /** + * Tags are used to group different parts of the project together. + * * @generated from field: repeated string tags = 4; */ tags: string[] = []; @@ -881,6 +883,18 @@ export class Snapshot extends Message { */ name = ""; + /** + * @generated from field: optional string description = 2; + */ + description?: string; + + /** + * Tags are used to group different parts of the project together. + * + * @generated from field: repeated string tags = 8; + */ + tags: string[] = []; + /** * @generated from field: string file_path = 3; */ @@ -918,6 +932,8 @@ export class Snapshot extends Message { static readonly typeName = "quary.service.v1.Snapshot"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 8, name: "tags", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 3, name: "file_path", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "file_sha256_hash", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "unique_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, @@ -1093,6 +1109,8 @@ export class Source extends Message { path = ""; /** + * Tags are used to group different parts of the project together. + * * @generated from field: repeated string tags = 6; */ tags: string[] = []; diff --git a/proto/gen/json_schema/ListSourcesResponse.json b/proto/gen/json_schema/ListSourcesResponse.json index e0fa1bb6..5cb3d18f 100644 --- a/proto/gen/json_schema/ListSourcesResponse.json +++ b/proto/gen/json_schema/ListSourcesResponse.json @@ -76,7 +76,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all sources that are related to a specific department with the same tag." }, "description": { "type": "string" diff --git a/proto/gen/json_schema/Model.json b/proto/gen/json_schema/Model.json index 59656429..de90270f 100644 --- a/proto/gen/json_schema/Model.json +++ b/proto/gen/json_schema/Model.json @@ -14,7 +14,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together." }, "file_path": { "type": "string" diff --git a/proto/gen/json_schema/Project.json b/proto/gen/json_schema/Project.json index bb81a605..cca4a520 100644 --- a/proto/gen/json_schema/Project.json +++ b/proto/gen/json_schema/Project.json @@ -215,7 +215,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together." }, "file_path": { "type": "string" @@ -307,7 +308,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all models that are related to a specific department with the same tag." }, "description": { "type": "string" @@ -338,6 +340,16 @@ "name": { "type": "string" }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all models that are related to a specific department with the same tag." + }, + "description": { + "type": "string" + }, "unique_key": { "type": "string" }, @@ -400,7 +412,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all sources that are related to a specific department with the same tag." }, "description": { "type": "string" @@ -447,6 +460,16 @@ "name": { "type": "string" }, + "description": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "description": "Tags are used to group different parts of the project together." + }, "file_path": { "type": "string" }, @@ -508,7 +531,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together." }, "file_path": { "type": "string", diff --git a/proto/gen/json_schema/ProjectFile.json b/proto/gen/json_schema/ProjectFile.json index 7cd5ebbc..10955cb4 100644 --- a/proto/gen/json_schema/ProjectFile.json +++ b/proto/gen/json_schema/ProjectFile.json @@ -68,7 +68,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all models that are related to a specific department with the same tag." }, "description": { "type": "string" @@ -99,6 +100,16 @@ "name": { "type": "string" }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all models that are related to a specific department with the same tag." + }, + "description": { + "type": "string" + }, "unique_key": { "type": "string" }, @@ -161,7 +172,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all sources that are related to a specific department with the same tag." }, "description": { "type": "string" diff --git a/proto/gen/json_schema/ProjectFileSource.json b/proto/gen/json_schema/ProjectFileSource.json index b3512a2a..1f5cb66d 100644 --- a/proto/gen/json_schema/ProjectFileSource.json +++ b/proto/gen/json_schema/ProjectFileSource.json @@ -11,7 +11,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together. For example, you could tag all sources that are related to a specific department with the same tag." }, "description": { "type": "string" diff --git a/proto/gen/json_schema/Snapshot.json b/proto/gen/json_schema/Snapshot.json index 298419b5..749bf3fc 100644 --- a/proto/gen/json_schema/Snapshot.json +++ b/proto/gen/json_schema/Snapshot.json @@ -7,6 +7,16 @@ "name": { "type": "string" }, + "description": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "description": "Tags are used to group different parts of the project together." + }, "file_path": { "type": "string" }, diff --git a/proto/gen/json_schema/Source.json b/proto/gen/json_schema/Source.json index 6be721e4..38c45e22 100644 --- a/proto/gen/json_schema/Source.json +++ b/proto/gen/json_schema/Source.json @@ -17,7 +17,8 @@ "items": { "type": "string" }, - "type": "array" + "type": "array", + "description": "Tags are used to group different parts of the project together." }, "file_path": { "type": "string", diff --git a/proto/gen/rust/src/lib.rs b/proto/gen/rust/src/lib.rs index d9f5687a..4febd5ac 100644 --- a/proto/gen/rust/src/lib.rs +++ b/proto/gen/rust/src/lib.rs @@ -16,6 +16,8 @@ pub mod project_file { pub struct Model { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, + /// Tags are used to group different parts of the project together. For example, you could tag all models that are + /// related to a specific department with the same tag. #[prost(string, repeated, tag = "6")] pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(string, optional, tag = "2")] @@ -33,6 +35,12 @@ pub mod project_file { pub struct Snapshot { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, + /// Tags are used to group different parts of the project together. For example, you could tag all models that are + /// related to a specific department with the same tag. + #[prost(string, repeated, tag = "4")] + pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(string, optional, tag = "5")] + pub description: ::core::option::Option<::prost::alloc::string::String>, #[prost(string, tag = "2")] pub unique_key: ::prost::alloc::string::String, #[prost(message, optional, tag = "3")] @@ -65,6 +73,8 @@ pub mod project_file { pub struct ProjectFileSource { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, + /// Tags are used to group different parts of the project together. For example, you could tag all sources that are + /// related to a specific department with the same tag. #[prost(string, repeated, tag = "6")] pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(string, optional, tag = "2")] @@ -509,6 +519,7 @@ pub struct Model { pub name: ::prost::alloc::string::String, #[prost(string, optional, tag = "2")] pub description: ::core::option::Option<::prost::alloc::string::String>, + /// Tags are used to group different parts of the project together. #[prost(string, repeated, tag = "4")] pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(string, tag = "3")] @@ -540,6 +551,11 @@ pub mod model { pub struct Snapshot { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, + #[prost(string, optional, tag = "2")] + pub description: ::core::option::Option<::prost::alloc::string::String>, + /// Tags are used to group different parts of the project together. + #[prost(string, repeated, tag = "8")] + pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(string, tag = "3")] pub file_path: ::prost::alloc::string::String, #[prost(string, tag = "4")] @@ -597,6 +613,7 @@ pub struct Source { pub description: ::core::option::Option<::prost::alloc::string::String>, #[prost(string, tag = "3")] pub path: ::prost::alloc::string::String, + /// Tags are used to group different parts of the project together. #[prost(string, repeated, tag = "6")] pub tags: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// TODO Replace File path references with whole file references @@ -926,10 +943,10 @@ impl TestRunner { } /// Encoded file descriptor set for the `quary.service.v1` package pub const FILE_DESCRIPTOR_SET: &[u8] = &[ - 0x0a, 0x94, 0x20, 0x0a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x0a, 0xf9, 0x25, 0x0a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0xa3, 0x06, 0x0a, 0x0b, 0x50, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0xee, 0x06, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, @@ -960,750 +977,337 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x89, 0x01, 0x0a, 0x08, 0x53, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xd4, 0x01, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x08, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, + 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x74, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x4f, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x32, 0x0a, 0x11, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xf8, 0x01, 0x0a, 0x11, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, 0x0a, 0x0a, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3a, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x08, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x1a, 0x74, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x4f, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x48, 0x00, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x32, 0x0a, 0x11, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, - 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x22, 0xf8, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x25, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x05, 0x74, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x11, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, - 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x2e, - 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, - 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x09, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, - 0x50, 0x01, 0x4a, 0xea, 0x13, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x47, 0x01, 0x0a, 0x08, 0x0a, - 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, - 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, - 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, - 0x25, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x13, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x07, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x06, 0x12, 0x03, 0x07, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x07, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x07, 0x27, 0x28, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x1c, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x08, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x08, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x08, 0x11, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x08, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, - 0x12, 0x03, 0x09, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, - 0x09, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x09, 0x0b, - 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x09, 0x14, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x09, 0x20, 0x21, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x00, 0x03, 0x00, 0x12, 0x04, 0x0b, 0x02, 0x14, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x0a, 0x0f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x00, 0x05, 0x12, 0x03, 0x0c, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x12, 0x13, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x01, 0x12, 0x03, 0x0d, 0x04, 0x1d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, - 0x01, 0x04, 0x12, 0x03, 0x0d, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, - 0x01, 0x05, 0x12, 0x03, 0x0d, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, - 0x01, 0x01, 0x12, 0x03, 0x0d, 0x14, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x0d, 0x1b, 0x1c, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, - 0x02, 0x12, 0x03, 0x0e, 0x04, 0x24, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x02, - 0x04, 0x12, 0x03, 0x0e, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x02, - 0x05, 0x12, 0x03, 0x0e, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x0e, 0x14, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x02, - 0x03, 0x12, 0x03, 0x0e, 0x22, 0x23, 0x0a, 0x62, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, 0x03, - 0x12, 0x03, 0x10, 0x04, 0x28, 0x1a, 0x53, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x10, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x10, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x10, 0x14, 0x23, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x10, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x04, 0x12, 0x03, 0x11, 0x04, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x11, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x11, 0x0d, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x11, 0x17, 0x1c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x11, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, - 0x00, 0x02, 0x05, 0x12, 0x03, 0x13, 0x04, 0x2b, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x05, 0x04, 0x12, 0x03, 0x13, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x05, 0x06, 0x12, 0x03, 0x13, 0x0d, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x05, 0x01, 0x12, 0x03, 0x13, 0x1f, 0x26, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, - 0x02, 0x05, 0x03, 0x12, 0x03, 0x13, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x03, 0x01, - 0x12, 0x04, 0x16, 0x02, 0x1a, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x01, 0x01, 0x12, - 0x03, 0x16, 0x0a, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x12, 0x03, - 0x17, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, - 0x17, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, - 0x17, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x17, 0x12, 0x13, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x12, 0x03, 0x18, - 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x18, - 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x18, - 0x0b, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x18, - 0x18, 0x19, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x12, 0x03, 0x19, 0x04, - 0x22, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x19, 0x04, - 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x19, 0x15, - 0x1d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x19, 0x20, - 0x21, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x03, 0x02, 0x12, 0x04, 0x1c, 0x02, 0x20, 0x03, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x02, 0x01, 0x12, 0x03, 0x1c, 0x0a, 0x1a, 0x0a, 0x0e, 0x0a, - 0x06, 0x04, 0x00, 0x03, 0x02, 0x08, 0x00, 0x12, 0x04, 0x1d, 0x04, 0x1f, 0x05, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x00, 0x03, 0x02, 0x08, 0x00, 0x01, 0x12, 0x03, 0x1d, 0x0a, 0x17, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x00, 0x03, 0x02, 0x02, 0x00, 0x12, 0x03, 0x1e, 0x06, 0x26, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x00, 0x03, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1e, 0x06, 0x17, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x00, 0x03, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1e, 0x18, 0x21, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x00, 0x03, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1e, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x00, 0x03, 0x03, 0x12, 0x04, 0x22, 0x02, 0x24, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x03, 0x03, 0x01, 0x12, 0x03, 0x22, 0x0a, 0x1b, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x03, - 0x02, 0x00, 0x12, 0x03, 0x23, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, - 0x00, 0x05, 0x12, 0x03, 0x23, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x23, 0x0b, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x23, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x27, - 0x00, 0x32, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x27, 0x08, 0x19, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x28, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x28, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, - 0x29, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x04, 0x12, 0x03, 0x29, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x29, 0x0b, 0x11, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x29, 0x12, 0x16, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x29, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x02, 0x12, 0x03, 0x2a, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, - 0x04, 0x12, 0x03, 0x2a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, 0x12, - 0x03, 0x2a, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2a, - 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2a, 0x20, 0x21, - 0x0a, 0x8c, 0x02, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x2e, 0x02, 0x12, 0x1a, 0xfe, - 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2e, - 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0a, 0x20, 0x2d, - 0x20, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x27, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, 0x73, 0x20, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x27, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x27, 0x75, 0x73, 0x65, 0x72, 0x73, 0x27, 0x0a, 0x20, 0x2d, 0x20, 0x27, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, 0x33, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, 0x33, 0x2e, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, 0x33, 0x27, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, - 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x2e, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x04, 0x12, 0x03, 0x2f, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x04, 0x12, - 0x03, 0x2f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, 0x2f, - 0x0b, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x2f, 0x15, 0x1a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2f, 0x1d, 0x1e, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x31, 0x02, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x05, 0x06, 0x12, 0x03, 0x31, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, - 0x12, 0x03, 0x31, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, - 0x31, 0x27, 0x28, 0x0a, 0x71, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x34, 0x00, 0x3d, 0x01, 0x22, - 0x65, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, - 0x6c, 0x0a, 0x20, 0x2d, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x0a, 0x20, 0x2d, 0x20, 0x27, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x27, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x29, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x34, - 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x3a, 0x02, 0x12, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3a, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x3b, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, - 0x03, 0x3b, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x3b, - 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3b, 0x12, 0x1d, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3b, 0x20, 0x21, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x3c, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x02, 0x04, 0x12, 0x03, 0x3c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x02, 0x06, 0x12, 0x03, 0x3c, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, - 0x12, 0x03, 0x3c, 0x16, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, - 0x3c, 0x1e, 0x1f, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x3f, 0x00, 0x42, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x3f, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x03, 0x02, 0x00, 0x12, 0x03, 0x40, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x40, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x40, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x40, - 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x41, 0x02, 0x1f, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x41, 0x02, 0x15, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x41, 0x16, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x41, 0x1d, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, - 0x04, 0x44, 0x00, 0x47, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x44, 0x08, - 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x45, 0x02, 0x12, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x45, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x45, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x45, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, - 0x12, 0x03, 0x46, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, - 0x46, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x46, 0x16, - 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x46, 0x1d, 0x1e, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x8b, 0x05, 0x0a, 0x23, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x22, 0x4c, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, - 0x61, 0x0a, 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x94, 0x03, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x10, - 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, - 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, - 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x37, 0x0a, 0x02, 0x04, 0x00, - 0x12, 0x04, 0x07, 0x00, 0x09, 0x01, 0x1a, 0x2b, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x72, 0x61, 0x6e, 0x20, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x13, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, 0x29, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x08, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x08, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x08, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x08, 0x27, 0x28, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0b, 0x00, 0x10, 0x01, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x00, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x0c, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x0c, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0e, 0x02, 0x1b, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x04, 0x12, 0x03, 0x0e, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0e, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0e, 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x0e, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, - 0x12, 0x03, 0x0f, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x04, 0x12, 0x03, - 0x0f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, 0x12, 0x03, 0x0f, 0x0b, - 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x12, 0x18, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, 0x1b, 0x1c, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xb8, 0x03, 0x0a, 0x24, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x22, 0x3f, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, - 0x68, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xb0, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0a, 0x01, - 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, - 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, - 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x82, 0x01, 0x0a, 0x02, 0x04, 0x00, - 0x12, 0x04, 0x07, 0x00, 0x0a, 0x01, 0x1a, 0x76, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x0a, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, - 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, - 0x08, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x08, 0x10, - 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x17, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x09, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x09, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x09, 0x15, 0x16, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, - 0x0a, 0xb8, 0x13, 0x0a, 0x24, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x69, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x13, 0x0a, 0x11, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x4c, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x12, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x49, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, 0x22, 0x23, 0x0a, - 0x0b, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x46, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x33, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2f, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x32, 0x87, 0x04, 0x0a, 0x0d, 0x43, 0x4c, 0x49, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, - 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x22, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, - 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x02, 0x50, 0x01, - 0x4a, 0xc0, 0x09, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x39, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, - 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, - 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x2d, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2e, - 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, - 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x11, - 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x15, 0x0a, 0x0b, 0x0a, - 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0b, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x06, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, - 0x02, 0x12, 0x03, 0x0b, 0x11, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x0b, 0x2d, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, - 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x06, 0x0f, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0c, 0x10, 0x20, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0c, 0x2b, 0x3c, 0x0a, 0x0b, 0x0a, 0x04, 0x06, - 0x00, 0x02, 0x02, 0x12, 0x03, 0x0d, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x0d, 0x06, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, - 0x03, 0x0d, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0d, - 0x21, 0x2d, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, 0x0e, 0x02, 0x32, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x0e, 0x06, 0x0b, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x0e, 0x0c, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x0e, 0x23, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, - 0x04, 0x12, 0x03, 0x0f, 0x02, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, - 0x03, 0x0f, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x0f, - 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x0f, 0x2f, 0x42, - 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, 0x12, 0x03, 0x10, 0x02, 0x44, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x10, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x10, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x05, 0x03, 0x12, 0x03, 0x10, 0x2f, 0x42, 0x0a, 0x09, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x03, 0x13, - 0x00, 0x1c, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x13, 0x08, 0x19, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x15, 0x00, 0x17, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, - 0x01, 0x12, 0x03, 0x15, 0x08, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, - 0x16, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x04, 0x12, 0x03, 0x16, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x16, 0x0b, 0x17, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, 0x18, 0x1e, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x21, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x04, - 0x02, 0x12, 0x03, 0x19, 0x00, 0x1b, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x19, - 0x08, 0x18, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x1b, 0x00, 0x1d, 0x01, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x1b, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, - 0x02, 0x00, 0x12, 0x03, 0x1c, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x04, - 0x12, 0x03, 0x1c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, - 0x1c, 0x0b, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1c, 0x18, - 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1c, 0x20, 0x21, 0x0a, - 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x1f, 0x00, 0x21, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x04, 0x01, 0x12, 0x03, 0x1f, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, - 0x03, 0x20, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x20, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x20, 0x09, 0x0e, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x20, 0x11, 0x12, 0x0a, 0x09, - 0x0a, 0x02, 0x04, 0x05, 0x12, 0x03, 0x23, 0x00, 0x17, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, - 0x12, 0x03, 0x23, 0x08, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x25, 0x00, 0x27, - 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x25, 0x08, 0x14, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x26, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x05, 0x12, 0x03, 0x26, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x26, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x26, 0x11, 0x12, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x29, 0x00, 0x2b, 0x01, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x29, 0x08, 0x15, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x2a, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, - 0x00, 0x06, 0x12, 0x03, 0x2a, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x2a, 0x0e, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x2a, 0x17, 0x18, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x2d, 0x00, 0x2f, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x2d, 0x08, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x08, 0x02, 0x00, 0x12, 0x03, 0x2e, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x2e, 0x09, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2e, - 0x16, 0x17, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x31, 0x00, 0x33, 0x01, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x31, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, - 0x02, 0x00, 0x12, 0x03, 0x32, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x04, - 0x12, 0x03, 0x32, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x05, 0x12, 0x03, - 0x32, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x32, 0x12, - 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x32, 0x1c, 0x1d, 0x0a, - 0x09, 0x0a, 0x02, 0x04, 0x0a, 0x12, 0x03, 0x35, 0x00, 0x1d, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0a, - 0x01, 0x12, 0x03, 0x35, 0x08, 0x1a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x04, 0x37, 0x00, - 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x03, 0x37, 0x08, 0x1b, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x03, 0x38, 0x02, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x0b, 0x02, 0x00, 0x04, 0x12, 0x03, 0x38, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, - 0x00, 0x06, 0x12, 0x03, 0x38, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x38, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x38, 0x27, 0x28, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xcc, 0x03, 0x0a, 0x29, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x74, 0x0a, 0x11, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, - 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x8a, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0a, 0x01, - 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, - 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, - 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, - 0x04, 0x06, 0x00, 0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, - 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x12, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x07, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x07, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, - 0x12, 0x03, 0x08, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, - 0x08, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x08, 0x0b, - 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x08, 0x12, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x08, 0x20, 0x21, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x09, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x02, 0x04, 0x12, 0x03, 0x09, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, - 0x05, 0x12, 0x03, 0x09, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, - 0x03, 0x09, 0x12, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x09, - 0x1a, 0x1b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xb0, 0x1a, 0x0a, 0x28, 0x71, - 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x2f, 0x0a, 0x03, 0x56, 0x61, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc9, 0x0a, 0x0a, 0x10, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x53, 0x0a, 0x06, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x48, 0x00, 0x52, 0x06, 0x64, 0x75, - 0x63, 0x6b, 0x64, 0x62, 0x12, 0x6d, 0x0a, 0x10, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, 0x5f, 0x69, - 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, 0x49, 0x6e, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x06, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, 0x69, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x10, 0x73, 0x71, 0x6c, 0x69, - 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x49, - 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x5a, 0x0a, 0x09, 0x62, 0x69, 0x67, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, - 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x62, 0x69, 0x67, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x5c, 0x0a, 0x09, 0x73, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6e, 0x6f, 0x77, 0x66, - 0x6c, 0x61, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x09, 0x73, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, - 0x65, 0x12, 0x59, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, - 0x48, 0x00, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x04, - 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, - 0x72, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x2c, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, 0x69, 0x74, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x20, 0x0a, 0x1e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, 0x69, 0x74, 0x65, 0x49, - 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x1a, 0x54, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, - 0x42, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, - 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x48, 0x0a, - 0x1e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, - 0x1b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x32, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x73, 0x74, 0x67, - 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x58, 0x0a, 0x18, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, - 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, - 0x73, 0x65, 0x74, 0x49, 0x64, 0x1a, 0xe4, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, - 0x61, 0x6b, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1c, - 0x0a, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x42, 0x08, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xe8, 0x0e, 0x0a, 0x06, 0x12, - 0x04, 0x00, 0x00, 0x43, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, - 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, - 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x09, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, - 0x01, 0x12, 0x03, 0x06, 0x08, 0x0b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, - 0x07, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x07, 0x02, - 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x09, 0x0d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x07, 0x10, 0x11, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x08, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x08, 0x11, 0x12, 0x0a, 0x47, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0c, 0x00, 0x43, 0x01, - 0x1a, 0x3b, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, - 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x08, - 0x00, 0x12, 0x04, 0x0d, 0x02, 0x15, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x08, 0x00, 0x01, - 0x12, 0x03, 0x0d, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, - 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0e, 0x04, 0x1a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x1b, 0x21, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x04, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x01, 0x06, 0x12, 0x03, 0x0f, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x0f, 0x23, 0x33, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, - 0x0f, 0x36, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x10, 0x04, 0x26, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x10, 0x04, 0x1a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x1b, 0x21, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x10, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, - 0x02, 0x03, 0x12, 0x03, 0x11, 0x04, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x06, - 0x12, 0x03, 0x11, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, - 0x11, 0x23, 0x33, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x11, 0x36, - 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x12, 0x04, 0x2b, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, 0x12, 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x12, 0x1d, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x04, 0x03, 0x12, 0x03, 0x12, 0x29, 0x2a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, - 0x12, 0x03, 0x13, 0x04, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, - 0x13, 0x04, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x13, 0x1e, - 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x13, 0x2a, 0x2b, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, 0x03, 0x14, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x06, 0x06, 0x12, 0x03, 0x14, 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x06, 0x01, 0x12, 0x03, 0x14, 0x1d, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, - 0x03, 0x12, 0x03, 0x14, 0x28, 0x29, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, - 0x16, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x04, 0x12, 0x03, 0x16, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x06, 0x12, 0x03, 0x16, 0x0b, 0x0e, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x01, 0x12, 0x03, 0x16, 0x0f, 0x13, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x07, 0x03, 0x12, 0x03, 0x16, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x01, 0x03, 0x00, 0x12, 0x04, 0x18, 0x02, 0x1a, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, - 0x00, 0x01, 0x12, 0x03, 0x18, 0x0a, 0x20, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x00, 0x02, - 0x00, 0x12, 0x03, 0x19, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x19, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x19, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x19, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x01, 0x12, 0x03, - 0x1c, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x01, 0x01, 0x12, 0x03, 0x1c, 0x0a, - 0x28, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x02, 0x12, 0x04, 0x1e, 0x02, 0x21, 0x03, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x0a, 0x20, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x12, 0x03, 0x1f, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1f, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x12, 0x13, 0x0a, 0x0d, 0x0a, 0x06, - 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x12, 0x03, 0x20, 0x04, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x20, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x20, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x20, 0x14, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x20, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x01, 0x03, 0x03, 0x12, 0x04, 0x23, 0x02, 0x25, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, - 0x03, 0x01, 0x12, 0x03, 0x23, 0x0a, 0x28, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x03, 0x02, - 0x00, 0x12, 0x03, 0x24, 0x04, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x03, 0x02, 0x00, - 0x04, 0x12, 0x03, 0x24, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x03, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x24, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x03, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x24, 0x14, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x03, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x24, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x04, 0x12, 0x04, - 0x27, 0x02, 0x29, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x04, 0x01, 0x12, 0x03, 0x27, - 0x0a, 0x22, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, 0x12, 0x03, 0x28, 0x04, - 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x28, 0x04, - 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x0b, - 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x14, - 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x05, 0x12, 0x04, 0x35, 0x02, 0x38, 0x03, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x05, 0x01, 0x12, 0x03, 0x35, 0x0a, 0x22, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x12, 0x03, 0x36, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x05, 0x12, 0x03, 0x36, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x36, 0x0b, 0x15, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x36, 0x18, 0x19, 0x0a, 0x0d, 0x0a, 0x06, - 0x04, 0x01, 0x03, 0x05, 0x02, 0x01, 0x12, 0x03, 0x37, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x05, 0x02, 0x01, 0x05, 0x12, 0x03, 0x37, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x37, 0x0b, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x01, 0x03, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x37, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x01, 0x03, 0x06, 0x12, 0x04, 0x3a, 0x02, 0x42, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, - 0x06, 0x01, 0x12, 0x03, 0x3a, 0x0a, 0x23, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, - 0x00, 0x12, 0x03, 0x3b, 0x04, 0x1b, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x3b, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x3b, 0x0b, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x3b, 0x19, 0x1a, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, 0x01, - 0x12, 0x03, 0x3c, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x01, 0x05, - 0x12, 0x03, 0x3c, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x3c, 0x0b, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x01, 0x03, - 0x12, 0x03, 0x3c, 0x17, 0x18, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, 0x02, 0x12, - 0x03, 0x3d, 0x04, 0x1d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x02, 0x05, 0x12, - 0x03, 0x3d, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x02, 0x01, 0x12, - 0x03, 0x3d, 0x0b, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x02, 0x03, 0x12, - 0x03, 0x3d, 0x1b, 0x1c, 0x0a, 0x32, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, 0x03, 0x12, 0x03, - 0x3e, 0x04, 0x14, 0x22, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x6e, - 0x6b, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, - 0x02, 0x03, 0x05, 0x12, 0x03, 0x3e, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, - 0x02, 0x03, 0x01, 0x12, 0x03, 0x3e, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, - 0x02, 0x03, 0x03, 0x12, 0x03, 0x3e, 0x12, 0x13, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, - 0x02, 0x04, 0x12, 0x03, 0x3f, 0x04, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, - 0x04, 0x05, 0x12, 0x03, 0x3f, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, - 0x04, 0x01, 0x12, 0x03, 0x3f, 0x0b, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, - 0x04, 0x03, 0x12, 0x03, 0x3f, 0x16, 0x17, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, - 0x05, 0x12, 0x03, 0x40, 0x04, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x05, - 0x05, 0x12, 0x03, 0x40, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x05, - 0x01, 0x12, 0x03, 0x40, 0x0b, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x05, - 0x03, 0x12, 0x03, 0x40, 0x14, 0x15, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, 0x06, - 0x12, 0x03, 0x41, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x06, 0x05, - 0x12, 0x03, 0x41, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x06, 0x01, - 0x12, 0x03, 0x41, 0x0b, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x06, 0x03, - 0x12, 0x03, 0x41, 0x17, 0x18, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xe8, 0x04, - 0x0a, 0x1b, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, - 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, - 0x36, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x3d, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xd2, 0x02, 0x0a, 0x06, - 0x12, 0x04, 0x00, 0x00, 0x0e, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, + 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x09, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x84, 0x19, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x4f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, + 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, + 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x2b, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x00, 0x12, 0x03, 0x07, 0x02, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, + 0x03, 0x07, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x07, + 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x1d, 0x24, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x07, 0x27, 0x28, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x08, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x06, 0x12, 0x03, 0x08, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x08, 0x11, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x08, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x09, 0x02, 0x22, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x09, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x09, 0x0b, 0x13, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x09, 0x14, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x09, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x03, 0x00, + 0x12, 0x04, 0x0b, 0x02, 0x16, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x00, 0x01, 0x12, + 0x03, 0x0b, 0x0a, 0x0f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x0c, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x0c, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x0c, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x0c, 0x12, 0x13, 0x0a, 0xb5, 0x01, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, 0x01, 0x12, 0x03, + 0x0f, 0x04, 0x1d, 0x1a, 0xa5, 0x01, 0x20, 0x54, 0x61, 0x67, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x64, 0x69, + 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x67, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x61, + 0x67, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x68, 0x61, + 0x74, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, + 0x6f, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x64, 0x65, 0x70, + 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x61, 0x67, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x00, 0x03, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x0f, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x00, 0x03, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0f, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x00, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0f, 0x14, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x00, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x1b, 0x1c, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x00, 0x03, 0x00, 0x02, 0x02, 0x12, 0x03, 0x10, 0x04, 0x24, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x10, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x10, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x14, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x10, 0x22, 0x23, 0x0a, 0x62, 0x0a, 0x06, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x03, 0x12, 0x03, 0x12, 0x04, 0x28, 0x1a, 0x53, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x61, 0x72, + 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, + 0x61, 0x63, 0x68, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x12, 0x04, 0x0c, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x12, 0x0d, 0x13, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x12, 0x14, 0x23, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x12, 0x26, 0x27, 0x0a, 0x0d, + 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, 0x04, 0x12, 0x03, 0x13, 0x04, 0x21, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x13, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x13, 0x0d, 0x16, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x13, 0x17, 0x1c, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x13, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x00, 0x03, 0x00, 0x02, 0x05, 0x12, 0x03, 0x15, 0x04, 0x2b, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x00, 0x02, 0x05, 0x04, 0x12, 0x03, 0x15, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x15, 0x0d, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x15, 0x1f, 0x26, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x15, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x00, 0x03, 0x01, 0x12, 0x04, 0x18, 0x02, 0x20, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x03, 0x01, 0x01, 0x12, 0x03, 0x18, 0x0a, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, + 0x02, 0x00, 0x12, 0x03, 0x19, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x19, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x19, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x19, 0x12, 0x13, 0x0a, 0xb5, 0x01, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, + 0x02, 0x01, 0x12, 0x03, 0x1c, 0x04, 0x1d, 0x1a, 0xa5, 0x01, 0x20, 0x54, 0x61, 0x67, 0x73, 0x20, + 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x75, 0x6c, + 0x64, 0x20, 0x74, 0x61, 0x67, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x20, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x61, 0x67, 0x2e, 0x0a, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x04, 0x12, 0x03, 0x1c, 0x04, 0x0c, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1c, 0x0d, 0x13, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1c, 0x14, 0x18, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1c, 0x1b, 0x1c, 0x0a, + 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x12, 0x03, 0x1d, 0x04, 0x24, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x04, 0x12, 0x03, 0x1d, 0x04, 0x0c, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x05, 0x12, 0x03, 0x1d, 0x0d, 0x13, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x1d, 0x14, 0x1f, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x1d, 0x22, 0x23, 0x0a, 0x0d, + 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x03, 0x12, 0x03, 0x1e, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1e, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1e, 0x0b, 0x15, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1e, 0x18, 0x19, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x04, 0x12, 0x03, 0x1f, 0x04, 0x22, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, 0x1f, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1f, 0x15, 0x1d, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x03, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1f, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x00, 0x03, 0x02, 0x12, 0x04, 0x22, 0x02, 0x26, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x03, 0x02, 0x01, 0x12, 0x03, 0x22, 0x0a, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x02, + 0x08, 0x00, 0x12, 0x04, 0x23, 0x04, 0x25, 0x05, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x02, + 0x08, 0x00, 0x01, 0x12, 0x03, 0x23, 0x0a, 0x17, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x02, + 0x02, 0x00, 0x12, 0x03, 0x24, 0x06, 0x26, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x02, 0x02, + 0x00, 0x06, 0x12, 0x03, 0x24, 0x06, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x02, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x24, 0x18, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x02, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x24, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x03, 0x03, 0x12, + 0x04, 0x28, 0x02, 0x2a, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x03, 0x01, 0x12, 0x03, + 0x28, 0x0a, 0x1b, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x03, 0x02, 0x00, 0x12, 0x03, 0x29, + 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x29, + 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x29, + 0x0b, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x29, + 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x2d, 0x00, 0x3a, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x2d, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x00, 0x12, 0x03, 0x2e, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, + 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x2e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2e, 0x10, + 0x11, 0x0a, 0xb4, 0x01, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x31, 0x02, 0x1b, 0x1a, + 0xa6, 0x01, 0x20, 0x54, 0x61, 0x67, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, + 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, + 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x61, 0x67, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, + 0x72, 0x65, 0x0a, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, + 0x6d, 0x65, 0x20, 0x74, 0x61, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, + 0x04, 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, + 0x03, 0x31, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x31, + 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x31, 0x19, 0x1a, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x32, 0x02, 0x22, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x02, 0x04, 0x12, 0x03, 0x32, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x02, 0x05, 0x12, 0x03, 0x32, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x32, 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, + 0x12, 0x03, 0x32, 0x20, 0x21, 0x0a, 0x8c, 0x02, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, + 0x36, 0x02, 0x12, 0x1a, 0xfe, 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, + 0x70, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, + 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x74, + 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x27, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x27, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, 0x73, 0x20, 0x27, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x27, 0x75, 0x73, 0x65, 0x72, 0x73, 0x27, 0x0a, 0x20, + 0x2d, 0x20, 0x27, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, + 0x33, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, 0x33, + 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x31, 0x32, 0x33, 0x27, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x36, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x36, 0x09, 0x0d, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x36, 0x10, 0x11, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x37, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x04, 0x04, 0x12, 0x03, 0x37, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x04, 0x06, 0x12, 0x03, 0x37, 0x0b, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, + 0x12, 0x03, 0x37, 0x15, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, + 0x37, 0x1d, 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x39, 0x02, 0x29, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x39, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x39, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x39, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x05, 0x03, 0x12, 0x03, 0x39, 0x27, 0x28, 0x0a, 0x71, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, + 0x3c, 0x00, 0x45, 0x01, 0x22, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x6e, 0x6f, + 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x0a, 0x20, 0x2d, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x0a, 0x20, 0x2d, 0x20, 0x27, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, + 0x70, 0x27, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, + 0x6e, 0x74, 0x6f, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x29, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x3c, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, + 0x03, 0x42, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x42, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x42, 0x09, 0x0d, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x42, 0x10, 0x11, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x43, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x43, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x43, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x43, 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x43, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x44, 0x02, 0x20, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x04, 0x12, 0x03, 0x44, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x06, 0x12, 0x03, 0x44, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x44, 0x16, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x44, 0x1e, 0x1f, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, + 0x47, 0x00, 0x4a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x47, 0x08, 0x12, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x48, 0x02, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x48, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x48, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x48, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, + 0x03, 0x49, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x49, + 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x49, 0x16, 0x1a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x49, 0x1d, 0x1e, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4c, 0x00, 0x4f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, + 0x01, 0x12, 0x03, 0x4c, 0x08, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, + 0x4d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x4d, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4d, 0x09, 0x0d, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4d, 0x10, 0x11, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x4e, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x01, 0x06, 0x12, 0x03, 0x4e, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x4e, 0x16, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x4e, 0x1d, 0x1e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x8b, 0x05, 0x0a, + 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x4c, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x61, 0x0a, 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x07, + 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x94, 0x03, 0x0a, 0x06, + 0x12, 0x04, 0x00, 0x00, 0x10, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, - 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x0c, 0x0a, 0x57, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, - 0x03, 0x08, 0x02, 0x12, 0x1a, 0x4a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x08, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, - 0x12, 0x03, 0x09, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x09, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x09, 0x13, - 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0c, 0x00, 0x0e, 0x01, 0x0a, 0x0a, 0x0a, - 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x00, 0x12, 0x03, 0x0d, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x0d, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0d, - 0x14, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0d, 0x1c, 0x1d, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x8a, 0x03, 0x0a, 0x1f, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x3c, - 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, - 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x42, 0x02, 0x50, 0x01, - 0x4a, 0x8a, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0a, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, - 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, - 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, - 0x03, 0x04, 0x00, 0x22, 0x0a, 0x5d, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x0a, 0x01, - 0x1a, 0x51, 0x20, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x6e, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, - 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x10, 0x0a, + 0x37, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x09, 0x01, 0x1a, 0x2b, 0x20, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x72, 0x61, 0x6e, + 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, + 0x03, 0x07, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, + 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x08, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x08, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x08, 0x27, 0x28, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, + 0x04, 0x0b, 0x00, 0x10, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x08, + 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x12, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, + 0x12, 0x03, 0x0e, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x04, 0x12, 0x03, + 0x0e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0e, 0x0b, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0e, 0x12, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0e, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x02, 0x04, 0x12, 0x03, 0x0f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, + 0x05, 0x12, 0x03, 0x0f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, + 0x03, 0x0f, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, + 0x1b, 0x1c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xb8, 0x03, 0x0a, 0x24, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x3f, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, + 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xb0, 0x02, 0x0a, 0x06, 0x12, + 0x04, 0x00, 0x00, 0x0a, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, + 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, + 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x82, + 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x0a, 0x01, 0x1a, 0x76, 0x20, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, + 0x6e, 0x20, 0x61, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x20, 0x49, 0x74, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x74, + 0x68, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, @@ -1711,179 +1315,642 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x09, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x09, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x09, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x09, 0x15, 0x16, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x95, 0x4d, 0x0a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0xec, 0x05, 0x0a, 0x04, 0x54, 0x65, 0x73, - 0x74, 0x12, 0x31, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x51, 0x4c, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x00, 0x52, - 0x03, 0x73, 0x71, 0x6c, 0x12, 0x36, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x08, - 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x48, 0x00, 0x52, - 0x07, 0x6e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x48, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x12, 0x4f, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xb8, 0x13, 0x0a, 0x24, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x69, 0x5f, 0x72, + 0x70, 0x63, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, + 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x15, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, - 0x68, 0x61, 0x6e, 0x5f, 0x6f, 0x72, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x12, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, - 0x61, 0x6c, 0x12, 0x54, 0x0a, 0x12, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, - 0x6f, 0x72, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x56, + 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, + 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, + 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x76, 0x69, 0x65, + 0x77, 0x73, 0x22, 0x23, 0x0a, 0x0b, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x78, 0x65, 0x63, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x46, 0x0a, + 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, - 0x45, 0x71, 0x75, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, - 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x0c, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2f, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x07, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x32, 0x87, 0x04, 0x0a, 0x0d, 0x43, 0x4c, 0x49, 0x52, + 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x0a, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, + 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, + 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, - 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, - 0x12, 0x3d, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xc0, 0x09, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x39, 0x01, + 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, + 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x2d, 0x0a, + 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, + 0x12, 0x03, 0x06, 0x00, 0x2e, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, + 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, + 0x12, 0x04, 0x0a, 0x00, 0x11, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0a, + 0x08, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0b, 0x02, 0x41, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x06, 0x10, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0b, 0x11, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x2d, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x0c, 0x02, 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x0c, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0c, + 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0c, 0x2b, 0x3c, + 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0d, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0d, 0x06, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0d, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x0d, 0x21, 0x2d, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, + 0x03, 0x0e, 0x02, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x0e, + 0x06, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x0e, 0x0c, 0x18, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x0e, 0x23, 0x30, 0x0a, 0x0b, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x03, 0x0f, 0x02, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x0f, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x04, 0x02, 0x12, 0x03, 0x0f, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, + 0x12, 0x03, 0x0f, 0x2f, 0x42, 0x0a, 0x0b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, 0x12, 0x03, 0x10, + 0x02, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x10, 0x06, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x10, 0x12, 0x24, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x10, 0x2f, 0x42, 0x0a, 0x09, 0x0a, 0x02, + 0x04, 0x00, 0x12, 0x03, 0x13, 0x00, 0x1c, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x13, 0x08, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x15, 0x00, 0x17, 0x01, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x15, 0x08, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x01, 0x02, 0x00, 0x12, 0x03, 0x16, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x16, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x16, 0x0b, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, + 0x18, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x21, 0x22, + 0x0a, 0x09, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x03, 0x19, 0x00, 0x1b, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x19, 0x08, 0x18, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x1b, + 0x00, 0x1d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x1b, 0x08, 0x19, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x1c, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x00, 0x04, 0x12, 0x03, 0x1c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x1c, 0x0b, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x1c, 0x18, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x1c, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x1f, 0x00, 0x21, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x1f, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x20, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x20, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x20, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x20, 0x11, 0x12, 0x0a, 0x09, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x03, 0x23, 0x00, 0x17, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x23, 0x08, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, + 0x12, 0x04, 0x25, 0x00, 0x27, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x25, + 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x26, 0x02, 0x13, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x26, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x26, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x26, 0x11, 0x12, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, + 0x04, 0x29, 0x00, 0x2b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x29, 0x08, + 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x2a, 0x02, 0x19, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2a, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2a, 0x0e, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x2a, 0x17, 0x18, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, + 0x2d, 0x00, 0x2f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x2d, 0x08, 0x1a, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x2e, 0x02, 0x18, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x08, 0x02, 0x00, 0x05, 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2e, 0x09, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x2e, 0x16, 0x17, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x31, + 0x00, 0x33, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x31, 0x08, 0x1b, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x32, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x09, 0x02, 0x00, 0x04, 0x12, 0x03, 0x32, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x32, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x32, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x32, 0x1c, 0x1d, 0x0a, 0x09, 0x0a, 0x02, 0x04, 0x0a, 0x12, 0x03, 0x35, 0x00, 0x1d, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x0a, 0x01, 0x12, 0x03, 0x35, 0x08, 0x1a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, + 0x0b, 0x12, 0x04, 0x37, 0x00, 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x03, + 0x37, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x03, 0x38, 0x02, 0x29, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x04, 0x12, 0x03, 0x38, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x06, 0x12, 0x03, 0x38, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x0b, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x27, 0x28, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0xcc, 0x03, 0x0a, 0x29, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, + 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x22, 0x74, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x8a, 0x02, 0x0a, 0x06, 0x12, + 0x04, 0x00, 0x00, 0x0a, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, + 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, + 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, + 0x01, 0x12, 0x03, 0x06, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x07, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x07, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x09, 0x0d, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x07, 0x10, 0x11, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x04, 0x12, 0x03, 0x08, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x05, 0x12, 0x03, 0x08, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x08, 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x08, + 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x09, 0x02, 0x1c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x09, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x09, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x09, 0x12, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x09, 0x1a, 0x1b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, + 0xb0, 0x1a, 0x0a, 0x28, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, + 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x2f, + 0x0a, 0x03, 0x56, 0x61, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0xc9, 0x0a, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, 0x0a, 0x06, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x48, + 0x00, 0x52, 0x06, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, 0x12, 0x6d, 0x0a, 0x10, 0x64, 0x75, 0x63, + 0x6b, 0x64, 0x62, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x49, 0x6e, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x75, 0x63, 0x6b, 0x64, 0x62, + 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x06, 0x73, 0x71, 0x6c, 0x69, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, + 0x69, 0x74, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, + 0x10, 0x73, 0x71, 0x6c, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, 0x4c, 0x69, + 0x74, 0x65, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x71, + 0x6c, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x5a, 0x0a, 0x09, + 0x62, 0x69, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, + 0x62, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x5c, 0x0a, 0x09, 0x73, 0x6e, 0x6f, 0x77, + 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x71, 0x75, + 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x48, 0x00, 0x52, 0x09, 0x73, 0x6e, 0x6f, + 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x12, 0x59, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x73, + 0x74, 0x67, 0x72, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, + 0x73, 0x12, 0x29, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x2c, 0x0a, 0x16, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x53, 0x71, 0x4c, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x20, 0x0a, 0x1e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x71, + 0x4c, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x1a, 0x54, 0x0a, 0x16, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x1a, 0x48, 0x0a, 0x1e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x75, 0x63, 0x6b, 0x44, 0x42, 0x49, 0x6e, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, + 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x32, 0x0a, 0x18, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x1a, 0x58, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x49, 0x64, 0x1a, 0xe4, 0x01, 0x0a, 0x19, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, + 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x50, 0x01, 0x4a, + 0xe8, 0x0e, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x43, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, + 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, + 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, + 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x09, 0x01, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x0b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x05, 0x12, 0x03, 0x07, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x07, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x07, + 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x13, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x08, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x08, 0x11, 0x12, 0x0a, 0x47, 0x0a, 0x02, 0x04, 0x01, 0x12, + 0x04, 0x0c, 0x00, 0x43, 0x01, 0x1a, 0x3b, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x18, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x01, 0x08, 0x00, 0x12, 0x04, 0x0d, 0x02, 0x15, 0x03, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x08, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x00, 0x12, 0x03, 0x0e, 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, + 0x12, 0x03, 0x0e, 0x04, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x0e, 0x1b, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x24, + 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x04, 0x38, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0f, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0f, 0x23, 0x33, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x36, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, + 0x12, 0x03, 0x10, 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, + 0x10, 0x04, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x1b, + 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x10, 0x24, 0x25, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x11, 0x04, 0x38, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x03, 0x06, 0x12, 0x03, 0x11, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x11, 0x23, 0x33, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, + 0x03, 0x12, 0x03, 0x11, 0x36, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, + 0x12, 0x04, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, 0x12, 0x04, + 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x12, 0x1d, 0x26, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x12, 0x29, 0x2a, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x13, 0x04, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x05, 0x06, 0x12, 0x03, 0x13, 0x04, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, + 0x01, 0x12, 0x03, 0x13, 0x1e, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, + 0x03, 0x13, 0x2a, 0x2b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, 0x03, 0x14, 0x04, + 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x06, 0x12, 0x03, 0x14, 0x04, 0x1c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x14, 0x1d, 0x25, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x14, 0x28, 0x29, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x01, 0x02, 0x07, 0x12, 0x03, 0x16, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, + 0x04, 0x12, 0x03, 0x16, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x06, 0x12, + 0x03, 0x16, 0x0b, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x01, 0x12, 0x03, 0x16, + 0x0f, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x03, 0x12, 0x03, 0x16, 0x16, 0x17, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x00, 0x12, 0x04, 0x18, 0x02, 0x1a, 0x03, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x03, 0x00, 0x01, 0x12, 0x03, 0x18, 0x0a, 0x20, 0x0a, 0x0d, 0x0a, 0x06, + 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x12, 0x03, 0x19, 0x04, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x19, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x19, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x19, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x01, 0x03, 0x01, 0x12, 0x03, 0x1c, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x01, + 0x01, 0x12, 0x03, 0x1c, 0x0a, 0x28, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x02, 0x12, 0x04, + 0x1e, 0x02, 0x21, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x02, 0x01, 0x12, 0x03, 0x1e, + 0x0a, 0x20, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x12, 0x03, 0x1f, 0x04, + 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1f, 0x04, + 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x0b, + 0x0f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x12, + 0x13, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x12, 0x03, 0x20, 0x04, 0x1f, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x20, 0x04, 0x0c, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x20, 0x0d, 0x13, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x20, 0x14, 0x1a, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x20, 0x1d, 0x1e, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x03, 0x12, 0x04, 0x23, 0x02, 0x25, 0x03, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x03, 0x03, 0x01, 0x12, 0x03, 0x23, 0x0a, 0x28, 0x0a, 0x0d, 0x0a, 0x06, + 0x04, 0x01, 0x03, 0x03, 0x02, 0x00, 0x12, 0x03, 0x24, 0x04, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x03, 0x02, 0x00, 0x04, 0x12, 0x03, 0x24, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x24, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x24, 0x14, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x24, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x01, 0x03, 0x04, 0x12, 0x04, 0x27, 0x02, 0x29, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, + 0x04, 0x01, 0x12, 0x03, 0x27, 0x0a, 0x22, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x04, 0x02, + 0x00, 0x12, 0x03, 0x28, 0x04, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, + 0x05, 0x12, 0x03, 0x28, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x28, 0x0b, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x04, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x28, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x05, 0x12, 0x04, + 0x35, 0x02, 0x38, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x05, 0x01, 0x12, 0x03, 0x35, + 0x0a, 0x22, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x12, 0x03, 0x36, 0x04, + 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x05, 0x12, 0x03, 0x36, 0x04, + 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x36, 0x0b, + 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x36, 0x18, + 0x19, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x05, 0x02, 0x01, 0x12, 0x03, 0x37, 0x04, 0x1a, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x01, 0x05, 0x12, 0x03, 0x37, 0x04, 0x0a, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x37, 0x0b, 0x15, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x37, 0x18, 0x19, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x06, 0x12, 0x04, 0x3a, 0x02, 0x42, 0x03, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x03, 0x06, 0x01, 0x12, 0x03, 0x3a, 0x0a, 0x23, 0x0a, 0x0d, 0x0a, 0x06, + 0x04, 0x01, 0x03, 0x06, 0x02, 0x00, 0x12, 0x03, 0x3b, 0x04, 0x1b, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3b, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3b, 0x0b, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3b, 0x19, 0x1a, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x01, 0x12, 0x03, 0x3c, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x3c, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3c, 0x0b, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3c, 0x17, 0x18, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x02, 0x12, 0x03, 0x3d, 0x04, 0x1d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, + 0x06, 0x02, 0x02, 0x05, 0x12, 0x03, 0x3d, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, + 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3d, 0x0b, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, + 0x06, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3d, 0x1b, 0x1c, 0x0a, 0x32, 0x0a, 0x06, 0x04, 0x01, 0x03, + 0x06, 0x02, 0x03, 0x12, 0x03, 0x3e, 0x04, 0x14, 0x22, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, + 0x20, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x03, 0x05, 0x12, 0x03, 0x3e, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x03, 0x01, 0x12, 0x03, 0x3e, 0x0b, 0x0f, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, 0x3e, 0x12, 0x13, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x01, 0x03, 0x06, 0x02, 0x04, 0x12, 0x03, 0x3f, 0x04, 0x18, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x01, 0x03, 0x06, 0x02, 0x04, 0x05, 0x12, 0x03, 0x3f, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x01, 0x03, 0x06, 0x02, 0x04, 0x01, 0x12, 0x03, 0x3f, 0x0b, 0x13, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x01, 0x03, 0x06, 0x02, 0x04, 0x03, 0x12, 0x03, 0x3f, 0x16, 0x17, 0x0a, 0x0d, 0x0a, 0x06, + 0x04, 0x01, 0x03, 0x06, 0x02, 0x05, 0x12, 0x03, 0x40, 0x04, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x05, 0x05, 0x12, 0x03, 0x40, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x05, 0x01, 0x12, 0x03, 0x40, 0x0b, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x05, 0x03, 0x12, 0x03, 0x40, 0x14, 0x15, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x01, 0x03, 0x06, 0x02, 0x06, 0x12, 0x03, 0x41, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x06, 0x05, 0x12, 0x03, 0x41, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x06, 0x01, 0x12, 0x03, 0x41, 0x0b, 0x14, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x03, 0x06, 0x02, 0x06, 0x03, 0x12, 0x03, 0x41, 0x17, 0x18, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, 0x0a, 0xe8, 0x04, 0x0a, 0x1b, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x22, 0x36, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9d, 0x01, 0x0a, + 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x3d, 0x0a, 0x05, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x50, 0x0a, 0x0a, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, 0x50, 0x01, + 0x4a, 0xd2, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0e, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, + 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, + 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, + 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x0a, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x0c, 0x0a, 0x57, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, 0x12, 0x1a, 0x4a, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x09, + 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x08, 0x10, 0x11, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x09, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x01, 0x12, 0x03, 0x09, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x09, 0x13, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0c, 0x00, + 0x0e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x12, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0d, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0d, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x0d, 0x14, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x0d, 0x1c, 0x1d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x8a, 0x03, + 0x0a, 0x1f, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x22, 0x3c, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6c, + 0x69, 0x6e, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, + 0x72, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x8a, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0a, 0x01, + 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, + 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, + 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x5d, 0x0a, 0x02, 0x04, 0x00, 0x12, + 0x04, 0x07, 0x00, 0x0a, 0x01, 0x1a, 0x51, 0x20, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, + 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, + 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, + 0x03, 0x07, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x08, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x05, 0x12, 0x03, 0x09, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x09, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x09, + 0x15, 0x16, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xbf, 0x50, 0x0a, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0xec, 0x05, + 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x51, 0x4c, 0x46, 0x69, + 0x6c, 0x65, 0x48, 0x00, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x36, 0x0a, 0x06, 0x75, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, + 0x74, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x4e, 0x75, + 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x48, 0x0a, + 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x4f, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x15, 0x67, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, 0x6f, 0x72, 0x5f, 0x65, 0x71, 0x75, 0x61, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, + 0x6c, 0x48, 0x00, 0x52, 0x12, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, + 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x54, 0x0a, 0x12, 0x6c, 0x65, 0x73, 0x73, 0x5f, + 0x74, 0x68, 0x61, 0x6e, 0x5f, 0x6f, 0x72, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x65, 0x73, 0x73, 0x54, - 0x68, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x12, - 0x59, 0x0a, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, - 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x55, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x65, - 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4a, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x53, - 0x51, 0x4c, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, - 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x22, 0x6c, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, - 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x8d, - 0x01, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, - 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8a, - 0x01, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x4f, - 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, + 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x65, + 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x46, 0x0a, + 0x0c, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x72, 0x54, 0x68, 0x61, 0x6e, 0x12, 0x3d, 0x0a, 0x09, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, + 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x65, 0x73, 0x73, + 0x54, 0x68, 0x61, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x42, + 0x0b, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4a, 0x0a, 0x0b, + 0x54, 0x65, 0x73, 0x74, 0x53, 0x51, 0x4c, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, + 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x0f, - 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x12, - 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x65, 0x73, - 0x73, 0x54, 0x68, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x10, 0x54, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, - 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x9c, - 0x01, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x78, 0x0a, - 0x15, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x61, 0x0a, 0x04, 0x53, 0x65, 0x65, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x22, 0xa9, 0x03, 0x0a, 0x05, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2d, 0x0a, 0x0f, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x07, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x52, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x59, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x03, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x6c, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x6f, 0x74, + 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x22, 0x8d, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x1b, + 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x65, 0x73, 0x73, + 0x54, 0x68, 0x61, 0x6e, 0x4f, 0x72, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, + 0x54, 0x68, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0c, 0x54, 0x65, + 0x73, 0x74, 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x81, 0x02, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x68, 0x69, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x23, + 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x22, 0x9c, 0x01, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x78, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x61, 0x0a, 0x04, + 0x53, 0x65, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x22, + 0xa9, 0x03, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x2d, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3c, + 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x59, 0x0a, 0x0a, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf1, 0x03, 0x0a, 0x08, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, @@ -1907,7 +1974,8 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x0f, - 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, + 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, @@ -1933,7 +2001,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x50, 0x01, - 0x4a, 0xb2, 0x31, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0xab, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, + 0x4a, 0x91, 0x34, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0xb0, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x70, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x08, 0x00, 0x15, @@ -2168,7 +2236,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x03, 0x66, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x02, 0x05, 0x12, 0x03, 0x66, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x02, 0x01, 0x12, 0x03, 0x66, 0x09, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x02, 0x03, 0x12, 0x03, 0x66, 0x1c, 0x1d, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x0c, 0x12, 0x04, 0x69, 0x00, 0x7d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0c, + 0x0a, 0x02, 0x04, 0x0c, 0x12, 0x04, 0x69, 0x00, 0x7e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0c, 0x01, 0x12, 0x03, 0x69, 0x08, 0x0d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, 0x03, 0x6a, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x05, 0x12, 0x03, 0x6a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6a, 0x09, 0x0d, 0x0a, @@ -2177,858 +2245,880 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x02, 0x01, 0x04, 0x12, 0x03, 0x6b, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x05, 0x12, 0x03, 0x6b, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x01, 0x12, 0x03, 0x6b, 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x03, 0x12, 0x03, 0x6b, - 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x02, 0x12, 0x03, 0x6c, 0x02, 0x1b, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x02, 0x04, 0x12, 0x03, 0x6c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x02, 0x05, 0x12, 0x03, 0x6c, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x0c, 0x02, 0x02, 0x01, 0x12, 0x03, 0x6c, 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x6c, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x03, 0x12, - 0x03, 0x6e, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x05, 0x12, 0x03, 0x6e, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x01, 0x12, 0x03, 0x6e, 0x09, 0x12, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x03, 0x12, 0x03, 0x6e, 0x15, 0x16, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x04, 0x12, 0x03, 0x6f, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x0c, 0x02, 0x04, 0x05, 0x12, 0x03, 0x6f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, - 0x04, 0x01, 0x12, 0x03, 0x6f, 0x09, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x04, 0x03, - 0x12, 0x03, 0x6f, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x05, 0x12, 0x03, 0x71, - 0x02, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x04, 0x12, 0x03, 0x71, 0x02, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x05, 0x12, 0x03, 0x71, 0x0b, 0x11, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x01, 0x12, 0x03, 0x71, 0x12, 0x21, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x0c, 0x02, 0x05, 0x03, 0x12, 0x03, 0x71, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0c, - 0x03, 0x00, 0x12, 0x04, 0x73, 0x02, 0x76, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x03, 0x00, - 0x01, 0x12, 0x03, 0x73, 0x0a, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x00, - 0x12, 0x03, 0x74, 0x04, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x00, 0x05, - 0x12, 0x03, 0x74, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x74, 0x0b, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x74, 0x13, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x01, 0x12, - 0x03, 0x75, 0x04, 0x24, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x01, 0x04, 0x12, - 0x03, 0x75, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x01, 0x05, 0x12, - 0x03, 0x75, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x75, 0x14, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x75, 0x22, 0x23, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x06, 0x12, 0x03, 0x78, 0x02, - 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x04, 0x12, 0x03, 0x78, 0x02, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x06, 0x12, 0x03, 0x78, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x06, 0x01, 0x12, 0x03, 0x78, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x0c, 0x02, 0x06, 0x03, 0x12, 0x03, 0x78, 0x20, 0x21, 0x0a, 0x87, 0x01, 0x0a, 0x04, 0x04, 0x0c, - 0x02, 0x07, 0x12, 0x03, 0x7c, 0x02, 0x21, 0x1a, 0x7a, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x73, 0x65, 0x65, 0x64, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x0a, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x79, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x04, 0x12, 0x03, 0x7c, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x05, 0x12, 0x03, 0x7c, 0x0b, 0x11, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x01, 0x12, 0x03, 0x7c, 0x12, 0x1c, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x07, 0x03, 0x12, 0x03, 0x7c, 0x1f, 0x20, 0x0a, 0x0b, 0x0a, 0x02, 0x04, - 0x0d, 0x12, 0x05, 0x7f, 0x00, 0x93, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0d, 0x01, 0x12, - 0x03, 0x7f, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, 0x12, 0x04, 0x80, 0x01, - 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x05, 0x12, 0x04, 0x80, 0x01, 0x02, - 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x80, 0x01, 0x09, 0x0d, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x80, 0x01, 0x10, 0x11, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0x82, 0x01, 0x02, 0x17, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0d, 0x02, 0x01, 0x05, 0x12, 0x04, 0x82, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, 0x82, 0x01, 0x09, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0x82, 0x01, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, - 0x02, 0x02, 0x12, 0x04, 0x83, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, - 0x05, 0x12, 0x04, 0x83, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x01, - 0x12, 0x04, 0x83, 0x01, 0x09, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x03, 0x12, - 0x04, 0x83, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x03, 0x12, 0x04, 0x85, - 0x01, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x05, 0x12, 0x04, 0x85, 0x01, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x01, 0x12, 0x04, 0x85, 0x01, 0x09, - 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x03, 0x12, 0x04, 0x85, 0x01, 0x16, 0x17, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x04, 0x12, 0x04, 0x86, 0x01, 0x02, 0x20, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x06, 0x12, 0x04, 0x86, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0d, 0x02, 0x04, 0x01, 0x12, 0x04, 0x86, 0x01, 0x13, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0d, 0x02, 0x04, 0x03, 0x12, 0x04, 0x86, 0x01, 0x1e, 0x1f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, - 0x0d, 0x03, 0x00, 0x12, 0x06, 0x87, 0x01, 0x02, 0x8e, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0d, 0x03, 0x00, 0x01, 0x12, 0x04, 0x87, 0x01, 0x0a, 0x1a, 0x0a, 0x10, 0x0a, 0x06, 0x04, 0x0d, - 0x03, 0x00, 0x08, 0x00, 0x12, 0x06, 0x88, 0x01, 0x04, 0x8a, 0x01, 0x05, 0x0a, 0x0f, 0x0a, 0x07, - 0x04, 0x0d, 0x03, 0x00, 0x08, 0x00, 0x01, 0x12, 0x04, 0x88, 0x01, 0x0a, 0x17, 0x0a, 0x0e, 0x0a, - 0x06, 0x04, 0x0d, 0x03, 0x00, 0x02, 0x00, 0x12, 0x04, 0x89, 0x01, 0x06, 0x26, 0x0a, 0x0f, 0x0a, - 0x07, 0x04, 0x0d, 0x03, 0x00, 0x02, 0x00, 0x06, 0x12, 0x04, 0x89, 0x01, 0x06, 0x17, 0x0a, 0x0f, - 0x0a, 0x07, 0x04, 0x0d, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x89, 0x01, 0x18, 0x21, 0x0a, - 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0x89, 0x01, 0x24, 0x25, - 0x0a, 0x10, 0x0a, 0x06, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x12, 0x06, 0x8b, 0x01, 0x04, 0x8d, - 0x01, 0x05, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x01, 0x12, 0x04, 0x8b, - 0x01, 0x0c, 0x1d, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x12, - 0x04, 0x8c, 0x01, 0x06, 0x1c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, - 0x00, 0x05, 0x12, 0x04, 0x8c, 0x01, 0x06, 0x0c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0d, 0x03, 0x00, - 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8c, 0x01, 0x0d, 0x17, 0x0a, 0x11, 0x0a, 0x09, 0x04, - 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8c, 0x01, 0x1a, 0x1b, 0x0a, 0x82, - 0x01, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x05, 0x12, 0x04, 0x92, 0x01, 0x02, 0x21, 0x1a, 0x74, 0x20, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x73, 0x65, 0x65, 0x64, 0x73, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, - 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x0a, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x04, 0x12, 0x04, 0x92, 0x01, - 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x05, 0x12, 0x04, 0x92, 0x01, 0x0b, - 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x01, 0x12, 0x04, 0x92, 0x01, 0x12, 0x1c, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x03, 0x12, 0x04, 0x92, 0x01, 0x1f, 0x20, 0x0a, - 0x67, 0x0a, 0x02, 0x04, 0x0e, 0x12, 0x06, 0x96, 0x01, 0x00, 0x9a, 0x01, 0x01, 0x1a, 0x59, 0x20, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2d, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0e, 0x01, 0x12, - 0x04, 0x96, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x00, 0x12, 0x04, 0x97, - 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x05, 0x12, 0x04, 0x97, 0x01, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x01, 0x12, 0x04, 0x97, 0x01, 0x09, - 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x03, 0x12, 0x04, 0x97, 0x01, 0x10, 0x11, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x01, 0x12, 0x04, 0x98, 0x01, 0x02, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x05, 0x12, 0x04, 0x98, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0e, 0x02, 0x01, 0x01, 0x12, 0x04, 0x98, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0e, 0x02, 0x01, 0x03, 0x12, 0x04, 0x98, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x0e, 0x02, 0x02, 0x12, 0x04, 0x99, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, - 0x02, 0x04, 0x12, 0x04, 0x99, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, - 0x05, 0x12, 0x04, 0x99, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, - 0x12, 0x04, 0x99, 0x01, 0x12, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, - 0x04, 0x99, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x0f, 0x12, 0x06, 0x9c, 0x01, 0x00, - 0xab, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0f, 0x01, 0x12, 0x04, 0x9c, 0x01, 0x08, 0x0e, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x00, 0x12, 0x04, 0x9d, 0x01, 0x02, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x05, 0x12, 0x04, 0x9d, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0f, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9d, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0f, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9d, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x0f, 0x02, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, - 0x01, 0x04, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, - 0x05, 0x12, 0x04, 0x9e, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x01, - 0x12, 0x04, 0x9e, 0x01, 0x12, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x03, 0x12, - 0x04, 0x9e, 0x01, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x02, 0x12, 0x04, 0x9f, - 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, 0x05, 0x12, 0x04, 0x9f, 0x01, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, 0x01, 0x12, 0x04, 0x9f, 0x01, 0x09, - 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, 0x03, 0x12, 0x04, 0x9f, 0x01, 0x10, 0x11, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x03, 0x12, 0x04, 0xa0, 0x01, 0x02, 0x1b, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa0, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0f, 0x02, 0x03, 0x05, 0x12, 0x04, 0xa0, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0f, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa0, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0f, 0x02, 0x03, 0x03, 0x12, 0x04, 0xa0, 0x01, 0x19, 0x1a, 0x0a, 0x4c, 0x0a, 0x04, 0x04, 0x0f, - 0x02, 0x04, 0x12, 0x04, 0xa3, 0x01, 0x02, 0x17, 0x1a, 0x3e, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x74, - 0x68, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, - 0x05, 0x12, 0x04, 0xa3, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, 0x01, - 0x12, 0x04, 0xa3, 0x01, 0x09, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, 0x03, 0x12, - 0x04, 0xa3, 0x01, 0x15, 0x16, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0f, 0x03, 0x00, 0x12, 0x06, 0xa5, - 0x01, 0x02, 0xa8, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x03, 0x00, 0x01, 0x12, 0x04, - 0xa5, 0x01, 0x0a, 0x16, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x12, 0x04, - 0xa6, 0x01, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, - 0x04, 0xa6, 0x01, 0x04, 0x0a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x01, - 0x12, 0x04, 0xa6, 0x01, 0x0b, 0x10, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, - 0x03, 0x12, 0x04, 0xa6, 0x01, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0f, 0x03, 0x00, 0x02, - 0x01, 0x12, 0x04, 0xa7, 0x01, 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, - 0x01, 0x04, 0x12, 0x04, 0xa7, 0x01, 0x04, 0x0c, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, - 0x02, 0x01, 0x05, 0x12, 0x04, 0xa7, 0x01, 0x0d, 0x13, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa7, 0x01, 0x14, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, - 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa7, 0x01, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x0f, 0x02, 0x05, 0x12, 0x04, 0xaa, 0x01, 0x02, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, - 0x05, 0x04, 0x12, 0x04, 0xaa, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, - 0x06, 0x12, 0x04, 0xaa, 0x01, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, 0x01, - 0x12, 0x04, 0xaa, 0x01, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, 0x03, 0x12, - 0x04, 0xaa, 0x01, 0x22, 0x23, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x91, 0x0d, - 0x0a, 0x1e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x1a, 0x28, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xf5, 0x07, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x73, - 0x65, 0x65, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x65, 0x65, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x05, 0x73, 0x65, 0x65, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x74, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4f, - 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x50, 0x0a, 0x0a, 0x53, 0x65, 0x65, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x52, 0x0a, 0x0b, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x50, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, - 0x0e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x20, 0x21, 0x0a, 0x4e, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x02, 0x12, 0x03, 0x6d, 0x02, 0x1b, 0x1a, + 0x41, 0x20, 0x54, 0x61, 0x67, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x02, 0x04, 0x12, 0x03, 0x6d, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x02, 0x05, 0x12, 0x03, 0x6d, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x02, 0x01, 0x12, 0x03, 0x6d, 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x0c, 0x02, 0x02, 0x03, 0x12, 0x03, 0x6d, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, + 0x02, 0x03, 0x12, 0x03, 0x6f, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x05, + 0x12, 0x03, 0x6f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x01, 0x12, 0x03, + 0x6f, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x03, 0x03, 0x12, 0x03, 0x6f, 0x15, + 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x04, 0x12, 0x03, 0x70, 0x02, 0x1e, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x04, 0x05, 0x12, 0x03, 0x70, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x0c, 0x02, 0x04, 0x01, 0x12, 0x03, 0x70, 0x09, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, + 0x02, 0x04, 0x03, 0x12, 0x03, 0x70, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x05, + 0x12, 0x03, 0x72, 0x02, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x04, 0x12, 0x03, + 0x72, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x05, 0x12, 0x03, 0x72, 0x0b, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x01, 0x12, 0x03, 0x72, 0x12, 0x21, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x05, 0x03, 0x12, 0x03, 0x72, 0x24, 0x25, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x0c, 0x03, 0x00, 0x12, 0x04, 0x74, 0x02, 0x77, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x0c, 0x03, 0x00, 0x01, 0x12, 0x03, 0x74, 0x0a, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0c, 0x03, + 0x00, 0x02, 0x00, 0x12, 0x03, 0x75, 0x04, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x75, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x75, 0x0b, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x75, 0x13, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0c, 0x03, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x76, 0x04, 0x24, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, + 0x01, 0x04, 0x12, 0x03, 0x76, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x76, 0x0d, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x76, 0x14, 0x1f, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0c, 0x03, 0x00, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x76, 0x22, 0x23, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x06, 0x12, + 0x03, 0x79, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x04, 0x12, 0x03, 0x79, + 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x06, 0x12, 0x03, 0x79, 0x0b, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x01, 0x12, 0x03, 0x79, 0x16, 0x1d, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x06, 0x03, 0x12, 0x03, 0x79, 0x20, 0x21, 0x0a, 0x87, 0x01, 0x0a, + 0x04, 0x04, 0x0c, 0x02, 0x07, 0x12, 0x03, 0x7d, 0x02, 0x21, 0x1a, 0x7a, 0x20, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x73, 0x65, 0x65, 0x64, 0x73, 0x2f, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x6e, + 0x69, 0x71, 0x75, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, + 0x61, 0x6c, 0x6c, 0x79, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x04, 0x12, + 0x03, 0x7d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x05, 0x12, 0x03, 0x7d, + 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x01, 0x12, 0x03, 0x7d, 0x12, 0x1c, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x07, 0x03, 0x12, 0x03, 0x7d, 0x1f, 0x20, 0x0a, 0x0c, + 0x0a, 0x02, 0x04, 0x0d, 0x12, 0x06, 0x80, 0x01, 0x00, 0x97, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x0d, 0x01, 0x12, 0x04, 0x80, 0x01, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, + 0x00, 0x12, 0x04, 0x81, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x05, + 0x12, 0x04, 0x81, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, + 0x04, 0x81, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, + 0x81, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0x82, 0x01, + 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x04, 0x12, 0x04, 0x82, 0x01, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x05, 0x12, 0x04, 0x82, 0x01, 0x0b, 0x11, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, 0x82, 0x01, 0x12, 0x1d, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0x82, 0x01, 0x20, 0x21, 0x0a, 0x4f, + 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x02, 0x12, 0x04, 0x84, 0x01, 0x02, 0x1b, 0x1a, 0x41, 0x20, 0x54, + 0x61, 0x67, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x04, 0x12, 0x04, 0x84, 0x01, 0x02, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x05, 0x12, 0x04, 0x84, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0d, 0x02, 0x02, 0x01, 0x12, 0x04, 0x84, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0d, 0x02, 0x02, 0x03, 0x12, 0x04, 0x84, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x0d, 0x02, 0x03, 0x12, 0x04, 0x86, 0x01, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, + 0x03, 0x05, 0x12, 0x04, 0x86, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, + 0x01, 0x12, 0x04, 0x86, 0x01, 0x09, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x03, + 0x12, 0x04, 0x86, 0x01, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x04, 0x12, 0x04, + 0x87, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x05, 0x12, 0x04, 0x87, + 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x01, 0x12, 0x04, 0x87, 0x01, + 0x09, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x03, 0x12, 0x04, 0x87, 0x01, 0x1c, + 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x05, 0x12, 0x04, 0x89, 0x01, 0x02, 0x18, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x05, 0x12, 0x04, 0x89, 0x01, 0x02, 0x08, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x01, 0x12, 0x04, 0x89, 0x01, 0x09, 0x13, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0d, 0x02, 0x05, 0x03, 0x12, 0x04, 0x89, 0x01, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x0d, 0x02, 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, + 0x02, 0x06, 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, + 0x06, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x13, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, + 0x03, 0x12, 0x04, 0x8a, 0x01, 0x1e, 0x1f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0d, 0x03, 0x00, 0x12, + 0x06, 0x8b, 0x01, 0x02, 0x92, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x03, 0x00, 0x01, + 0x12, 0x04, 0x8b, 0x01, 0x0a, 0x1a, 0x0a, 0x10, 0x0a, 0x06, 0x04, 0x0d, 0x03, 0x00, 0x08, 0x00, + 0x12, 0x06, 0x8c, 0x01, 0x04, 0x8e, 0x01, 0x05, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x03, 0x00, + 0x08, 0x00, 0x01, 0x12, 0x04, 0x8c, 0x01, 0x0a, 0x17, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x03, + 0x00, 0x02, 0x00, 0x12, 0x04, 0x8d, 0x01, 0x06, 0x26, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x03, + 0x00, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8d, 0x01, 0x06, 0x17, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, + 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8d, 0x01, 0x18, 0x21, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x0d, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8d, 0x01, 0x24, 0x25, 0x0a, 0x10, 0x0a, 0x06, + 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x12, 0x06, 0x8f, 0x01, 0x04, 0x91, 0x01, 0x05, 0x0a, 0x0f, + 0x0a, 0x07, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x0c, 0x1d, 0x0a, + 0x10, 0x0a, 0x08, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x12, 0x04, 0x90, 0x01, 0x06, + 0x1c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, 0x04, + 0x90, 0x01, 0x06, 0x0c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0d, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x01, 0x12, 0x04, 0x90, 0x01, 0x0d, 0x17, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0d, 0x03, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0x90, 0x01, 0x1a, 0x1b, 0x0a, 0x82, 0x01, 0x0a, 0x04, 0x04, + 0x0d, 0x02, 0x07, 0x12, 0x04, 0x96, 0x01, 0x02, 0x21, 0x1a, 0x74, 0x20, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x73, 0x65, 0x65, 0x64, 0x73, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x65, + 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x6b, 0x65, + 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2e, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x07, 0x04, 0x12, 0x04, 0x96, 0x01, 0x02, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x07, 0x05, 0x12, 0x04, 0x96, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0d, 0x02, 0x07, 0x01, 0x12, 0x04, 0x96, 0x01, 0x12, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0d, 0x02, 0x07, 0x03, 0x12, 0x04, 0x96, 0x01, 0x1f, 0x20, 0x0a, 0x67, 0x0a, 0x02, 0x04, + 0x0e, 0x12, 0x06, 0x9a, 0x01, 0x00, 0x9e, 0x01, 0x01, 0x1a, 0x59, 0x20, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0e, 0x01, 0x12, 0x04, 0x9a, 0x01, 0x08, + 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x00, 0x12, 0x04, 0x9b, 0x01, 0x02, 0x12, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x05, 0x12, 0x04, 0x9b, 0x01, 0x02, 0x08, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9b, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0e, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9b, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x0e, 0x02, 0x01, 0x12, 0x04, 0x9c, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, + 0x02, 0x01, 0x05, 0x12, 0x04, 0x9c, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, + 0x01, 0x01, 0x12, 0x04, 0x9c, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, + 0x03, 0x12, 0x04, 0x9c, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x02, 0x12, + 0x04, 0x9d, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x04, 0x12, 0x04, + 0x9d, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x05, 0x12, 0x04, 0x9d, + 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, 0x12, 0x04, 0x9d, 0x01, + 0x12, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, 0x04, 0x9d, 0x01, 0x1c, + 0x1d, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x0f, 0x12, 0x06, 0xa0, 0x01, 0x00, 0xb0, 0x01, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x0f, 0x01, 0x12, 0x04, 0xa0, 0x01, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x0f, 0x02, 0x00, 0x12, 0x04, 0xa1, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, + 0x02, 0x00, 0x05, 0x12, 0x04, 0xa1, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, + 0x00, 0x01, 0x12, 0x04, 0xa1, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, + 0x03, 0x12, 0x04, 0xa1, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x01, 0x12, + 0x04, 0xa2, 0x01, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x04, 0x12, 0x04, + 0xa2, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x05, 0x12, 0x04, 0xa2, + 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa2, 0x01, + 0x12, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa2, 0x01, 0x20, + 0x21, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x02, 0x12, 0x04, 0xa3, 0x01, 0x02, 0x12, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, 0x05, 0x12, 0x04, 0xa3, 0x01, 0x02, 0x08, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, 0x01, 0x12, 0x04, 0xa3, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0f, 0x02, 0x02, 0x03, 0x12, 0x04, 0xa3, 0x01, 0x10, 0x11, 0x0a, 0x4f, 0x0a, 0x04, + 0x04, 0x0f, 0x02, 0x03, 0x12, 0x04, 0xa5, 0x01, 0x02, 0x1b, 0x1a, 0x41, 0x20, 0x54, 0x61, 0x67, + 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, + 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0f, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa5, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0f, 0x02, 0x03, 0x05, 0x12, 0x04, 0xa5, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0f, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa5, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, + 0x02, 0x03, 0x03, 0x12, 0x04, 0xa5, 0x01, 0x19, 0x1a, 0x0a, 0x4c, 0x0a, 0x04, 0x04, 0x0f, 0x02, + 0x04, 0x12, 0x04, 0xa8, 0x01, 0x02, 0x17, 0x1a, 0x3e, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, + 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, 0x05, + 0x12, 0x04, 0xa8, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, 0x01, 0x12, + 0x04, 0xa8, 0x01, 0x09, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x04, 0x03, 0x12, 0x04, + 0xa8, 0x01, 0x15, 0x16, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0f, 0x03, 0x00, 0x12, 0x06, 0xaa, 0x01, + 0x02, 0xad, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x03, 0x00, 0x01, 0x12, 0x04, 0xaa, + 0x01, 0x0a, 0x16, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x12, 0x04, 0xab, + 0x01, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, 0x04, + 0xab, 0x01, 0x04, 0x0a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, + 0x04, 0xab, 0x01, 0x0b, 0x10, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x00, 0x03, + 0x12, 0x04, 0xab, 0x01, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x01, + 0x12, 0x04, 0xac, 0x01, 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, 0x01, + 0x04, 0x12, 0x04, 0xac, 0x01, 0x04, 0x0c, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, 0x02, + 0x01, 0x05, 0x12, 0x04, 0xac, 0x01, 0x0d, 0x13, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, 0x00, + 0x02, 0x01, 0x01, 0x12, 0x04, 0xac, 0x01, 0x14, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0f, 0x03, + 0x00, 0x02, 0x01, 0x03, 0x12, 0x04, 0xac, 0x01, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, + 0x02, 0x05, 0x12, 0x04, 0xaf, 0x01, 0x02, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, + 0x04, 0x12, 0x04, 0xaf, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, 0x06, + 0x12, 0x04, 0xaf, 0x01, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, 0x01, 0x12, + 0x04, 0xaf, 0x01, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x05, 0x03, 0x12, 0x04, + 0xaf, 0x01, 0x22, 0x23, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x91, 0x0d, 0x0a, + 0x1e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x1a, 0x28, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, + 0x07, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x65, + 0x65, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x65, 0x65, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x05, 0x73, 0x65, 0x65, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, + 0x73, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0d, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4f, 0x0a, + 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x50, + 0x0a, 0x0a, 0x53, 0x65, 0x65, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x52, 0x0a, 0x0b, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x50, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xeb, 0x03, 0x0a, 0x06, 0x12, + 0x04, 0x00, 0x00, 0x12, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, + 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, + 0x03, 0x04, 0x00, 0x32, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, + 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, + 0x03, 0x08, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, + 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x12, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, + 0x03, 0x0b, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0b, + 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x14, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x1c, 0x1d, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0c, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x0c, 0x15, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x0c, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0d, + 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x0d, 0x02, 0x13, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0d, 0x14, 0x19, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0d, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x0e, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x03, 0x06, 0x12, 0x03, 0x0e, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, + 0x12, 0x03, 0x0e, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, + 0x0e, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x0f, 0x02, 0x26, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x17, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x0f, 0x18, 0x21, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x0f, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x05, 0x12, 0x03, 0x10, 0x02, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x06, + 0x12, 0x03, 0x10, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, + 0x10, 0x1b, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x10, 0x2b, + 0x2c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, 0x11, 0x02, 0x29, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x11, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x11, 0x13, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x06, 0x03, 0x12, 0x03, 0x11, 0x27, 0x28, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0xee, 0x06, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x61, + 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x68, 0x0a, 0x0a, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x44, 0x61, 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, + 0x67, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, + 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x72, 0x6f, 0x6d, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xde, 0x04, 0x0a, 0x06, 0x12, 0x04, 0x00, + 0x00, 0x15, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, + 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, + 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x88, 0x01, 0x0a, + 0x02, 0x04, 0x00, 0x12, 0x04, 0x08, 0x00, 0x0b, 0x01, 0x1a, 0x7c, 0x20, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x41, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x20, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, + 0x64, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, + 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x0a, 0x20, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x08, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x02, 0x1a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x09, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x09, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x09, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, + 0x12, 0x03, 0x0a, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, + 0x0a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0a, 0x0b, + 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0a, 0x10, 0x15, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0a, 0x18, 0x19, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x01, 0x12, 0x04, 0x0d, 0x00, 0x10, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, + 0x12, 0x03, 0x0d, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, + 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0e, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x09, 0x0b, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x0f, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x0f, 0x07, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x0f, 0x13, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x12, 0x00, 0x15, 0x01, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x12, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x02, 0x02, 0x00, 0x12, 0x03, 0x13, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, + 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x13, 0x09, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x13, + 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x14, 0x02, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x14, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x14, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x14, 0x10, 0x11, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, 0x0a, 0xbf, 0x03, 0x0a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x67, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x30, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xeb, 0x03, 0x0a, 0x06, - 0x12, 0x04, 0x00, 0x00, 0x12, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, - 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, - 0x12, 0x03, 0x04, 0x00, 0x32, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x08, 0x00, 0x22, - 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x12, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, - 0x12, 0x03, 0x0b, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, - 0x0b, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x14, - 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x1c, 0x1d, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0c, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x15, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, - 0x03, 0x12, 0x03, 0x0c, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, - 0x0d, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x0d, 0x02, - 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0d, 0x14, 0x19, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0d, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x0e, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x03, 0x06, 0x12, 0x03, 0x0e, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x03, 0x0e, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, - 0x03, 0x0e, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x0f, 0x02, - 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x17, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x0f, 0x18, 0x21, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x0f, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x00, 0x02, 0x05, 0x12, 0x03, 0x10, 0x02, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, - 0x06, 0x12, 0x03, 0x10, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, - 0x03, 0x10, 0x1b, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x10, - 0x2b, 0x2c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, 0x11, 0x02, 0x29, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x11, 0x02, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x11, 0x13, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x11, 0x27, 0x28, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x0a, 0xee, 0x06, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x64, - 0x61, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x68, 0x0a, 0x0a, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x61, 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, - 0x64, 0x67, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x45, 0x64, 0x67, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xde, 0x04, 0x0a, 0x06, 0x12, 0x04, - 0x00, 0x00, 0x15, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, - 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, - 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x88, 0x01, - 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x08, 0x00, 0x0b, 0x01, 0x1a, 0x7c, 0x20, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x20, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x0a, 0x20, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, - 0x03, 0x08, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x02, - 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x09, 0x02, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x09, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x09, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, - 0x01, 0x12, 0x03, 0x0a, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, - 0x03, 0x0a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0a, - 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0a, 0x10, 0x15, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0a, 0x18, 0x19, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0d, 0x00, 0x10, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, - 0x01, 0x12, 0x03, 0x0d, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, - 0x0e, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0e, 0x02, - 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x09, 0x0b, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x0f, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x0f, 0x07, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x0f, 0x13, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x12, 0x00, 0x15, 0x01, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x12, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x13, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x00, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x13, 0x09, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x13, 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x14, 0x02, 0x12, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x14, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x14, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x14, 0x10, 0x11, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, 0x0a, 0xbf, 0x03, 0x0a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x67, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x42, 0x02, + 0x50, 0x01, 0x4a, 0xf6, 0x01, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, 0x0a, 0x08, 0x0a, + 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, + 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x29, 0x0a, 0x08, 0x0a, 0x01, + 0x08, 0x12, 0x03, 0x06, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x06, 0x00, + 0x22, 0x0a, 0x3e, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x09, 0x00, 0x0c, 0x01, 0x1a, 0x32, 0x20, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, + 0x20, 0x61, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x09, 0x08, 0x0d, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x0a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x0a, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x0a, 0x13, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0b, 0x02, + 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0b, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x0b, 0x0e, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0b, 0x11, 0x12, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x0a, 0xc8, 0x23, 0x0a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x05, 0x0a, 0x05, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x5f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x50, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x1a, 0x9e, 0x03, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, + 0x77, 0x73, 0x1a, 0xc2, 0x02, 0x0a, 0x0a, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x52, 0x6f, + 0x77, 0x12, 0x5b, 0x0a, 0x1e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, + 0x73, 0x71, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, + 0x48, 0x00, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x71, 0x6c, + 0x41, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4d, + 0x0a, 0x16, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x42, - 0x02, 0x50, 0x01, 0x4a, 0xf6, 0x01, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, 0x0a, 0x08, - 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, - 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x29, 0x0a, 0x08, 0x0a, - 0x01, 0x08, 0x12, 0x03, 0x06, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x06, - 0x00, 0x22, 0x0a, 0x3e, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x09, 0x00, 0x0c, 0x01, 0x1a, 0x32, - 0x20, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, - 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x09, 0x08, 0x0d, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x0a, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x0a, 0x13, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0b, - 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0b, 0x02, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x0b, 0x0e, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0b, 0x11, 0x12, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xc8, 0x23, 0x0a, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, + 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x49, 0x6e, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x80, 0x01, + 0x0a, 0x32, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x62, 0x75, 0x74, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, + 0x5f, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, + 0x77, 0x48, 0x00, 0x52, 0x2b, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x75, 0x74, 0x4e, 0x6f, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x53, 0x71, 0x6c, + 0x42, 0x05, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x1a, 0x3f, 0x0a, 0x12, 0x4e, 0x6f, 0x74, 0x50, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x29, 0x0a, + 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, + 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x52, 0x05, + 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, + 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa1, 0x02, 0x0a, 0x07, 0x52, 0x6f, + 0x77, 0x54, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x18, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, 0x65, + 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x12, 0x54, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x6e, + 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x12, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x64, + 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x5f, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, + 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, + 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, + 0x6e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x74, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, + 0x0e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x65, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x65, + 0x73, 0x74, 0x22, 0xac, 0x03, 0x0a, 0x0e, 0x52, 0x6f, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x74, 0x12, 0x45, 0x0a, 0x1e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x6e, 0x64, + 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1b, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x80, 0x01, 0x0a, 0x20, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x74, + 0x68, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x69, + 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, + 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x50, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x1a, 0x4c, 0x0a, 0x14, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x57, + 0x69, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xee, 0x15, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x4d, 0x01, + 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, + 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, + 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, + 0x03, 0x07, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, + 0x70, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x23, 0x01, 0x1a, 0x64, 0x20, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, + 0x73, 0x75, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2c, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x0d, 0x0a, 0x93, 0x01, + 0x0a, 0x04, 0x04, 0x00, 0x03, 0x00, 0x12, 0x04, 0x0d, 0x02, 0x17, 0x03, 0x1a, 0x84, 0x01, 0x20, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, + 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, + 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x59, 0x41, 0x4d, + 0x4c, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x0a, + 0x19, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x12, 0x04, 0x0e, 0x04, 0x14, + 0x05, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x0c, + 0x16, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x08, 0x00, 0x12, 0x04, 0x0f, + 0x06, 0x13, 0x07, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x08, 0x00, 0x01, + 0x12, 0x03, 0x0f, 0x0c, 0x0f, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x12, 0x03, 0x10, 0x08, 0x2f, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x10, 0x08, 0x0b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x10, 0x0c, 0x2a, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x10, 0x2d, 0x2e, 0x0a, 0x0f, 0x0a, 0x08, + 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x12, 0x03, 0x11, 0x08, 0x27, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x11, 0x08, 0x0b, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x11, 0x0c, + 0x22, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x11, 0x25, 0x26, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x02, 0x12, + 0x03, 0x12, 0x08, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x02, + 0x06, 0x12, 0x03, 0x12, 0x08, 0x0b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x12, 0x0c, 0x3e, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x12, 0x41, 0x42, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x12, 0x03, 0x16, 0x04, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x16, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x16, 0x0d, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, 0x18, 0x1c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x1f, 0x20, 0x0a, 0x8a, 0x01, 0x0a, 0x04, 0x04, 0x00, + 0x03, 0x01, 0x12, 0x04, 0x1b, 0x02, 0x1d, 0x03, 0x1a, 0x7c, 0x20, 0x4e, 0x6f, 0x74, 0x50, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, 0x73, + 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x73, 0x20, 0x53, 0x51, 0x4c, 0x20, + 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, + 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x20, 0x41, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x01, 0x01, 0x12, + 0x03, 0x1b, 0x0a, 0x1c, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x12, 0x03, + 0x1c, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x04, 0x12, 0x03, + 0x1c, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, + 0x1c, 0x0d, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x1c, 0x11, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x1c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x1f, 0x02, 0x22, + 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x08, 0x12, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x20, 0x04, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x20, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x20, 0x14, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x20, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, + 0x21, 0x04, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x21, 0x04, + 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x21, 0x17, 0x22, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x21, 0x25, 0x26, 0x0a, 0x28, 0x0a, + 0x02, 0x04, 0x01, 0x12, 0x04, 0x26, 0x00, 0x2a, 0x01, 0x1a, 0x1c, 0x20, 0x52, 0x6f, 0x77, 0x20, + 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, + 0x26, 0x08, 0x0b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x27, 0x02, 0x13, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x27, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x27, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x27, 0x11, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x01, 0x12, 0x03, 0x28, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x04, + 0x12, 0x03, 0x28, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, + 0x28, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x28, 0x13, + 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x28, 0x1b, 0x1c, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x29, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x29, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x29, 0x11, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x29, 0x1f, 0x20, 0x0a, 0xbd, 0x01, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x2e, + 0x00, 0x34, 0x01, 0x1a, 0xb0, 0x01, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, + 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x20, 0x61, + 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, + 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x20, 0x62, + 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, + 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, + 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x69, + 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x2e, + 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x08, 0x00, 0x12, 0x04, 0x2f, 0x02, 0x33, 0x03, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x08, 0x00, 0x01, 0x12, 0x03, 0x2f, 0x08, 0x0c, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x30, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x30, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x30, 0x13, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x30, 0x2e, 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x31, + 0x04, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x31, 0x04, 0x12, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x31, 0x13, 0x27, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x31, 0x2a, 0x2b, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x32, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x02, 0x06, 0x12, 0x03, 0x32, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x32, 0x13, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x32, 0x2e, 0x2f, 0x0a, 0x9c, 0x02, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x39, 0x00, 0x3c, 0x01, + 0x1a, 0x8f, 0x02, 0x20, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x65, 0x73, 0x74, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x27, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x27, 0x20, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, + 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, + 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x79, 0x70, + 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x20, 0x74, + 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x39, 0x08, 0x16, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x3a, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x3a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x3a, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x3b, + 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3b, 0x02, 0x0c, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3b, 0x0d, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3b, 0x1b, 0x1c, 0x0a, 0xc2, 0x01, 0x0a, + 0x02, 0x04, 0x04, 0x12, 0x04, 0x40, 0x00, 0x4d, 0x01, 0x1a, 0xb5, 0x01, 0x20, 0x52, 0x6f, 0x77, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x20, + 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x69, + 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, + 0x0a, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, + 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x40, 0x08, 0x16, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x04, 0x03, 0x00, 0x12, 0x04, 0x41, 0x02, 0x44, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x03, 0x00, 0x01, 0x12, 0x03, 0x41, 0x0a, 0x1e, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x04, 0x03, + 0x00, 0x02, 0x00, 0x12, 0x03, 0x42, 0x04, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x42, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x42, 0x0b, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x42, 0x15, 0x16, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x04, 0x03, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x43, 0x04, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x43, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x43, 0x0b, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x43, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x04, 0x08, 0x00, 0x12, + 0x04, 0x46, 0x02, 0x4c, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x08, 0x00, 0x01, 0x12, 0x03, + 0x46, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x47, 0x04, 0x17, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x47, 0x04, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x47, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x47, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x48, 0x04, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x48, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x48, 0x0b, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x48, 0x2c, + 0x2d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x02, 0x12, 0x03, 0x49, 0x04, 0x3e, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x06, 0x12, 0x03, 0x49, 0x04, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x49, 0x19, 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x49, 0x3c, 0x3d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x03, + 0x12, 0x03, 0x4a, 0x04, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x05, 0x12, 0x03, + 0x4a, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x01, 0x12, 0x03, 0x4a, 0x0b, + 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x03, 0x12, 0x03, 0x4a, 0x16, 0x17, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x04, 0x12, 0x03, 0x4b, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x04, 0x06, 0x12, 0x03, 0x4b, 0x04, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x04, 0x01, 0x12, 0x03, 0x4b, 0x1a, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, + 0x03, 0x12, 0x03, 0x4b, 0x28, 0x29, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x84, + 0x14, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x05, 0x0a, 0x05, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x50, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, - 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x5f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x6f, 0x74, - 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x1a, 0x9e, 0x03, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x72, - 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, - 0x6f, 0x77, 0x73, 0x1a, 0xc2, 0x02, 0x0a, 0x0a, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x52, - 0x6f, 0x77, 0x12, 0x5b, 0x0a, 0x1e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x5f, 0x73, 0x71, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x61, - 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x77, 0x48, 0x00, 0x52, 0x1a, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x71, - 0x6c, 0x41, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x4d, 0x0a, 0x16, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x49, 0x6e, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x80, - 0x01, 0x0a, 0x32, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x62, 0x75, 0x74, 0x5f, 0x6e, 0x6f, - 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, - 0x6e, 0x5f, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x77, 0x48, 0x00, 0x52, 0x2b, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x75, 0x74, 0x4e, 0x6f, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x53, 0x71, - 0x6c, 0x42, 0x05, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x1a, 0x3f, 0x0a, 0x12, 0x4e, 0x6f, 0x74, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x29, - 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, + 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x01, 0x0a, 0x0a, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x06, 0x70, + 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x71, 0x75, + 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, + 0x32, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x36, 0x0a, 0x0d, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x61, 0x0a, 0x1a, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x02, + 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x72, 0x61, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, + 0x03, 0x72, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, + 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x46, 0x72, + 0x6f, 0x6d, 0x54, 0x65, 0x73, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, 0x72, + 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, + 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x77, 0x0a, 0x20, 0x69, 0x6e, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, 0x65, + 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x1d, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x54, 0x68, 0x72, + 0x6f, 0x75, 0x67, 0x68, 0x54, 0x65, 0x73, 0x74, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x96, 0x02, 0x0a, + 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x72, 0x61, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x6e, 0x12, + 0x51, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, + 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa1, 0x02, 0x0a, 0x07, 0x52, - 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x18, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, - 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x12, 0x54, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x12, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, - 0x64, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x18, 0x6e, 0x6f, 0x74, - 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x71, 0x75, - 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, - 0x15, 0x6e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x74, 0x49, 0x6e, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x22, 0x63, - 0x0a, 0x0e, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, - 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, - 0x65, 0x73, 0x74, 0x22, 0xac, 0x03, 0x0a, 0x0e, 0x52, 0x6f, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x1e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x6e, - 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1b, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x80, 0x01, 0x0a, 0x20, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x08, - 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0b, 0x6e, 0x6f, - 0x74, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x50, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x1a, 0x4c, 0x0a, 0x14, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x57, 0x69, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xee, 0x15, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x4d, - 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, - 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x07, 0x00, 0x22, - 0x0a, 0x70, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x23, 0x01, 0x1a, 0x64, 0x20, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x76, - 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x2c, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, - 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x0d, 0x0a, 0x93, - 0x01, 0x0a, 0x04, 0x04, 0x00, 0x03, 0x00, 0x12, 0x04, 0x0d, 0x02, 0x17, 0x03, 0x1a, 0x84, 0x01, - 0x20, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x59, 0x41, - 0x4d, 0x4c, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0d, - 0x0a, 0x19, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x12, 0x04, 0x0e, 0x04, - 0x14, 0x05, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0e, - 0x0c, 0x16, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x08, 0x00, 0x12, 0x04, - 0x0f, 0x06, 0x13, 0x07, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x08, 0x00, - 0x01, 0x12, 0x03, 0x0f, 0x0c, 0x0f, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, - 0x02, 0x00, 0x12, 0x03, 0x10, 0x08, 0x2f, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x10, 0x08, 0x0b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, - 0x00, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x10, 0x0c, 0x2a, 0x0a, 0x10, 0x0a, 0x09, 0x04, - 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x10, 0x2d, 0x2e, 0x0a, 0x0f, 0x0a, - 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x12, 0x03, 0x11, 0x08, 0x27, 0x0a, 0x10, - 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x11, 0x08, 0x0b, - 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x11, - 0x0c, 0x22, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x11, 0x25, 0x26, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x02, - 0x12, 0x03, 0x12, 0x08, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, - 0x02, 0x06, 0x12, 0x03, 0x12, 0x08, 0x0b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x12, 0x0c, 0x3e, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x03, - 0x00, 0x03, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x12, 0x41, 0x42, 0x0a, 0x0d, 0x0a, 0x06, 0x04, - 0x00, 0x03, 0x00, 0x02, 0x00, 0x12, 0x03, 0x16, 0x04, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x16, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x16, 0x0d, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, 0x18, 0x1c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, - 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x1f, 0x20, 0x0a, 0x8a, 0x01, 0x0a, 0x04, 0x04, - 0x00, 0x03, 0x01, 0x12, 0x04, 0x1b, 0x02, 0x1d, 0x03, 0x1a, 0x7c, 0x20, 0x4e, 0x6f, 0x74, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, - 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x73, 0x20, 0x53, 0x51, 0x4c, - 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x20, 0x41, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x03, 0x01, 0x01, - 0x12, 0x03, 0x1b, 0x0a, 0x1c, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x12, - 0x03, 0x1c, 0x04, 0x1a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x04, 0x12, - 0x03, 0x1c, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x1c, 0x0d, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x1c, 0x11, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x03, 0x01, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x1c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x1f, 0x02, - 0x22, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x08, 0x12, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x20, 0x04, 0x20, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x20, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x20, 0x14, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x20, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, - 0x03, 0x21, 0x04, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x21, - 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x21, 0x17, 0x22, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x21, 0x25, 0x26, 0x0a, 0x28, - 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x26, 0x00, 0x2a, 0x01, 0x1a, 0x1c, 0x20, 0x52, 0x6f, 0x77, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, - 0x03, 0x26, 0x08, 0x0b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x27, 0x02, - 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x27, 0x02, 0x08, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x27, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x27, 0x11, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x01, 0x12, 0x03, 0x28, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, - 0x04, 0x12, 0x03, 0x28, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, - 0x03, 0x28, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x28, - 0x13, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x28, 0x1b, 0x1c, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x29, 0x02, 0x21, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x29, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x29, 0x11, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x29, 0x1f, 0x20, 0x0a, 0xbd, 0x01, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, - 0x2e, 0x00, 0x34, 0x01, 0x1a, 0xb0, 0x01, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x73, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x20, - 0x61, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x20, - 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, - 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, - 0x2e, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x08, 0x00, 0x12, 0x04, 0x2f, 0x02, 0x33, - 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x08, 0x00, 0x01, 0x12, 0x03, 0x2f, 0x08, 0x0c, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x30, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x30, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x30, 0x13, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x30, 0x2e, 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, - 0x31, 0x04, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x31, 0x04, - 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x31, 0x13, 0x27, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x31, 0x2a, 0x2b, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x32, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, - 0x02, 0x02, 0x06, 0x12, 0x03, 0x32, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x32, 0x13, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, - 0x03, 0x32, 0x2e, 0x2f, 0x0a, 0x9c, 0x02, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x39, 0x00, 0x3c, - 0x01, 0x1a, 0x8f, 0x02, 0x20, 0x52, 0x6f, 0x77, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x27, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x27, 0x20, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, - 0x73, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x79, - 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, - 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x39, 0x08, 0x16, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x3a, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x3a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x3a, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, - 0x3b, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3b, 0x02, - 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3b, 0x0d, 0x18, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3b, 0x1b, 0x1c, 0x0a, 0xc2, 0x01, - 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x40, 0x00, 0x4d, 0x01, 0x1a, 0xb5, 0x01, 0x20, 0x52, 0x6f, - 0x77, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x61, 0x20, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x0a, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x40, 0x08, 0x16, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x04, 0x03, 0x00, 0x12, 0x04, 0x41, 0x02, 0x44, 0x03, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x03, 0x00, 0x01, 0x12, 0x03, 0x41, 0x0a, 0x1e, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x04, - 0x03, 0x00, 0x02, 0x00, 0x12, 0x03, 0x42, 0x04, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, - 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x42, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, - 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x42, 0x0b, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, - 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x42, 0x15, 0x16, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x04, 0x03, - 0x00, 0x02, 0x01, 0x12, 0x03, 0x43, 0x04, 0x18, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x43, 0x04, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x43, 0x0b, 0x13, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x04, 0x03, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x43, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x04, 0x08, 0x00, - 0x12, 0x04, 0x46, 0x02, 0x4c, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x08, 0x00, 0x01, 0x12, - 0x03, 0x46, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x47, 0x04, - 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x47, 0x04, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x47, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x47, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x04, 0x02, 0x01, 0x12, 0x03, 0x48, 0x04, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, - 0x05, 0x12, 0x03, 0x48, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x48, 0x0b, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x48, - 0x2c, 0x2d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x02, 0x12, 0x03, 0x49, 0x04, 0x3e, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x06, 0x12, 0x03, 0x49, 0x04, 0x18, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x49, 0x19, 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x49, 0x3c, 0x3d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, - 0x03, 0x12, 0x03, 0x4a, 0x04, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x05, 0x12, - 0x03, 0x4a, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x01, 0x12, 0x03, 0x4a, - 0x0b, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x03, 0x12, 0x03, 0x4a, 0x16, 0x17, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x04, 0x12, 0x03, 0x4b, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x04, 0x06, 0x12, 0x03, 0x4b, 0x04, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x04, 0x01, 0x12, 0x03, 0x4b, 0x1a, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, - 0x04, 0x03, 0x12, 0x03, 0x4b, 0x28, 0x29, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, - 0x84, 0x14, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x01, 0x0a, 0x0a, 0x54, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x73, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, - 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x06, - 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x71, + 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, + 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x73, + 0x74, 0x73, 0x12, 0x77, 0x0a, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x74, + 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, - 0x12, 0x32, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x36, 0x0a, 0x0d, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x61, 0x0a, 0x1a, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x74, 0x68, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, - 0x02, 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x72, 0x61, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, - 0x52, 0x03, 0x72, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, - 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x46, - 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x73, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, - 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x77, 0x0a, 0x20, 0x69, 0x6e, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, - 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1d, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x54, 0x68, - 0x72, 0x6f, 0x75, 0x67, 0x68, 0x54, 0x65, 0x73, 0x74, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x96, 0x02, - 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x72, 0x61, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, - 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x6e, - 0x12, 0x51, 0x0a, 0x13, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, - 0x6d, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x00, - 0x52, 0x11, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, - 0x73, 0x74, 0x73, 0x12, 0x77, 0x0a, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, - 0x74, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1d, 0x69, - 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x54, 0x65, - 0x73, 0x74, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x10, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x02, 0x50, 0x01, - 0x4a, 0xfb, 0x0a, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x32, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, - 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, - 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, - 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x00, - 0x12, 0x04, 0x0a, 0x00, 0x12, 0x01, 0x1a, 0x45, 0x20, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0a, 0x0a, - 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, - 0x00, 0x12, 0x03, 0x0b, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, - 0x03, 0x0b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, - 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x15, 0x16, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x13, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x0c, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, - 0x04, 0x0e, 0x02, 0x11, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, - 0x0e, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x04, 0x16, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x0f, 0x04, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x03, 0x12, 0x03, 0x10, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, - 0x12, 0x03, 0x10, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, - 0x10, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x10, 0x14, - 0x15, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x14, 0x00, 0x16, 0x01, 0x0a, 0x0a, 0x0a, - 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x14, 0x08, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x00, 0x12, 0x03, 0x15, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x04, 0x12, - 0x03, 0x15, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x15, - 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x15, 0x12, 0x20, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x23, 0x24, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x18, 0x00, 0x1b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, - 0x01, 0x12, 0x03, 0x18, 0x08, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, - 0x19, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x04, 0x12, 0x03, 0x19, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x19, 0x0b, 0x11, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x19, 0x12, 0x20, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x19, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x02, 0x02, 0x01, 0x12, 0x03, 0x1a, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, - 0x05, 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x1a, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1a, - 0x15, 0x16, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x1d, 0x00, 0x26, 0x01, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x1d, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x03, - 0x08, 0x00, 0x12, 0x04, 0x1e, 0x02, 0x25, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x08, 0x00, - 0x01, 0x12, 0x03, 0x1e, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, - 0x1f, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1f, 0x04, - 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x1a, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x20, 0x21, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x20, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x06, 0x12, 0x03, 0x20, 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x20, 0x12, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x20, 0x28, 0x29, 0x0a, 0x57, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x02, 0x12, 0x03, 0x22, 0x04, - 0x23, 0x1a, 0x4a, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, - 0x6d, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x20, 0x61, 0x64, 0x64, 0x73, 0x20, 0x61, 0x20, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x69, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x03, 0x02, 0x02, 0x05, 0x12, 0x03, 0x22, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x03, 0x02, 0x02, 0x01, 0x12, 0x03, 0x22, 0x0b, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x22, 0x21, 0x22, 0x0a, 0x73, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x03, 0x12, - 0x03, 0x24, 0x04, 0x44, 0x1a, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, - 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x03, 0x02, 0x03, 0x06, 0x12, 0x03, 0x24, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x03, 0x01, 0x12, 0x03, 0x24, 0x1f, 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, - 0x03, 0x12, 0x03, 0x24, 0x42, 0x43, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x28, 0x00, - 0x2e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x28, 0x08, 0x0e, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x04, 0x08, 0x00, 0x12, 0x04, 0x29, 0x02, 0x2d, 0x03, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x08, 0x00, 0x01, 0x12, 0x03, 0x29, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, - 0x02, 0x00, 0x12, 0x03, 0x2a, 0x04, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, - 0x12, 0x03, 0x2a, 0x04, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, - 0x2a, 0x15, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2a, 0x1b, - 0x1c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x2b, 0x04, 0x2a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x2b, 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2b, 0x12, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x2b, 0x28, 0x29, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x02, - 0x12, 0x03, 0x2c, 0x04, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x06, 0x12, 0x03, - 0x2c, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2c, 0x1f, - 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2c, 0x42, 0x43, 0x0a, - 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x30, 0x00, 0x32, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x05, 0x01, 0x12, 0x03, 0x30, 0x08, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, - 0x03, 0x31, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x31, - 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x31, 0x0e, 0x1a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x31, 0x1d, 0x1e, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xe9, 0x03, 0x0a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, - 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x1a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x45, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x02, 0x50, 0x01, 0x4a, - 0xb8, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, + 0x49, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1d, 0x69, 0x6e, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x54, 0x65, 0x73, + 0x74, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x10, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, + 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0b, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x02, 0x50, 0x01, 0x4a, + 0xfb, 0x0a, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x32, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, - 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x2c, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, - 0x06, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x06, 0x00, 0x22, 0x0a, 0xa8, - 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x0c, 0x01, 0x1a, 0x9b, 0x01, 0x20, 0x57, - 0x61, 0x73, 0x6d, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, - 0x79, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x75, 0x73, 0x74, 0x20, 0x72, 0x61, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67, 0x6f, 0x61, 0x6c, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x62, 0x65, 0x74, 0x74, - 0x65, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x76, - 0x65, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, - 0x12, 0x03, 0x0a, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0b, - 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x0b, 0x02, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0b, 0x0b, 0x15, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x20, 0x21, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, 0x0a, 0xb3, 0x04, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2a, 0x54, 0x0a, 0x0a, 0x54, - 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, - 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x54, - 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x10, - 0x02, 0x42, 0x02, 0x50, 0x01, 0x4a, 0x98, 0x03, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, - 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, - 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, - 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, - 0x04, 0x06, 0x00, 0x0c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x06, 0x05, - 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x1e, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x07, 0x1c, 0x1d, 0x0a, 0x59, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x16, 0x1a, 0x4c, 0x20, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x72, 0x75, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, - 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x75, - 0x69, 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x09, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x09, 0x14, - 0x15, 0x0a, 0x90, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x02, 0x17, 0x1a, - 0x82, 0x01, 0x20, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x4e, - 0x4f, 0x4e, 0x45, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x73, 0x6b, - 0x69, 0x70, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x75, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, + 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, + 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, 0x09, + 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x00, 0x12, + 0x04, 0x0a, 0x00, 0x12, 0x01, 0x1a, 0x45, 0x20, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, + 0x6e, 0x20, 0x62, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, + 0x12, 0x03, 0x0b, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x0b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x09, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x15, 0x16, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x0c, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, + 0x0e, 0x02, 0x11, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x0e, + 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x04, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x0f, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x03, 0x12, 0x03, 0x10, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, + 0x03, 0x10, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x10, + 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x10, 0x14, 0x15, + 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x14, 0x00, 0x16, 0x01, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x01, 0x01, 0x12, 0x03, 0x14, 0x08, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, + 0x12, 0x03, 0x15, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x04, 0x12, 0x03, + 0x15, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x15, 0x0b, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x15, 0x12, 0x20, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x23, 0x24, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x02, 0x12, 0x04, 0x18, 0x00, 0x1b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, + 0x12, 0x03, 0x18, 0x08, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x19, + 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x04, 0x12, 0x03, 0x19, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x19, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x19, 0x12, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x19, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x1a, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x1a, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1a, 0x15, + 0x16, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x1d, 0x00, 0x26, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x1d, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x03, 0x08, + 0x00, 0x12, 0x04, 0x1e, 0x02, 0x25, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x08, 0x00, 0x01, + 0x12, 0x03, 0x1e, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x1f, + 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1f, 0x04, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x1a, 0x1d, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x20, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, + 0x01, 0x06, 0x12, 0x03, 0x20, 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x20, 0x12, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x20, 0x28, 0x29, 0x0a, 0x57, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x02, 0x12, 0x03, 0x22, 0x04, 0x23, + 0x1a, 0x4a, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, + 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x20, 0x61, 0x64, 0x64, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x6f, + 0x67, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x69, 0x74, + 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x02, 0x05, 0x12, 0x03, 0x22, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x22, 0x0b, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x22, 0x21, 0x22, 0x0a, 0x73, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x03, 0x12, 0x03, + 0x24, 0x04, 0x44, 0x1a, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x74, + 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, + 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, + 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x03, 0x06, 0x12, 0x03, 0x24, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x24, 0x1f, 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x03, + 0x12, 0x03, 0x24, 0x42, 0x43, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x28, 0x00, 0x2e, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x28, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x04, 0x08, 0x00, 0x12, 0x04, 0x29, 0x02, 0x2d, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x08, 0x00, 0x01, 0x12, 0x03, 0x29, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, + 0x00, 0x12, 0x03, 0x2a, 0x04, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x2a, 0x04, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2a, + 0x15, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2a, 0x1b, 0x1c, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x2b, 0x04, 0x2a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x2b, 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2b, 0x12, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x2b, 0x28, 0x29, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x02, 0x12, + 0x03, 0x2c, 0x04, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x06, 0x12, 0x03, 0x2c, + 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2c, 0x1f, 0x3f, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2c, 0x42, 0x43, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x30, 0x00, 0x32, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, + 0x01, 0x12, 0x03, 0x30, 0x08, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, + 0x31, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x31, 0x02, + 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x31, 0x0e, 0x1a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x31, 0x1d, 0x1e, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xe9, 0x03, 0x0a, 0x23, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, + 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, + 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x45, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x02, 0x50, 0x01, 0x4a, 0xb8, + 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, + 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x2c, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x06, + 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0a, 0x12, 0x03, 0x06, 0x00, 0x22, 0x0a, 0xa8, 0x01, + 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x0c, 0x01, 0x1a, 0x9b, 0x01, 0x20, 0x57, 0x61, + 0x73, 0x6d, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x69, + 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x75, 0x73, 0x74, 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, + 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67, 0x6f, 0x61, 0x6c, 0x20, + 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, + 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x76, 0x65, + 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, + 0x03, 0x0a, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0b, 0x02, + 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x0b, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0b, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x20, 0x21, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, 0x0a, 0xb3, 0x04, 0x0a, 0x22, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x71, 0x75, 0x61, 0x72, 0x79, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2a, 0x54, 0x0a, 0x0a, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, 0x54, + 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, + 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x45, + 0x53, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x10, 0x02, + 0x42, 0x02, 0x50, 0x01, 0x4a, 0x98, 0x03, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0c, 0x01, 0x0a, + 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, + 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x09, 0x0a, + 0x02, 0x08, 0x0a, 0x12, 0x03, 0x04, 0x00, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, + 0x06, 0x00, 0x0c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x06, 0x05, 0x0f, + 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x07, 0x1c, 0x1d, 0x0a, 0x59, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x09, 0x02, 0x16, 0x1a, 0x4c, 0x20, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, + 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, + 0x75, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x75, 0x69, - 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0b, - 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x15, 0x16, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x09, + 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x09, 0x14, 0x15, + 0x0a, 0x90, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x02, 0x17, 0x1a, 0x82, + 0x01, 0x20, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x4e, 0x4f, + 0x4e, 0x45, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x20, 0x74, + 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x73, 0x6b, 0x69, + 0x70, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, + 0x65, 0x73, 0x74, 0x20, 0x73, 0x75, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, + 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, + 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x75, 0x69, 0x74, + 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0b, 0x02, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x15, 0x16, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; include!("quary.service.v1.serde.rs"); // @@protoc_insertion_point(module) diff --git a/proto/gen/rust/src/quary.service.v1.serde.rs b/proto/gen/rust/src/quary.service.v1.serde.rs index af1fdfe1..37474a65 100644 --- a/proto/gen/rust/src/quary.service.v1.serde.rs +++ b/proto/gen/rust/src/quary.service.v1.serde.rs @@ -4286,6 +4286,12 @@ impl serde::Serialize for project_file::Snapshot { if !self.name.is_empty() { len += 1; } + if !self.tags.is_empty() { + len += 1; + } + if self.description.is_some() { + len += 1; + } if !self.unique_key.is_empty() { len += 1; } @@ -4296,6 +4302,12 @@ impl serde::Serialize for project_file::Snapshot { if !self.name.is_empty() { struct_ser.serialize_field("name", &self.name)?; } + if !self.tags.is_empty() { + struct_ser.serialize_field("tags", &self.tags)?; + } + if let Some(v) = self.description.as_ref() { + struct_ser.serialize_field("description", v)?; + } if !self.unique_key.is_empty() { struct_ser.serialize_field("uniqueKey", &self.unique_key)?; } @@ -4313,6 +4325,8 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { { const FIELDS: &[&str] = &[ "name", + "tags", + "description", "unique_key", "uniqueKey", "strategy", @@ -4321,6 +4335,8 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { #[allow(clippy::enum_variant_names)] enum GeneratedField { Name, + Tags, + Description, UniqueKey, Strategy, } @@ -4345,6 +4361,8 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { { match value { "name" => Ok(GeneratedField::Name), + "tags" => Ok(GeneratedField::Tags), + "description" => Ok(GeneratedField::Description), "uniqueKey" | "unique_key" => Ok(GeneratedField::UniqueKey), "strategy" => Ok(GeneratedField::Strategy), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -4367,6 +4385,8 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { V: serde::de::MapAccess<'de>, { let mut name__ = None; + let mut tags__ = None; + let mut description__ = None; let mut unique_key__ = None; let mut strategy__ = None; while let Some(k) = map_.next_key()? { @@ -4377,6 +4397,18 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { } name__ = Some(map_.next_value()?); } + GeneratedField::Tags => { + if tags__.is_some() { + return Err(serde::de::Error::duplicate_field("tags")); + } + tags__ = Some(map_.next_value()?); + } + GeneratedField::Description => { + if description__.is_some() { + return Err(serde::de::Error::duplicate_field("description")); + } + description__ = map_.next_value()?; + } GeneratedField::UniqueKey => { if unique_key__.is_some() { return Err(serde::de::Error::duplicate_field("uniqueKey")); @@ -4393,6 +4425,8 @@ impl<'de> serde::Deserialize<'de> for project_file::Snapshot { } Ok(project_file::Snapshot { name: name__.unwrap_or_default(), + tags: tags__.unwrap_or_default(), + description: description__, unique_key: unique_key__.unwrap_or_default(), strategy: strategy__, }) @@ -6149,6 +6183,12 @@ impl serde::Serialize for Snapshot { if !self.name.is_empty() { len += 1; } + if self.description.is_some() { + len += 1; + } + if !self.tags.is_empty() { + len += 1; + } if !self.file_path.is_empty() { len += 1; } @@ -6168,6 +6208,12 @@ impl serde::Serialize for Snapshot { if !self.name.is_empty() { struct_ser.serialize_field("name", &self.name)?; } + if let Some(v) = self.description.as_ref() { + struct_ser.serialize_field("description", v)?; + } + if !self.tags.is_empty() { + struct_ser.serialize_field("tags", &self.tags)?; + } if !self.file_path.is_empty() { struct_ser.serialize_field("filePath", &self.file_path)?; } @@ -6194,6 +6240,8 @@ impl<'de> serde::Deserialize<'de> for Snapshot { { const FIELDS: &[&str] = &[ "name", + "description", + "tags", "file_path", "filePath", "file_sha256_hash", @@ -6207,6 +6255,8 @@ impl<'de> serde::Deserialize<'de> for Snapshot { #[allow(clippy::enum_variant_names)] enum GeneratedField { Name, + Description, + Tags, FilePath, FileSha256Hash, UniqueKey, @@ -6234,6 +6284,8 @@ impl<'de> serde::Deserialize<'de> for Snapshot { { match value { "name" => Ok(GeneratedField::Name), + "description" => Ok(GeneratedField::Description), + "tags" => Ok(GeneratedField::Tags), "filePath" | "file_path" => Ok(GeneratedField::FilePath), "fileSha256Hash" | "file_sha256_hash" => Ok(GeneratedField::FileSha256Hash), "uniqueKey" | "unique_key" => Ok(GeneratedField::UniqueKey), @@ -6259,6 +6311,8 @@ impl<'de> serde::Deserialize<'de> for Snapshot { V: serde::de::MapAccess<'de>, { let mut name__ = None; + let mut description__ = None; + let mut tags__ = None; let mut file_path__ = None; let mut file_sha256_hash__ = None; let mut unique_key__ = None; @@ -6272,6 +6326,18 @@ impl<'de> serde::Deserialize<'de> for Snapshot { } name__ = Some(map_.next_value()?); } + GeneratedField::Description => { + if description__.is_some() { + return Err(serde::de::Error::duplicate_field("description")); + } + description__ = map_.next_value()?; + } + GeneratedField::Tags => { + if tags__.is_some() { + return Err(serde::de::Error::duplicate_field("tags")); + } + tags__ = Some(map_.next_value()?); + } GeneratedField::FilePath => { if file_path__.is_some() { return Err(serde::de::Error::duplicate_field("filePath")); @@ -6306,6 +6372,8 @@ impl<'de> serde::Deserialize<'de> for Snapshot { } Ok(Snapshot { name: name__.unwrap_or_default(), + description: description__, + tags: tags__.unwrap_or_default(), file_path: file_path__.unwrap_or_default(), file_sha256_hash: file_sha256_hash__.unwrap_or_default(), unique_key: unique_key__.unwrap_or_default(), diff --git a/proto/gen/ts/quary/service/v1/project_file.ts b/proto/gen/ts/quary/service/v1/project_file.ts index 72e629d1..f132a49e 100644 --- a/proto/gen/ts/quary/service/v1/project_file.ts +++ b/proto/gen/ts/quary/service/v1/project_file.ts @@ -11,6 +11,10 @@ export interface ProjectFile { export interface ProjectFile_Model { name: string; + /** + * Tags are used to group different parts of the project together. For example, you could tag all models that are + * related to a specific department with the same tag. + */ tags: string[]; description?: | string @@ -23,6 +27,12 @@ export interface ProjectFile_Model { export interface ProjectFile_Snapshot { name: string; + /** + * Tags are used to group different parts of the project together. For example, you could tag all models that are + * related to a specific department with the same tag. + */ + tags: string[]; + description?: string | undefined; uniqueKey: string; strategy: ProjectFile_SnapshotStrategy | undefined; } @@ -37,6 +47,10 @@ export interface ProjectFile_TimestampStrategy { export interface ProjectFileSource { name: string; + /** + * Tags are used to group different parts of the project together. For example, you could tag all sources that are + * related to a specific department with the same tag. + */ tags: string[]; description?: | string @@ -309,7 +323,7 @@ export const ProjectFile_Model = { }; function createBaseProjectFile_Snapshot(): ProjectFile_Snapshot { - return { name: "", uniqueKey: "", strategy: undefined }; + return { name: "", tags: [], description: undefined, uniqueKey: "", strategy: undefined }; } export const ProjectFile_Snapshot = { @@ -317,6 +331,12 @@ export const ProjectFile_Snapshot = { if (message.name !== "") { writer.uint32(10).string(message.name); } + for (const v of message.tags) { + writer.uint32(34).string(v!); + } + if (message.description !== undefined) { + writer.uint32(42).string(message.description); + } if (message.uniqueKey !== "") { writer.uint32(18).string(message.uniqueKey); } @@ -340,6 +360,20 @@ export const ProjectFile_Snapshot = { message.name = reader.string(); continue; + case 4: + if (tag !== 34) { + break; + } + + message.tags.push(reader.string()); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.description = reader.string(); + continue; case 2: if (tag !== 18) { break; @@ -366,6 +400,8 @@ export const ProjectFile_Snapshot = { fromJSON(object: any): ProjectFile_Snapshot { return { name: isSet(object.name) ? gt.String(object.name) : "", + tags: gt.Array.isArray(object?.tags) ? object.tags.map((e: any) => gt.String(e)) : [], + description: isSet(object.description) ? gt.String(object.description) : undefined, uniqueKey: isSet(object.uniqueKey) ? gt.String(object.uniqueKey) : "", strategy: isSet(object.strategy) ? ProjectFile_SnapshotStrategy.fromJSON(object.strategy) : undefined, }; @@ -376,6 +412,12 @@ export const ProjectFile_Snapshot = { if (message.name !== "") { obj.name = message.name; } + if (message.tags?.length) { + obj.tags = message.tags; + } + if (message.description !== undefined) { + obj.description = message.description; + } if (message.uniqueKey !== "") { obj.uniqueKey = message.uniqueKey; } @@ -391,6 +433,8 @@ export const ProjectFile_Snapshot = { fromPartial, I>>(object: I): ProjectFile_Snapshot { const message = createBaseProjectFile_Snapshot(); message.name = object.name ?? ""; + message.tags = object.tags?.map((e) => e) || []; + message.description = object.description ?? undefined; message.uniqueKey = object.uniqueKey ?? ""; message.strategy = (object.strategy !== undefined && object.strategy !== null) ? ProjectFile_SnapshotStrategy.fromPartial(object.strategy) diff --git a/proto/gen/ts/quary/service/v1/types.ts b/proto/gen/ts/quary/service/v1/types.ts index b5c37220..cbfb9a0a 100644 --- a/proto/gen/ts/quary/service/v1/types.ts +++ b/proto/gen/ts/quary/service/v1/types.ts @@ -102,7 +102,10 @@ export interface Seed { export interface Model { name: string; - description?: string | undefined; + description?: + | string + | undefined; + /** Tags are used to group different parts of the project together. */ tags: string[]; filePath: string; fileSha256Hash: string; @@ -122,6 +125,11 @@ export interface Model_ModelColum { export interface Snapshot { name: string; + description?: + | string + | undefined; + /** Tags are used to group different parts of the project together. */ + tags: string[]; filePath: string; fileSha256Hash: string; uniqueKey: string; @@ -154,6 +162,7 @@ export interface Source { name: string; description?: string | undefined; path: string; + /** Tags are used to group different parts of the project together. */ tags: string[]; /** TODO Replace File path references with whole file references */ filePath: string; @@ -1936,7 +1945,16 @@ export const Model_ModelColum = { }; function createBaseSnapshot(): Snapshot { - return { name: "", filePath: "", fileSha256Hash: "", uniqueKey: "", strategy: undefined, references: [] }; + return { + name: "", + description: undefined, + tags: [], + filePath: "", + fileSha256Hash: "", + uniqueKey: "", + strategy: undefined, + references: [], + }; } export const Snapshot = { @@ -1944,6 +1962,12 @@ export const Snapshot = { if (message.name !== "") { writer.uint32(10).string(message.name); } + if (message.description !== undefined) { + writer.uint32(18).string(message.description); + } + for (const v of message.tags) { + writer.uint32(66).string(v!); + } if (message.filePath !== "") { writer.uint32(26).string(message.filePath); } @@ -1976,6 +2000,20 @@ export const Snapshot = { message.name = reader.string(); continue; + case 2: + if (tag !== 18) { + break; + } + + message.description = reader.string(); + continue; + case 8: + if (tag !== 66) { + break; + } + + message.tags.push(reader.string()); + continue; case 3: if (tag !== 26) { break; @@ -2023,6 +2061,8 @@ export const Snapshot = { fromJSON(object: any): Snapshot { return { name: isSet(object.name) ? gt.String(object.name) : "", + description: isSet(object.description) ? gt.String(object.description) : undefined, + tags: gt.Array.isArray(object?.tags) ? object.tags.map((e: any) => gt.String(e)) : [], filePath: isSet(object.filePath) ? gt.String(object.filePath) : "", fileSha256Hash: isSet(object.fileSha256Hash) ? gt.String(object.fileSha256Hash) : "", uniqueKey: isSet(object.uniqueKey) ? gt.String(object.uniqueKey) : "", @@ -2036,6 +2076,12 @@ export const Snapshot = { if (message.name !== "") { obj.name = message.name; } + if (message.description !== undefined) { + obj.description = message.description; + } + if (message.tags?.length) { + obj.tags = message.tags; + } if (message.filePath !== "") { obj.filePath = message.filePath; } @@ -2060,6 +2106,8 @@ export const Snapshot = { fromPartial, I>>(object: I): Snapshot { const message = createBaseSnapshot(); message.name = object.name ?? ""; + message.description = object.description ?? undefined; + message.tags = object.tags?.map((e) => e) || []; message.filePath = object.filePath ?? ""; message.fileSha256Hash = object.fileSha256Hash ?? ""; message.uniqueKey = object.uniqueKey ?? ""; diff --git a/proto/quary/service/v1/project_file.proto b/proto/quary/service/v1/project_file.proto index cd89a43e..934ef93e 100644 --- a/proto/quary/service/v1/project_file.proto +++ b/proto/quary/service/v1/project_file.proto @@ -11,6 +11,8 @@ message ProjectFile { message Model { string name = 1; + // Tags are used to group different parts of the project together. For example, you could tag all models that are + // related to a specific department with the same tag. repeated string tags = 6; optional string description = 2; // The materialization of the model, available types are specified by each database. @@ -22,6 +24,10 @@ message ProjectFile { message Snapshot { string name = 1; + // Tags are used to group different parts of the project together. For example, you could tag all models that are + // related to a specific department with the same tag. + repeated string tags = 4; + optional string description = 5; string unique_key = 2; SnapshotStrategy strategy = 3; } @@ -39,6 +45,8 @@ message ProjectFile { message ProjectFileSource { string name = 1; + // Tags are used to group different parts of the project together. For example, you could tag all sources that are + // related to a specific department with the same tag. repeated string tags = 6; optional string description = 2; // The full path of the source table in the database. This is used to reference the table itself. For example: diff --git a/proto/quary/service/v1/types.proto b/proto/quary/service/v1/types.proto index e095682d..f28d52df 100644 --- a/proto/quary/service/v1/types.proto +++ b/proto/quary/service/v1/types.proto @@ -106,6 +106,7 @@ message Seed { message Model { string name = 1; optional string description = 2; + // Tags are used to group different parts of the project together. repeated string tags = 4; string file_path = 3; @@ -127,6 +128,9 @@ message Model { message Snapshot { string name = 1; + optional string description = 2; + // Tags are used to group different parts of the project together. + repeated string tags = 8; string file_path = 3; string file_sha256_hash = 4; @@ -158,6 +162,7 @@ message Source { string name = 1; optional string description = 2; string path = 3; + // Tags are used to group different parts of the project together. repeated string tags = 6; // TODO Replace File path references with whole file references diff --git a/rust/cli/Cargo.toml b/rust/cli/Cargo.toml index 0c93ff7f..4dbff36a 100644 --- a/rust/cli/Cargo.toml +++ b/rust/cli/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "quary" -version = "0.0.108" +version = "0.0.111" edition = "2021" -rust-version = "1.77.1" +rust-version = "1.77.2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -19,15 +19,16 @@ async-trait = "0.1" indicatif = "0.17" gcp-bigquery-client = "0.18" prost = "0.12" -google-cloud-auth = { version = "0.13", default-features = false, features = ["external-account", "rustls-tls"] } +google-cloud-auth = { version = "0.14", default-features = false, features = ["external-account", "rustls-tls"] } snowflake-api = { path = "../snowflake-api" } -arrow-array = "50" +arrow-array = "51" duckdb = { version = "0.10", features = ["bundled"] } regex = "1.10.4" futures = "0.3.30" base64 = "0.22.0" dotenv = "0.15" serde_yaml = "0.9.33" +chrono = "0.4" [dev-dependencies] assert_cmd = "2" diff --git a/rust/cli/src/commands.rs b/rust/cli/src/commands.rs index e350d4cf..68db1520 100644 --- a/rust/cli/src/commands.rs +++ b/rust/cli/src/commands.rs @@ -49,6 +49,11 @@ pub enum Commands { name = "generate-sources", about = "Returns a project file with all sources in a database" )] + #[command( + name = "snapshot", + about = "Execute snapshots to capture data changes over time" + )] + Snapshot(SnapshotArgs), GenerateSources(GenerateSourcesArgs), } @@ -60,6 +65,13 @@ pub struct RpcArgs { pub request: String, } +#[derive(Args, Debug)] +pub struct SnapshotArgs { + /// Print the rendered SQL statements without executing them + #[arg(long = "dry-run", short = 'd', default_value = "false")] + pub dry_run: bool, +} + #[derive(Args, Debug)] pub struct ConvertDbtArgs { /// Output path for the converted project diff --git a/rust/cli/src/main.rs b/rust/cli/src/main.rs index 2d627cac..ef84aa6d 100644 --- a/rust/cli/src/main.rs +++ b/rust/cli/src/main.rs @@ -19,7 +19,7 @@ use quary_core::databases::{ColumnWithDetails, DatabaseConnection, DatabaseQuery use quary_core::graph::project_to_graph; use quary_core::init::{Asset, DuckDBAsset}; use quary_core::onboarding::is_empty_bar_hidden_and_sqlite; -use quary_core::project::project_and_fs_to_sql_for_views; +use quary_core::project::{project_and_fs_to_sql_for_snapshots, project_and_fs_to_sql_for_views}; use quary_core::project_tests::return_tests_sql; use quary_core::test_runner::{run_tests_internal, RunStatementFunc, RunTestError}; use quary_databases::databases_connection::{ @@ -144,6 +144,9 @@ async fn main_wrapped() -> Result<(), String> { let test_count = project.tests.len(); println!("Tests processed: {}", test_count); + let snapshots_count = project.snapshots.len(); + println!("Snapshots processed: {}", snapshots_count); + println!("Project compiled successfully."); Ok(()) } @@ -271,7 +274,11 @@ async fn main_wrapped() -> Result<(), String> { } } pb.finish_with_message("done"); - println!("Created {} views in the database", sqls.len()); + match sqls.len() { + 0 => println!("No models to build"), + 1 => println!("Created 1 model in the database"), + n => println!("Created {} models in the database", n), + } Ok(()) } } @@ -477,6 +484,55 @@ async fn main_wrapped() -> Result<(), String> { Ok(()) } Commands::Rpc(rpc_args) => rpc(&args, rpc_args).await, + Commands::Snapshot(snapshot_args) => { + let config = get_config_file(&args.project_file)?; + let database = database_from_config(&config).await?; + let query_generator = database.query_generator(); + let (project, file_system) = parse_project(&query_generator).await?; + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &query_generator) + .await?; + + if snapshot_args.dry_run { + println!("\n-- Create snapshots\n"); + for (name, sql) in snapshots_sql { + println!("\n-- {name}"); + for statement in sql { + println!("{};", statement); + } + } + Ok(()) + } else { + let total_number_of_snapshots = project.snapshots.len(); + let pb = ProgressBar::new(total_number_of_snapshots as u64); + pb.set_style( + ProgressStyle::default_bar() + .template("{spinner:.green} {bar:40.cyan/blue} {pos:>7}/{len:7} {msg}") + .map_err(|e| e.to_string())? + .progress_chars("=>-"), + ); + + for (name, sql) in snapshots_sql { + pb.set_message(format!("Building snapshot: {}", name)); + pb.inc(1); + for statement in sql { + database.exec(statement.as_str()).await.map_err(|e| { + format!( + "executing sql for snapshot '{}': {:?} {:?}", + name, statement, e + ) + })?; + } + } + + pb.finish_with_message("done"); + println!( + "Created/updated {} snapshot(s) in the database", + total_number_of_snapshots + ); + Ok(()) + } + } } } diff --git a/rust/cli/tests/cli_test.rs b/rust/cli/tests/cli_test.rs index 32aefcc1..2f464744 100644 --- a/rust/cli/tests/cli_test.rs +++ b/rust/cli/tests/cli_test.rs @@ -1,4 +1,8 @@ use assert_cmd::Command; +use chrono::Utc; +use quary_core::databases::DatabaseConnection; +use quary_databases::databases_duckdb; +use std::fs; use tempfile::tempdir; #[test] @@ -227,3 +231,158 @@ duckdb: .success(); } } + +/// This test simulates a workflow where a model references a snapshot in duckdb. +/// 1. The initial snapshot is taken which builds the orders_snapshot table in the database. +/// 2. The project is built which references the orders_snapshot table. +/// 3. The initial state of the snapshot is asserted. +/// 4. The data is updated and a new snapshot is taken. +/// 5. The updated state of the snapshot is asserted. (from the stg_orders_snapshot table) +#[tokio::test] +async fn test_duckdb_snapshots() { + // Setup + let name = "quary"; + let temp_dir = tempdir().unwrap(); + let project_dir = temp_dir.path(); + + Command::cargo_bin(name) + .unwrap() + .current_dir(project_dir) + .args(vec!["init", "--type=duckdb"]) + .assert() + .success(); + + // Create data directory and orders.csv file + let data_dir = project_dir.join("data"); + fs::create_dir_all(&data_dir).unwrap(); + let orders_file = data_dir.join("orders.csv"); + let orders_content = "id,user_id,order_date,status\n1,1,2023-06-01,in_progress"; + fs::write(&orders_file, orders_content).unwrap(); + + // Create snapshots directory and orders_snapshot.snapshot.sql file + let snapshots_dir = project_dir.join("models").join("staging").join("snapshots"); + fs::create_dir_all(&snapshots_dir).unwrap(); + let orders_snapshot_file = snapshots_dir.join("orders_snapshot.snapshot.sql"); + let orders_snapshot_content = "SELECT id, user_id, order_date, status FROM q.raw_orders"; + fs::write(&orders_snapshot_file, orders_snapshot_content).unwrap(); + + let staging_models_dir = project_dir.join("models").join("staging"); + fs::create_dir_all(&staging_models_dir).unwrap(); + let stg_orders_snapshot_file = staging_models_dir.join("stg_orders_snapshot.sql"); + let stg_orders_snapshot_content = "SELECT * FROM q.orders_snapshot"; + fs::write(&stg_orders_snapshot_file, stg_orders_snapshot_content).unwrap(); + + // Create schema.yaml file + let schema_file = snapshots_dir.join("schema.yaml"); + let schema_content = r#" + sources: + - name: raw_orders + path: "'data/orders.csv'" + models: + - name: stg_orders_snapshot + snapshots: + - name: orders_snapshot + unique_key: id + strategy: + timestamp: + updated_at: order_date + "#; + fs::write(&schema_file, schema_content).unwrap(); + + // Create quary.yaml file + let quary_yaml_content = "duckdb:\n path: \"./database.db\"\n"; + let quary_yaml_path = project_dir.join("quary.yaml"); + fs::write(&quary_yaml_path, quary_yaml_content).unwrap(); + + // Take the initial snapshot and build the project which references the snapshot + Command::cargo_bin(name) + .unwrap() + .current_dir(project_dir) + .args(vec!["snapshot"]) + .assert() + .success(); + Command::cargo_bin(name) + .unwrap() + .current_dir(project_dir) + .args(vec!["build"]) + .assert() + .success(); + + { + // Assert initial snapshot + let database = databases_duckdb::DuckDB::new_with_file( + None, + project_dir.join("database.db").to_str().unwrap(), + ) + .ok() + .unwrap(); + + let result = database + .query("SELECT id, user_id, order_date, status, quary_valid_from, quary_valid_to, quary_scd_id FROM orders_snapshot") + .await + .unwrap(); + + assert_eq!(result.rows.len(), 1); + assert_eq!(result.rows[0][0], "1"); // id + assert_eq!(result.rows[0][3], "in_progress"); // status + assert_eq!(result.rows[0][5], "NULL"); // quary_valid_to + + // Check that quary_valid_from has the same date as the current date + let current_date = Utc::now().date_naive(); + let quary_valid_from_str = &result.rows[0][4]; + let quary_valid_from_date = quary_valid_from_str.split_whitespace().next().unwrap(); + let quary_valid_from = + chrono::NaiveDate::parse_from_str(quary_valid_from_date, "%Y-%m-%d").unwrap(); + assert_eq!(current_date, quary_valid_from); + + // Update orders.csv data + let updated_orders_content = "id,user_id,order_date,status\n1,1,2099-06-01,completed"; + fs::write(&orders_file, updated_orders_content).unwrap(); + } + + // Take updated snapshot + Command::cargo_bin(name) + .unwrap() + .current_dir(project_dir) + .args(vec!["snapshot"]) + .assert() + .success(); + + { + let database = databases_duckdb::DuckDB::new_with_file( + None, + project_dir.join("database.db").to_str().unwrap(), + ) + .ok() + .unwrap(); + + // Assert updated snapshot + let updated_result = database + .query("SELECT id, user_id, order_date, status, quary_valid_from, quary_valid_to, quary_scd_id FROM stg_orders_snapshot ORDER BY quary_valid_from") + .await + .unwrap(); + + assert_eq!(updated_result.rows.len(), 2); + + // Check the initial row + assert_eq!(updated_result.rows[0][0], "1"); // id + assert_eq!(updated_result.rows[0][3], "in_progress"); // status + assert_ne!(updated_result.rows[0][5], "NULL"); // quary_valid_to should not be NULL + + // Check the updated row + assert_eq!(updated_result.rows[1][0], "1"); // id + assert_eq!(updated_result.rows[1][3], "completed"); // status + assert_eq!(updated_result.rows[1][5], "NULL"); // quary_valid_to should be NULL + + // Check that quary_valid_from of the updated row has the same date as the current date + let current_date = Utc::now().date_naive(); + let updated_quary_valid_from_str = &updated_result.rows[1][4]; + let updated_quary_valid_from_date = updated_quary_valid_from_str + .split_whitespace() + .next() + .unwrap(); + let updated_quary_valid_from = + chrono::NaiveDate::parse_from_str(updated_quary_valid_from_date, "%Y-%m-%d").unwrap(); + assert_eq!(current_date, updated_quary_valid_from); + } +} diff --git a/rust/core/Cargo.toml b/rust/core/Cargo.toml index 475f5f17..f21cb180 100644 --- a/rust/core/Cargo.toml +++ b/rust/core/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "quary-core" -version = "0.0.108" +version = "0.0.111" authors = ["Ben King <9087625+benfdking@users.noreply.github.com>"] edition = "2021" -rust-version = "1.77.1" +rust-version = "1.77.2" [lib] crate-type = ["cdylib", "rlib"] [dependencies] prost = { default-features = false, version = "0.12" } -sqlparser = { default-features = false, version = "0.44" } +sqlparser = { default-features = false, version = "0.45" } js-sys = "0.3" quary_proto = { path = "../../proto/gen/rust" } sqlinference = { path = "../sqlinference" } @@ -21,6 +21,7 @@ petgraph = { version = "0.6", default-features = false } regex = { version = "1", default-features = false, features = ["unicode-perl"] } once_cell = "1" async-trait = "0.1" +chrono = "0.4" serde_yaml = "0.9" serde_json = { default-features = false, version = "1", features = ["std"] } futures = { version = "0.3", features = ["async-await", "std"], default-features = false } diff --git a/rust/core/src/automatic_branching.rs b/rust/core/src/automatic_branching.rs index c7b77693..3eed0602 100644 --- a/rust/core/src/automatic_branching.rs +++ b/rust/core/src/automatic_branching.rs @@ -19,10 +19,10 @@ use std::collections::{BTreeMap, HashMap, HashSet}; /// to the database. The views have been created as materialized views to speed up any querying. /// This version of the project contains an original table (T) two views (V1 & V2) that depend on /// each other as following: -/// A -> V1 -> V2 +/// T -> V1 -> V2 /// /// Suppose now you want to alter V2 to V2' in a way that still maintains the dependencies: -/// A -> V1 -> V2' +/// T -> V1 -> V2' /// You are essentially branching off of the 'main' version and experimenting on V2. While /// experimenting, you probably want to rely on the materialized V1 to compare the results but also /// for the performance boost. Automatic branching is a querying that relies on already applied versions diff --git a/rust/core/src/database_duckdb.rs b/rust/core/src/database_duckdb.rs index b7efb598..23807c26 100644 --- a/rust/core/src/database_duckdb.rs +++ b/rust/core/src/database_duckdb.rs @@ -1,14 +1,35 @@ use crate::databases::{base_for_seeds_create_table_specifying_text_type, DatabaseQueryGenerator}; +use chrono::{DateTime, Utc}; +use quary_proto::snapshot::snapshot_strategy::StrategyType; use sqlinference::dialect::Dialect; +use std::time::SystemTime; #[derive(Debug, Clone)] pub struct DatabaseQueryGeneratorDuckDB { schema: Option, + /// override_now is used to override the current timestamp in the generated SQL. It is primarily + /// used for testing purposes. + override_now: Option, } impl DatabaseQueryGeneratorDuckDB { - pub fn new(schema: Option) -> DatabaseQueryGeneratorDuckDB { - DatabaseQueryGeneratorDuckDB { schema } + pub fn new( + schema: Option, + override_now: Option, + ) -> DatabaseQueryGeneratorDuckDB { + DatabaseQueryGeneratorDuckDB { + schema, + override_now, + } + } + + fn get_now(&self) -> String { + if let Some(override_now) = &self.override_now { + let datetime: DateTime = (*override_now).into(); + format!("'{}'", datetime.format("%Y-%m-%dT%H:%M:%SZ")) + } else { + "CURRENT_TIMESTAMP".to_string() + } } } @@ -18,6 +39,64 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorDuckDB { base_for_seeds_create_table_specifying_text_type("TEXT", table_name.as_str(), columns) } + fn generate_snapshot_sql( + &self, + path: &str, + templated_select: &str, + unique_key: &str, + strategy: &StrategyType, + ) -> Result, String> { + match strategy { + StrategyType::Timestamp(timestamp) => { + let updated_at = ×tamp.updated_at; + let now = self.get_now(); + + let create_table_sql = format!( + "CREATE TABLE IF NOT EXISTS {path} AS ( + SELECT + *, + {now} AS quary_valid_from, + CAST(NULL AS TIMESTAMP) AS quary_valid_to, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS STRING)) AS STRING)) AS quary_scd_id + FROM ({templated_select}) + )" + ); + + let update_sql = format!( + "UPDATE {path} AS target + SET quary_valid_to = source.quary_valid_from + FROM ( + SELECT + *, + {now} AS quary_valid_from, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS STRING)) AS STRING)) AS quary_scd_id + FROM ({templated_select}) + ) AS source + WHERE target.{unique_key} = source.{unique_key} + AND target.quary_valid_to IS NULL + AND CAST(source.{updated_at} AS TIMESTAMP) > CAST(target.{updated_at} AS TIMESTAMP)" + ); + + let insert_sql = format!( + "INSERT INTO {path} + SELECT + *, + {now} AS quary_valid_from, + NULL AS quary_valid_to, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS STRING)) AS STRING)) AS quary_scd_id + FROM ({templated_select}) AS source + WHERE NOT EXISTS ( + SELECT 1 + FROM {path} AS target + WHERE target.quary_scd_id = MD5(CAST(CONCAT(source.{unique_key}, CAST(source.{updated_at} AS STRING)) AS STRING)) + )" + ); + + Ok(vec![create_table_sql, update_sql, insert_sql]) + } + } + } + fn return_full_path_requirement(&self, table_name: &str) -> String { match &self.schema { Some(schema) => format!("{}.{}", schema, table_name), @@ -69,17 +148,18 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorDuckDB { #[cfg(test)] mod tests { + use super::*; #[test] fn test_return_full_path_requirement() { - let database = DatabaseQueryGeneratorDuckDB::new(None); + let database = DatabaseQueryGeneratorDuckDB::new(None, None); assert_eq!( database.return_full_path_requirement("table_name"), "table_name" ); - let database = DatabaseQueryGeneratorDuckDB::new(Some("schema".to_string())); + let database = DatabaseQueryGeneratorDuckDB::new(Some("schema".to_string()), None); assert_eq!( database.return_full_path_requirement("table_name"), "schema.table_name" @@ -88,15 +168,50 @@ mod tests { #[test] fn test_return_name_from_full_path() { - let database = DatabaseQueryGeneratorDuckDB::new(None); + let database = DatabaseQueryGeneratorDuckDB::new(None, None); let query = database.return_name_from_full_path("table_name"); assert_eq!(query, Ok("table_name")); - let database = DatabaseQueryGeneratorDuckDB::new(Some("schema".to_string())); + let database = DatabaseQueryGeneratorDuckDB::new(Some("schema".to_string()), None); let query = database.return_name_from_full_path("schema.table_name"); assert_eq!(query, Ok("table_name")); let query = database.return_name_from_full_path("error.table_name"); assert!(query.is_err()); } + + #[test] + fn test_get_now() { + let override_now = SystemTime::now(); + let database = DatabaseQueryGeneratorDuckDB::new(None, Some(override_now)); + + let result = database.get_now(); + let expected_datetime: DateTime = override_now.into(); + let expected_result = format!("'{}'", expected_datetime.format("%Y-%m-%dT%H:%M:%SZ")); + assert_eq!(result, expected_result); + + let database = DatabaseQueryGeneratorDuckDB::new(None, None); + let result = database.get_now(); + assert_eq!(result, "CURRENT_TIMESTAMP".to_string()); + } + + #[test] + fn test_generate_snapshot_sql() { + let database = DatabaseQueryGeneratorDuckDB::new(None, None); + let path = "mytable"; + let templated_select = "SELECT * FROM mytable"; + let unique_key = "id"; + let updated_at = "updated_at"; + let strategy = StrategyType::Timestamp( + quary_proto::snapshot::snapshot_strategy::TimestampStrategy { + updated_at: updated_at.to_string(), + }, + ); + + let result = database + .generate_snapshot_sql(path, templated_select, unique_key, &strategy) + .unwrap(); + + assert_eq!(result.iter().map(|s| s.as_str()).collect::>(), vec!["CREATE TABLE IF NOT EXISTS mytable AS (\n SELECT\n *,\n CURRENT_TIMESTAMP AS quary_valid_from,\n CAST(NULL AS TIMESTAMP) AS quary_valid_to,\n MD5(CAST(CONCAT(id, CAST(updated_at AS STRING)) AS STRING)) AS quary_scd_id\n FROM (SELECT * FROM mytable)\n )", "UPDATE mytable AS target\n SET quary_valid_to = source.quary_valid_from\n FROM (\n SELECT\n *,\n CURRENT_TIMESTAMP AS quary_valid_from,\n MD5(CAST(CONCAT(id, CAST(updated_at AS STRING)) AS STRING)) AS quary_scd_id\n FROM (SELECT * FROM mytable)\n ) AS source\n WHERE target.id = source.id\n AND target.quary_valid_to IS NULL\n AND CAST(source.updated_at AS TIMESTAMP) > CAST(target.updated_at AS TIMESTAMP)", "INSERT INTO mytable\n SELECT\n *,\n CURRENT_TIMESTAMP AS quary_valid_from,\n NULL AS quary_valid_to,\n MD5(CAST(CONCAT(id, CAST(updated_at AS STRING)) AS STRING)) AS quary_scd_id\n FROM (SELECT * FROM mytable) AS source\n WHERE NOT EXISTS (\n SELECT 1\n FROM mytable AS target\n WHERE target.quary_scd_id = MD5(CAST(CONCAT(source.id, CAST(source.updated_at AS STRING)) AS STRING))\n )"]); + } } diff --git a/rust/core/src/database_postgres.rs b/rust/core/src/database_postgres.rs index 9bfcca45..d8fda28a 100644 --- a/rust/core/src/database_postgres.rs +++ b/rust/core/src/database_postgres.rs @@ -1,14 +1,35 @@ use crate::databases::{base_for_seeds_create_table_specifying_text_type, DatabaseQueryGenerator}; +use chrono::{DateTime, Utc}; +use quary_proto::snapshot::snapshot_strategy::StrategyType; use sqlinference::dialect::Dialect; +use std::time::SystemTime; #[derive(Debug, Clone)] pub struct DatabaseQueryGeneratorPostgres { schema: String, + /// override_now is used to override the current timestamp in the generated SQL. It is primarily + /// used for testing purposes. + override_now: Option, } impl DatabaseQueryGeneratorPostgres { - pub fn new(schema: String) -> DatabaseQueryGeneratorPostgres { - DatabaseQueryGeneratorPostgres { schema } + pub fn new(schema: String, override_now: Option) -> DatabaseQueryGeneratorPostgres { + DatabaseQueryGeneratorPostgres { + schema, + override_now, + } + } + + fn get_now(&self) -> String { + if let Some(override_now) = &self.override_now { + let datetime: DateTime = (*override_now).into(); + format!( + "CAST('{}' AS TIMESTAMP WITH TIME ZONE)", + datetime.format("%Y-%m-%dT%H:%M:%SZ") + ) + } else { + "CURRENT_TIMESTAMP".to_string() + } } } @@ -95,6 +116,64 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorPostgres { base_for_seeds_create_table_specifying_text_type("TEXT", &table_name, columns) } + fn generate_snapshot_sql( + &self, + path: &str, + templated_select: &str, + unique_key: &str, + strategy: &StrategyType, + ) -> Result, String> { + match strategy { + StrategyType::Timestamp(timestamp) => { + let updated_at = ×tamp.updated_at; + let now = self.get_now(); + + let create_table_sql = format!( + "CREATE TABLE IF NOT EXISTS {path} AS ( + SELECT + ts.*, + {now} AS quary_valid_from, + CAST(NULL AS TIMESTAMP WITH TIME ZONE) AS quary_valid_to, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS TEXT)) AS TEXT)) AS quary_scd_id + FROM ({templated_select}) AS ts + )" + ); + + let update_sql = format!( + "UPDATE {path} AS target + SET quary_valid_to = source.quary_valid_from + FROM ( + SELECT + ts.*, + {now} AS quary_valid_from, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS TEXT)) AS TEXT)) AS quary_scd_id + FROM ({templated_select}) AS ts + ) AS source + WHERE target.{unique_key} = source.{unique_key} + AND target.quary_valid_to IS NULL + AND CAST(source.{updated_at} AS TIMESTAMP) > CAST(target.{updated_at} AS TIMESTAMP)" + ); + + let insert_sql = format!( + "INSERT INTO {path} + SELECT + *, + {now} AS quary_valid_from, + NULL AS quary_valid_to, + MD5(CAST(CONCAT({unique_key}, CAST({updated_at} AS TEXT)) AS TEXT)) AS quary_scd_id + FROM ({templated_select}) AS source + WHERE NOT EXISTS ( + SELECT 1 + FROM {path} AS target + WHERE target.quary_scd_id = MD5(CAST(CONCAT(source.{unique_key}, CAST(source.{updated_at} AS TEXT)) AS TEXT)) + )" + ); + + Ok(vec![create_table_sql, update_sql, insert_sql]) + } + } + } + fn return_full_path_requirement(&self, table_name: &str) -> String { format!("{}.{}", self.schema, table_name) } @@ -139,3 +218,28 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorPostgres { name.to_string() } } + +#[cfg(test)] +mod test { + #[test] + fn get_now() { + let generator = super::DatabaseQueryGeneratorPostgres::new("schema".to_string(), None); + let now = generator.get_now(); + assert_eq!(now, "CURRENT_TIMESTAMP".to_string()); + } + + #[test] + fn get_now_override() { + let generator = super::DatabaseQueryGeneratorPostgres::new( + "schema".to_string(), + Some(std::time::SystemTime::UNIX_EPOCH), + ); + let now = generator.get_now(); + assert_eq!( + now, + "CAST('1970-01-01T00:00:00Z' AS TIMESTAMP WITH TIME ZONE)".to_string() + ); + } + + // TODO MAKE SURE WE HAVE A TEST for sql generation +} diff --git a/rust/core/src/database_snowflake.rs b/rust/core/src/database_snowflake.rs index 2effa5d6..b262f870 100644 --- a/rust/core/src/database_snowflake.rs +++ b/rust/core/src/database_snowflake.rs @@ -1,4 +1,5 @@ use crate::databases::{base_for_seeds_create_table_specifying_text_type, DatabaseQueryGenerator}; +use quary_proto::snapshot::snapshot_strategy::StrategyType; use sqlinference::dialect::Dialect; #[derive(Debug, Clone)] @@ -31,6 +32,7 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorSnowflake { )), } } + fn models_drop_query( &self, object_name: &str, @@ -49,6 +51,7 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorSnowflake { _ => Err("Unsupported materialization type".to_string()), } } + fn models_create_query( &self, object_name: &str, @@ -73,11 +76,66 @@ impl DatabaseQueryGenerator for DatabaseQueryGeneratorSnowflake { _ => Err("Unsupported materialization type".to_string()), } } + fn seeds_create_table_query(&self, table_name: &str, columns: &[String]) -> String { let table_name = self.return_full_path_requirement(table_name); base_for_seeds_create_table_specifying_text_type("STRING", table_name.as_str(), columns) } + fn generate_snapshot_sql( + &self, + path: &str, + templated_select: &str, + unique_key: &str, + strategy: &StrategyType, + ) -> Result, String> { + match strategy { + StrategyType::Timestamp(timestamp) => { + let updated_at = ×tamp.updated_at; + let create_table_sql = format!( + "CREATE TABLE IF NOT EXISTS {path} AS ( + SELECT + *, + CURRENT_TIMESTAMP() AS quary_valid_from, + NULL AS quary_valid_to, + MD5(CONCAT({unique_key}, CAST({updated_at} AS VARCHAR))) AS quary_scd_id + FROM ({templated_select}) + )" + ); + let update_sql = format!( + "MERGE INTO {path} AS target + USING ( + SELECT + *, + CURRENT_TIMESTAMP() AS quary_valid_from, + MD5(CONCAT({unique_key}, CAST({updated_at} AS VARCHAR))) AS quary_scd_id + FROM ({templated_select}) + ) AS source + ON target.{unique_key} = source.{unique_key} + WHEN MATCHED AND target.quary_valid_to IS NULL AND source.{updated_at} > target.{updated_at} + THEN UPDATE SET + quary_valid_to = source.quary_valid_from, + {updated_at} = source.{updated_at}" + ); + let insert_sql = format!( + "INSERT INTO {path} + SELECT + *, + CURRENT_TIMESTAMP() AS quary_valid_from, + NULL AS quary_valid_to, + MD5(CONCAT({unique_key}, CAST({updated_at} AS VARCHAR))) AS quary_scd_id + FROM ({templated_select}) AS source + WHERE NOT EXISTS ( + SELECT 1 + FROM {path} AS target + WHERE target.quary_scd_id = MD5(CONCAT(source.{unique_key}, CAST(source.{updated_at} AS VARCHAR))) + )" + ); + Ok(vec![create_table_sql, update_sql, insert_sql]) + } + } + } + fn return_full_path_requirement(&self, table_name: &str) -> String { format!("{}.{}.{}", self.database, self.schema, table_name) } @@ -241,4 +299,27 @@ mod tests { assert!(validate_snowfalke_account_identifier(identifier).is_err()); } } + + #[test] + fn test_generate_snapshot_sql() { + let database = DatabaseQueryGeneratorSnowflake::new( + "QUARY_DATABASE".to_string(), + "QUARY_SCHEMA".to_string(), + ); + let path = "mytable"; + let templated_select = "SELECT * FROM mytable"; + let unique_key = "id"; + let updated_at = "updated_at"; + let strategy = StrategyType::Timestamp( + quary_proto::snapshot::snapshot_strategy::TimestampStrategy { + updated_at: updated_at.to_string(), + }, + ); + + let result = database + .generate_snapshot_sql(path, templated_select, unique_key, &strategy) + .unwrap(); + + assert_eq!(result.iter().map(|s| s.as_str()).collect::>(), vec!["CREATE TABLE IF NOT EXISTS mytable AS (\n SELECT\n *,\n CURRENT_TIMESTAMP() AS quary_valid_from,\n NULL AS quary_valid_to,\n MD5(CONCAT(id, CAST(updated_at AS VARCHAR))) AS quary_scd_id\n FROM (SELECT * FROM mytable)\n )", "MERGE INTO mytable AS target\n USING (\n SELECT\n *,\n CURRENT_TIMESTAMP() AS quary_valid_from,\n MD5(CONCAT(id, CAST(updated_at AS VARCHAR))) AS quary_scd_id\n FROM (SELECT * FROM mytable)\n ) AS source\n ON target.id = source.id\n WHEN MATCHED AND target.quary_valid_to IS NULL AND source.updated_at > target.updated_at\n THEN UPDATE SET\n quary_valid_to = source.quary_valid_from,\n updated_at = source.updated_at", "INSERT INTO mytable\n SELECT\n *,\n CURRENT_TIMESTAMP() AS quary_valid_from,\n NULL AS quary_valid_to,\n MD5(CONCAT(id, CAST(updated_at AS VARCHAR))) AS quary_scd_id\n FROM (SELECT * FROM mytable) AS source\n WHERE NOT EXISTS (\n SELECT 1\n FROM mytable AS target\n WHERE target.quary_scd_id = MD5(CONCAT(source.id, CAST(source.updated_at AS VARCHAR)))\n )"]); + } } diff --git a/rust/core/src/databases.rs b/rust/core/src/databases.rs index d26a2fe1..17e8e712 100644 --- a/rust/core/src/databases.rs +++ b/rust/core/src/databases.rs @@ -1,4 +1,5 @@ use async_trait::async_trait; +use quary_proto::snapshot::snapshot_strategy::StrategyType; use quary_proto::TableAddress; use sqlinference::dialect::Dialect; use std::fmt::Debug; @@ -112,6 +113,26 @@ pub trait DatabaseQueryGenerator: Debug + Sync { seed_value.replace('\'', "''") } + /// GenerateSnapshotSQL generates the SQL statements to create a snapshot of a table. + /// + /// Inputs: + /// - `path`: The path of the snapshot table to be created. + /// - `templated_select`: The templated SELECT statement used to build the snapshot table. This means: + /// - The raw SELECT statement has been normalised (i.e. ; have been stripped as a suffix) + /// - The variables referenced in the SELECT statement have been replaced with the values defined in the quary.yaml file + /// - The q. references have been replaced with the underlying path of the referenced seed or source + /// - `unique_key`: The column that uniquely identify each row in the snapshot source table. + /// - `strategy`: The snapshot strategy to be used (e.g., timestamp) + fn generate_snapshot_sql( + &self, + _path: &str, + _templated_select: &str, + _unique_key: &str, + _strategy: &StrategyType, + ) -> Result, String> { + Err("Database does not support snapshots".to_string()) + } + // For Helpers section /// ReturnFullPathRequirement takes in the name of the target table and prefixes it with any necessary schema/paths @@ -188,6 +209,17 @@ impl DatabaseQueryGenerator for Box { self.as_ref().escape_seed_value(seed_value) } + fn generate_snapshot_sql( + &self, + path: &str, + select_query: &str, + unique_key: &str, + strategy: &StrategyType, + ) -> Result, String> { + self.as_ref() + .generate_snapshot_sql(path, select_query, unique_key, strategy) + } + fn return_full_path_requirement(&self, table_name: &str) -> String { self.as_ref().return_full_path_requirement(table_name) } diff --git a/rust/core/src/graph.rs b/rust/core/src/graph.rs index a58129e1..563decab 100644 --- a/rust/core/src/graph.rs +++ b/rust/core/src/graph.rs @@ -10,7 +10,7 @@ use petgraph::prelude::EdgeRef; use petgraph::visit::{Dfs, Reversed}; use petgraph::Graph; use quary_proto::test::TestType; -use quary_proto::{Model, Project, Test}; +use quary_proto::{Model, Project, Snapshot, Test}; use std::collections::{HashMap, HashSet}; /// Edge represents an edge with (from, to) node names. @@ -33,6 +33,25 @@ pub fn project_to_graph(project: Project) -> Result { safe_adder_set(&mut taken, name.clone())?; } + let mut snapshots: HashMap = HashMap::new(); + for (name, snapshot) in &project.snapshots { + safe_adder_set(&mut taken, name.clone())?; + snapshots.insert(snapshot.name.clone(), snapshot.clone()); + } + for (name, snapshot) in &project.snapshots { + for reference in &snapshot.references { + if !taken.contains(reference) { + return Err(format!( + "reference to {} in snapshot {} does not exist in reference-able objects {}", + reference, + name, + Vec::from_iter(taken).join(", "), + )); + }; + edges.push((reference.clone(), snapshot.name.clone())) + } + } + let mut models: HashMap = HashMap::new(); for (name, model) in &project.models { safe_adder_set(&mut taken, name.clone())?; @@ -838,7 +857,7 @@ mod tests { } #[test] - fn test_return_parent_nods_to_apply_in_order() { + fn test_return_parent_nodes_to_apply_in_order() { let tests = vec![ // ("empty", "a", vec![], vec![]), ("single_node", "a", vec![["a", "b"]], vec!["a"]), diff --git a/rust/core/src/init/models/schema.yaml b/rust/core/src/init/models/schema.yaml index 3b40038b..6c52a7c5 100644 --- a/rust/core/src/init/models/schema.yaml +++ b/rust/core/src/init/models/schema.yaml @@ -76,6 +76,8 @@ models: - type: not_null - name: shifts_by_month description: 'This is a transformation for shifts and contains the total number of shifts for each employee by month.' + tags: + - monthly tests: - type: multi_column_unique info: diff --git a/rust/core/src/init_duckdb/models/schema.yaml b/rust/core/src/init_duckdb/models/schema.yaml index 3b40038b..6c52a7c5 100644 --- a/rust/core/src/init_duckdb/models/schema.yaml +++ b/rust/core/src/init_duckdb/models/schema.yaml @@ -76,6 +76,8 @@ models: - type: not_null - name: shifts_by_month description: 'This is a transformation for shifts and contains the total number of shifts for each employee by month.' + tags: + - monthly tests: - type: multi_column_unique info: diff --git a/rust/core/src/project.rs b/rust/core/src/project.rs index 34d16ea2..18f01629 100644 --- a/rust/core/src/project.rs +++ b/rust/core/src/project.rs @@ -14,13 +14,14 @@ use crate::test_helpers::ToTest; use crate::tests::test_to_name; use futures::AsyncReadExt; use quary_proto::model::ModelColum; +use quary_proto::snapshot::SnapshotStrategy; use quary_proto::test::TestType::{ AcceptedValues, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, MultiColumnUnique, NotNull, Relationship, Sql, Unique, }; use quary_proto::{ - Model, Project, ProjectFile, ProjectFileColumn, Seed, Source, Test, TestAcceptedValues, - TestGreaterThan, TestGreaterThanOrEqual, TestLessThan, TestLessThanOrEqual, + ConnectionConfig, Model, Project, ProjectFile, ProjectFileColumn, Seed, Snapshot, Source, Test, + TestAcceptedValues, TestGreaterThan, TestGreaterThanOrEqual, TestLessThan, TestLessThanOrEqual, TestMultiColumnUnique, TestNotNull, TestRelationship, TestSqlFile, TestUnique, }; use sqlinference::infer_tests::{get_column_with_source, ExtractedSelect}; @@ -177,16 +178,30 @@ pub async fn parse_project( .flat_map(|(_, project_file)| project_file.models.clone()) .collect(); let model_definitions = all_models - .iter() - .map(|m| (m.name.clone(), m.clone())) + .into_iter() + .map(|m| (m.name.clone(), m)) .collect(); let models = parse_models(filesystem, project_root, &model_definitions).await?; validate_models(&models)?; + let all_snapshots: Vec = project_files + .iter() + .flat_map(|(_, project_file)| project_file.snapshots.clone()) + .collect(); + let project_file_snapshot_definitions = all_snapshots + .into_iter() + .map(|s| (s.name.clone(), s)) + .collect(); + + let snapshots = + parse_snapshots(filesystem, project_root, &project_file_snapshot_definitions).await?; + validate_models(&snapshots)?; + let path_map = create_path_map( database, - models.values().collect::>().clone(), - sources.values().collect::>().clone(), + models.values().collect::>(), + sources.values().collect::>(), + snapshots.values().collect::>(), ); let tests = parse_tests( filesystem, @@ -203,15 +218,30 @@ pub async fn parse_project( if !models.contains_key(reference) && !sources.contains_key(reference) && !seeds.contains_key(reference) + && !snapshots.contains_key(reference) { return Err(format!( - "model {:?} has reference to {:?} which is not a model or source", + "model {:?} has reference to {:?} which is not a model, source or snapshot", model.name, reference )); } } } + // Check that snapshots only reference sources or seeds and not models + for snapshot in snapshots.values() { + for reference in &snapshot.references { + if models.contains_key(reference) + || (!sources.contains_key(reference) && !seeds.contains_key(reference)) + { + return Err(format!( + "snapshot {:?} has reference to {:?} which is not a source or seed", + snapshot.name, reference + )); + } + } + } + // Check that all tests refer to actual models for test in tests.values() { if let Some(Sql(sql)) = &test.test_type { @@ -219,9 +249,10 @@ pub async fn parse_project( if !models.contains_key(reference) && !sources.contains_key(reference) && !seeds.contains_key(reference) + && !snapshots.contains_key(reference) { return Err(format!( - "test {:?} has reference to {:?} which is not a model or source", + "test {:?} has reference to {:?} which is not a model, source or snapshot", test, reference )); } @@ -235,7 +266,7 @@ pub async fn parse_project( seeds, models: models.into_iter().collect(), sources, - snapshots: HashMap::new(), //todo: implement snapshots + snapshots: snapshots.into_iter().collect(), tests: tests.into_iter().collect(), project_files, connection_config: Some(connection_config), @@ -273,7 +304,14 @@ async fn parse_sql_tests( file_system: &impl FileSystem, project_root: &str, ) -> Result, String> { - let paths = get_path_bufs(file_system, project_root, PATH_FOR_TESTS, EXTENSION_SQL).await?; + let paths = get_path_bufs( + file_system, + project_root, + PATH_FOR_TESTS, + EXTENSION_SQL, + None, + ) + .await?; let tests = paths .iter() @@ -338,6 +376,7 @@ pub fn create_path_map( database: &impl DatabaseQueryGenerator, models: Vec<&Model>, sources: Vec<&Source>, + snapshots: Vec<&Snapshot>, ) -> PathMap { let model_entries = models.iter().map(|model| { ( @@ -348,14 +387,33 @@ pub fn create_path_map( let source_entries = sources .iter() .map(|source| (source.name.to_string(), source.path.to_string())); - model_entries.chain(source_entries).collect() + let snapshot_entries = snapshots.iter().map(|snapshot| { + ( + snapshot.name.to_string(), + database.return_full_path_requirement(&snapshot.name), + ) + }); + model_entries + .chain(source_entries) + .chain(snapshot_entries) + .collect() } +/// get_path_bufs returns a list of paths to files in a folder with a particular extension of +/// interest. It also allows for an optional suffix to be ignored. +/// +/// For example, if you have a folder with the following files: +/// - file1.sql +/// - file2.sql +/// - file3.snapshot.sql +/// The function would return a list of paths to file1.sql and file2.sql if the extension of +/// interest is 'sql' and the ignore suffix is 'snapshot.sql'. async fn get_path_bufs( filesystem: &impl FileSystem, project_root: &str, folder: &str, extension_of_interest: &str, + ignore_suffix: Option<&str>, ) -> Result, String> { let mut out = PathBuf::from(project_root); out.push(folder); @@ -371,7 +429,10 @@ async fn get_path_bufs( .map(PathBuf::from) .collect::>() .iter() - .filter(|path: &&PathBuf| path.extension() == Some(OsStr::new(extension_of_interest))) + .filter(|path: &&PathBuf| { + path.extension() == Some(OsStr::new(extension_of_interest)) + && ignore_suffix.map_or(true, |suffix| !path.to_string_lossy().ends_with(suffix)) + }) .map(|path| Ok(path.clone())) .collect() } @@ -379,9 +440,16 @@ async fn get_path_bufs( async fn parse_models( filesystem: &impl FileSystem, project_root: &str, - model_definitions: &ModelDefinition, + model_definitions: &ProjectFileModelDefinitions, ) -> Result, String> { - let paths = get_path_bufs(filesystem, project_root, PATH_FOR_MODELS, EXTENSION_SQL).await?; + let paths = get_path_bufs( + filesystem, + project_root, + PATH_FOR_MODELS, + EXTENSION_SQL, + Some(EXTENSION_SNAPSHOT_SQL), + ) + .await?; let models = paths .iter() @@ -408,10 +476,156 @@ async fn parse_models( Ok(model_map) } +type ProjectFileSnapshotDefinitions = HashMap; + +async fn parse_snapshots( + filesystem: &impl FileSystem, + project_root: &str, + project_file_snapshot_definitions: &ProjectFileSnapshotDefinitions, +) -> Result, String> { + let paths = get_path_bufs( + filesystem, + project_root, + PATH_FOR_MODELS, + EXTENSION_SQL, + None, + ) + .await? + .into_iter() + .filter(|path| { + path.to_str() + .unwrap_or("") + .ends_with(EXTENSION_SNAPSHOT_SQL) + }) + .collect::>(); + + let snapshots = paths + .iter() + .map(|path| async move { + parse_snapshot( + filesystem, + project_file_snapshot_definitions, + path.to_str() + .ok_or(format!("Could not parse snapshot path: {:?}", path))?, + ) + .await + }) + .collect::>(); + let snapshots = futures::future::join_all(snapshots) + .await + .into_iter() + .collect::, _>>()?; + + let mut snapshot_map = BTreeMap::::new(); + for snapshot in snapshots { + safe_adder_map(&mut snapshot_map, snapshot.name.clone(), snapshot)?; + } + + Ok(snapshot_map) +} + +async fn parse_snapshot( + file_system: &impl FileSystem, + project_file_snapshot_definitions: &ProjectFileSnapshotDefinitions, + sql_path: &str, +) -> Result { + let path_buf = Path::new(sql_path); + let name = path_buf + .file_stem() + .ok_or_else(|| format!("Could not parse snapshot name from path: {:?}", path_buf))?; + let name = name + .to_str() + .ok_or(format!( + "Could not parse snapshot name from path: {:?}", + path_buf + ))? + .to_string(); + let name = name.trim_end_matches(".snapshot").to_string(); + + let snapshot_definition = project_file_snapshot_definitions.get(&name).ok_or(format!( + "Could not find snapshot definition for snapshot: {}", + name + ))?; + + let description = snapshot_definition.description.clone(); + let tags = snapshot_definition.tags.clone(); + let unique_key = snapshot_definition.unique_key.clone(); + let strategy = snapshot_definition + .strategy + .clone() + .ok_or(format!("Could not find strategy for snapshot: {}", name))?; + let strategy = match strategy.strategy_type { + Some(quary_proto::project_file::snapshot_strategy::StrategyType::Timestamp(timestamp)) => { + Ok(SnapshotStrategy { + strategy_type: Some( + quary_proto::snapshot::snapshot_strategy::StrategyType::Timestamp( + quary_proto::snapshot::snapshot_strategy::TimestampStrategy { + updated_at: timestamp.updated_at.clone(), + }, + ), + ), + }) + } + _ => Err(format!("Invalid strategy type for snapshot: {}", name)), + }?; + + let mut file = file_system + .read_file(sql_path) + .await + .map_err(|e| format!("failed to read file: {:?}", e))?; + let mut contents = String::new(); + file.read_to_string(&mut contents) + .await + .map_err(|e| format!("failed to read string: {:?}", e))?; + + let contents = remove_sql_comments(&contents); + + let reference_search = return_reference_search(DEFAULT_SCHEMA_PREFIX) + .map_err(|e| format!("Could not parse reference search from schema name: {:?}", e))?; + let references: Vec = reference_search + .captures_iter(&contents) + .map(|cap| { + cap.iter() + .map(|m| { + Ok(m.ok_or(format!( + "Could not parse reference search from schema name: {:?}", + m + ))? + .as_str() + .to_string()) + }) + .skip(1) + .step_by(2) + .collect::, String>>() + }) + .collect::>, String>>()? + .into_iter() + .flatten() + .collect::>() + .into_iter() + .collect(); + + let file_sha256_hash = derive_sha256_file_contents(file_system, sql_path).await?; + + if references.contains(&name) { + return Err(format!("snapshot {} has a reference to itself", name)); + } + Ok(Snapshot { + name, + description, + tags, + unique_key, + file_sha256_hash, + strategy: Some(strategy), + file_path: sql_path.to_string(), + references, + }) +} + /// validate_models checks that the model names are valid. The checks it perrgo forms are: /// - model names cannot start with 'qqq' as this is reserved for internal use /// - model names cannot contain spaces -fn validate_models(models: &BTreeMap) -> Result<(), String> { +fn validate_models(models: &BTreeMap) -> Result<(), String> { if let Some(invalid) = models.keys().find(|name| name.starts_with("qqq")) { return Err(format!("model name {:?} starts with 'qqq'", invalid)); } @@ -421,11 +635,11 @@ fn validate_models(models: &BTreeMap) -> Result<(), String> { Ok(()) } -pub type ModelDefinition = HashMap; +type ProjectFileModelDefinitions = HashMap; async fn parse_model( file_system: &impl FileSystem, - model_definitions: &ModelDefinition, + project_file_model_definitions: &ProjectFileModelDefinitions, sql_path: &str, ) -> Result { let path_buf = Path::new(sql_path); @@ -441,7 +655,7 @@ async fn parse_model( ))? .to_string(); - let model_definition = model_definitions.get(&name); + let model_definition = project_file_model_definitions.get(&name); let description = model_definition .map(|model| model.description.clone()) .unwrap_or(None); @@ -518,7 +732,14 @@ async fn parse_seeds<'a>( filesystem: &'a impl FileSystem, project_root: &'a str, ) -> Result, String> { - let paths = get_path_bufs(filesystem, project_root, PATH_FOR_SEEDS, EXTENSION_CSV).await?; + let paths = get_path_bufs( + filesystem, + project_root, + PATH_FOR_SEEDS, + EXTENSION_CSV, + None, + ) + .await?; let seeds = paths .iter() @@ -554,7 +775,14 @@ pub async fn parse_project_files( project_root: &str, database: &impl DatabaseQueryGenerator, // Map of full path to project file and project file ) -> Result, String> { - let paths = get_path_bufs(filesystem, project_root, PATH_FOR_MODELS, EXTENSION_YAML).await?; + let paths = get_path_bufs( + filesystem, + project_root, + PATH_FOR_MODELS, + EXTENSION_YAML, + None, + ) + .await?; let project_files = paths .iter() @@ -1067,6 +1295,78 @@ pub async fn project_and_fs_to_sql_for_views( Ok(seeds_out) } +/// Generates SQL statements for snapshots based on the project and file system. +pub async fn project_and_fs_to_sql_for_snapshots( + project: &Project, + file_system: &impl FileSystem, + database: &impl DatabaseQueryGenerator, +) -> Result)>, String> { + let snapshots_out = project.snapshots.values().map(|snapshot| async move { + let connection_config = project + .connection_config + .clone() + .ok_or("missing connection config")?; + let sql_statements = + generate_snapshot_sql(&connection_config, project, database, file_system, snapshot) + .await?; + Ok::<(String, Vec), String>((snapshot.name.clone(), sql_statements)) + }); + + let snapshots_out: Vec<_> = futures::future::join_all(snapshots_out) + .await + .into_iter() + .collect::>()?; + Ok(snapshots_out) +} + +/// Generates SQL statements for a specific snapshot. +async fn generate_snapshot_sql( + connection_config: &ConnectionConfig, + project: &Project, + database: &impl DatabaseQueryGenerator, + file_system: &impl FileSystem, + snapshot: &Snapshot, +) -> Result, String> { + let snapshot_strategy = snapshot + .strategy + .clone() + .ok_or("missing snapshot strategy")? + .strategy_type + .ok_or("missing strategy type")?; + let snapshot_path = database.return_full_path_requirement(&snapshot.name); + let file = file_system + .read_file(&snapshot.file_path) + .await + .map_err(|e| { + format!( + "failed to read file {:?} with error {:?}", + &snapshot.file_path, e + ) + })?; + let raw_query = read_normalise_model(file).await?; + let vars_replaced_select_statement = + replace_variable_templates_with_variable_defined_in_config(&raw_query, connection_config)?; + + let sources = &project.sources; + let name_replacing_strategy = move |s: ®ex::Captures| { + let replaced = replace_reference_string_found_with_database(sources, &database)(s); + let replaced = replaced.trim(); + format!(" {}", replaced) + }; + + let reference_search = + return_reference_search(DEFAULT_SCHEMA_PREFIX).map_err(|e| e.to_string())?; + let templated_select = + reference_search.replace_all(&vars_replaced_select_statement, name_replacing_strategy); + + database.generate_snapshot_sql( + &snapshot_path, + &templated_select, + &snapshot.unique_key, + &snapshot_strategy, + ) +} + /// convertToSelectStatements takes in an array of model/seed and returns a string that can be used in a select statement. /// It also replaces any q.references with the actual name that is in the select. It uses no views. /// @@ -1242,7 +1542,7 @@ async fn render_model_select_statement( pub fn replace_variable_templates_with_variable_defined_in_config( sql: &str, - connection_config: &quary_proto::ConnectionConfig, + connection_config: &ConnectionConfig, ) -> Result { let re = regex::Regex::new(r"\{\{\s*var\('([^']+)'\)\s*\}\}").map_err(|e| e.to_string())?; @@ -1331,6 +1631,7 @@ struct NodeWithName { const EXTENSION_CSV: &str = "csv"; const EXTENSION_YAML: &str = "yaml"; const EXTENSION_SQL: &str = "sql"; +const EXTENSION_SNAPSHOT_SQL: &str = ".snapshot.sql"; pub(crate) const PATH_FOR_SEEDS: &str = "seeds"; pub const PATH_FOR_MODELS: &str = "models"; @@ -1448,7 +1749,8 @@ mod test { }] .into_iter() .map(|m| (m.name.clone(), m)) - .collect::>() as ModelDefinition; + .collect::>() + as ProjectFileModelDefinitions; let model = parse_model(&file_system, &model_definitions, "models/test.sql") .await @@ -1462,6 +1764,39 @@ mod test { assert_eq!(model.references[1], "stg_shifts"); } + #[tokio::test] + async fn test_parse_models_excludes_snapshots() { + let file_system = quary_proto::FileSystem { + files: vec![ + ( + "models/orders.sql".to_string(), + quary_proto::File { + name: "models/orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ] + .into_iter() + .collect(), + }; + let model_definitions = HashMap::new(); + + let models = parse_models(&file_system, "", &model_definitions) + .await + .unwrap(); + + assert_eq!(models.len(), 1); + assert!(models.contains_key("orders")); + assert!(!models.contains_key("orders_snapshot")); + } + #[tokio::test] async fn test_parse_project_on_init() { let database = DatabaseQueryGeneratorSqlite::default(); @@ -2296,7 +2631,7 @@ sources: #[test] fn test_replace_variable_with_config_variables() { - let connection_config = quary_proto::ConnectionConfig { + let connection_config = ConnectionConfig { config: Default::default(), vars: vec![ quary_proto::Var { @@ -2376,6 +2711,347 @@ models: parse_project(&file_system, &database, "").await.unwrap(); } + #[tokio::test] + async fn test_parse_project_with_snapshots() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + snapshots: + - name: orders_snapshot + description: Some snapshot description + unique_key: id + strategy: + timestamp: + updated_at: updated_at + ", + ), + }, + ), + ]), + }; + + let expected_snapshot = Snapshot { + name: "orders_snapshot".to_string(), + description: Some("Some snapshot description".to_string()), + tags: vec![], + unique_key: "id".to_string(), + file_sha256_hash: "9560ffc874f8bafc47ab8a6c531574e16f890ab7f0269b738256dce7a2a8d41d" + .to_string(), + strategy: Some(SnapshotStrategy { + strategy_type: Some( + quary_proto::snapshot::snapshot_strategy::StrategyType::Timestamp( + quary_proto::snapshot::snapshot_strategy::TimestampStrategy { + updated_at: "updated_at".to_string(), + }, + ), + ), + }), + references: vec!["raw_orders".to_string()], + file_path: "models/orders_snapshot.snapshot.sql".to_string(), + }; + + let project = parse_project(&fs, &database, "").await.unwrap(); + + assert_eq!(project.snapshots.len(), 1); + assert_eq!(project.snapshots["orders_snapshot"], expected_snapshot); + } + + #[tokio::test] + async fn test_parse_project_with_snapshots_invalid_model_reference() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/stg_orders.sql".to_string(), + quary_proto::File { + name: "models/stg_orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.stg_orders"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + models: + - name: stg_orders + snapshots: + - name: orders_snapshot + unique_key: id + strategy: + timestamp: + updated_at: updated_at + ", + ), + }, + ), + ]), + }; + + let parse_project_result = parse_project(&fs, &database, "").await; + assert_eq!(Err("snapshot \"orders_snapshot\" has reference to \"stg_orders\" which is not a source or seed".to_string()), parse_project_result) + } + + #[tokio::test] + async fn test_parse_project_with_snapshots_invalid_self_reference() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/stg_orders.sql".to_string(), + quary_proto::File { + name: "models/stg_orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.orders_snapshot"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + models: + - name: stg_orders + snapshots: + - name: orders_snapshot + unique_key: id + strategy: + timestamp: + updated_at: updated_at + ", + ), + }, + ), + ]), + }; + + let parse_project_result = parse_project(&fs, &database, "").await; + assert_eq!( + Err("snapshot orders_snapshot has a reference to itself".to_string()), + parse_project_result + ) + } + + #[tokio::test] + async fn test_parse_project_with_snapshots_undefined_source() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/stg_orders.sql".to_string(), + quary_proto::File { + name: "models/stg_orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_random"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + models: + - name: stg_orders + snapshots: + - name: orders_snapshot + unique_key: id + strategy: + timestamp: + updated_at: updated_at + ", + ), + }, + ), + ]), + }; + + let parse_project_result = parse_project(&fs, &database, "").await; + assert_eq!( + Err("snapshot \"orders_snapshot\" has reference to \"raw_random\" which is not a source or seed".to_string()), + parse_project_result + ) + } + + #[tokio::test] + async fn test_parse_project_with_snapshots_missing_definition_in_project_files() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/stg_orders.sql".to_string(), + quary_proto::File { + name: "models/stg_orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_random"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + models: + - name: stg_orders + ", + ), + }, + ), + ]), + }; + + let parse_project_result = parse_project(&fs, &database, "").await; + assert_eq!( + Err("Could not find snapshot definition for snapshot: orders_snapshot".to_string()), + parse_project_result + ) + } + + #[tokio::test] + async fn test_parse_project_with_snapshots_missing_strategy_in_definition_in_project_files() { + let database = DatabaseQueryGeneratorSqlite::default(); + let fs = quary_proto::FileSystem { + files: HashMap::from([ + ( + "quary.yaml".to_string(), + quary_proto::File { + name: "quary.yaml".to_string(), + contents: prost::bytes::Bytes::from("sqliteInMemory: {}".as_bytes()), + }, + ), + ( + "models/stg_orders.sql".to_string(), + quary_proto::File { + name: "models/stg_orders.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_orders"), + }, + ), + ( + "models/orders_snapshot.snapshot.sql".to_string(), + quary_proto::File { + name: "models/orders_snapshot.snapshot.sql".to_string(), + contents: prost::bytes::Bytes::from("SELECT * FROM q.raw_random"), + }, + ), + ( + "models/schema.yaml".to_string(), + quary_proto::File { + name: "models/schema.yaml".to_string(), + contents: prost::bytes::Bytes::from( + " + sources: + - name: raw_orders + path: raw_orders_source + models: + - name: stg_orders + snapshots: + - name: orders_snapshot + unique_key: id + ", + ), + }, + ), + ]), + }; + + let parse_project_result = parse_project(&fs, &database, "").await; + assert_eq!( + Err("Could not find strategy for snapshot: orders_snapshot".to_string()), + parse_project_result + ) + } + // TODO Reinstate after making get_node_sorted completely deterministic // #[test] // fn test_project_and_fs_to_sql_for_views() { diff --git a/rust/core/src/project_file.rs b/rust/core/src/project_file.rs index 7736833f..1a831f54 100644 --- a/rust/core/src/project_file.rs +++ b/rust/core/src/project_file.rs @@ -57,6 +57,8 @@ mod tests { }], snapshots: vec![Snapshot { name: "orders_snapshot".to_string(), + description: Some("test description for snapshot".to_string()), + tags: vec![], unique_key: "id".to_string(), strategy: Some(SnapshotStrategy { strategy_type: Some(snapshot_strategy::StrategyType::Timestamp( diff --git a/rust/core/src/project_tests.rs b/rust/core/src/project_tests.rs index bae1a7a0..01f829b7 100644 --- a/rust/core/src/project_tests.rs +++ b/rust/core/src/project_tests.rs @@ -237,6 +237,7 @@ pub async fn return_tests_sql( database, project.models.values().collect(), project.sources.values().collect(), + project.snapshots.values().collect(), ); let reference_search = return_reference_search(DEFAULT_SCHEMA_PREFIX) .map_err(|e| format!("failed to return reference search: {}", e))?; diff --git a/rust/dbt-converter/Cargo.toml b/rust/dbt-converter/Cargo.toml index 69c34ad2..33e8c636 100644 --- a/rust/dbt-converter/Cargo.toml +++ b/rust/dbt-converter/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "dbt-converter" -version = "0.0.108" +version = "0.0.111" edition = "2021" -rust-version = "1.77.1" +rust-version = "1.77.2" [dependencies] serde_yaml = "0.9" diff --git a/rust/quary-databases/Cargo.toml b/rust/quary-databases/Cargo.toml index c7c220c7..b74e535b 100644 --- a/rust/quary-databases/Cargo.toml +++ b/rust/quary-databases/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "quary-databases" -version = "0.0.108" +version = "0.0.111" edition = "2021" -rust-version = "1.77.1" +rust-version = "1.77.2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -11,15 +11,16 @@ yup-oauth2 = { version = "8", default-features = false } quary-core = { path = "../core" } quary_proto = { path = "../../proto/gen/rust" } tokio = { version = "1", features = ["full"] } -sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "postgres"] } +sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "postgres", "chrono"] } async-trait = "0.1" gcp-bigquery-client = "0.18" prost = "0.12" -google-cloud-auth = { version = "0.13", default-features = false, features = ["external-account", "rustls-tls"] } +google-cloud-auth = { version = "0.14", default-features = false, features = ["external-account", "rustls-tls"] } snowflake-api = { path = "../snowflake-api" } -arrow-array = "50" +arrow-array = "51" duckdb = { version = "0.10", features = ["bundled"] } regex = "1.10.4" +chrono = "0.4" [dev-dependencies] assert_cmd = "2" diff --git a/rust/quary-databases/src/databases_connection.rs b/rust/quary-databases/src/databases_connection.rs index 779757b1..f7a65512 100644 --- a/rust/quary-databases/src/databases_connection.rs +++ b/rust/quary-databases/src/databases_connection.rs @@ -93,8 +93,6 @@ pub async fn database_from_config( PostgresConfig(config) => { let host = env::var("PGHOST") .map_err(|_| "PGHOST must be set to connect to Postgres".to_string())?; - let port = env::var("PGPORT") - .map_err(|_| "PGPORT must be set to connect to Postgres".to_string())?; let user = env::var("PGUSER") .map_err(|_| "PGUSER must be set to connect to Postgres".to_string())?; let password = env::var("PGPASSWORD") @@ -102,6 +100,11 @@ pub async fn database_from_config( let database = env::var("PGDATABASE") .map_err(|_| "PGDATABASE must be set to connect to Postgres".to_string())?; + let port = if let Ok(port) = env::var("PGPORT") { + Some(port) + } else { + None + }; let ssl_mode = if let Ok(ssl_mode) = env::var("PGSSLMODE") { Some(ssl_mode.to_string()) } else { @@ -122,10 +125,15 @@ pub async fn database_from_config( } else { None }; + let channel_binding = if let Ok(channel_binding) = env::var("PGCHANNELBINDING") { + Some(channel_binding.to_string()) + } else { + None + }; let database = Postgres::new( &host, - &port, + port, &user, &password, &database, @@ -134,6 +142,7 @@ pub async fn database_from_config( ssl_cert, ssl_key, ssl_root_cert, + channel_binding, ) .await .map_err(|e| e.to_string())?; @@ -167,13 +176,18 @@ pub fn database_query_generator_from_config( config.database, config.schema, ))), - Some(Duckdb(config)) => Ok(Box::new(DatabaseQueryGeneratorDuckDB::new(config.schema))), - Some(DuckdbInMemory(config)) => { - Ok(Box::new(DatabaseQueryGeneratorDuckDB::new(config.schema))) - } - Some(PostgresConfig(config)) => { - Ok(Box::new(DatabaseQueryGeneratorPostgres::new(config.schema))) - } + Some(Duckdb(config)) => Ok(Box::new(DatabaseQueryGeneratorDuckDB::new( + config.schema, + None, + ))), + Some(DuckdbInMemory(config)) => Ok(Box::new(DatabaseQueryGeneratorDuckDB::new( + config.schema, + None, + ))), + Some(PostgresConfig(config)) => Ok(Box::new(DatabaseQueryGeneratorPostgres::new( + config.schema, + None, + ))), _ => Err("not implemented".to_string()), } } diff --git a/rust/quary-databases/src/databases_duckdb.rs b/rust/quary-databases/src/databases_duckdb.rs index cf1caab7..a66221a2 100644 --- a/rust/quary-databases/src/databases_duckdb.rs +++ b/rust/quary-databases/src/databases_duckdb.rs @@ -1,4 +1,5 @@ -use duckdb::arrow::array::array; +use chrono::{DateTime, Utc}; +use duckdb::arrow::array::{array, Array}; use duckdb::arrow::record_batch::RecordBatch; use duckdb::{params, Connection}; use quary_core::database_duckdb::DatabaseQueryGeneratorDuckDB; @@ -48,12 +49,16 @@ impl DuckDB { schema, }) } + + fn default_schema() -> &'static str { + "main" + } } #[async_trait::async_trait] impl DatabaseConnection for DuckDB { async fn list_tables(&self) -> Result, String> { - let results = self.query("SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ORDER BY table_name") + let results = self.query("SELECT table_schema, table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ORDER BY table_schema, table_name") .await .map_err( |e| format!("Failed to get tables from DuckDB: {:?}", e))?; @@ -62,17 +67,13 @@ impl DatabaseConnection for DuckDB { .into_iter() .map(|row| TableAddress { name: row[0].clone(), - full_path: if let Some(schema) = &self.schema { - format!("{}.{}", schema, row[0].clone()) - } else { - row[0].clone() - }, + full_path: format!("{}.{}", row[0].clone(), row[1].clone()), }) .collect()) } async fn list_views(&self) -> Result, String> { - let results = self.query("SELECT table_name FROM information_schema.tables WHERE table_type='VIEW' ORDER BY table_name") + let results = self.query("SELECT table_schema, table_name FROM information_schema.tables WHERE table_type='VIEW' ORDER BY table_schema, table_name") .await .map_err( |e| format!("Failed to get views from DuckDB: {:?}", e), @@ -82,31 +83,21 @@ impl DatabaseConnection for DuckDB { .into_iter() .map(|row| TableAddress { name: row[0].clone(), - full_path: if let Some(schema) = &self.schema { - format!("{}.{}", schema, row[0].clone()) - } else { - row[0].clone() - }, + full_path: format!("{}.{}", row[0].clone(), row[1].clone()), }) .collect()) } async fn list_local_tables(&self) -> Result, String> { - let results = if let Some(schema) = &self.schema { + let schema = self + .schema + .clone() + .unwrap_or(DuckDB::default_schema().to_string()); + let results = self.query(&format!( "SELECT table_name FROM information_schema.tables WHERE table_schema = '{}' AND table_type='BASE TABLE' ORDER BY table_name", schema - )) - .await - .map_err( - |e| format!("Failed to get tables from DuckDB: {:?}", e)) - ? - } else { - self.query("SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ORDER BY table_name") - .await .map_err( - |e| format!("Failed to get tables from DuckDB: {:?}", e)) - ? - }; + )).await.map_err(|e| format!("Failed to get views from DuckDB: {:?}", e))?; Ok(results .rows .into_iter() @@ -122,23 +113,15 @@ impl DatabaseConnection for DuckDB { } async fn list_local_views(&self) -> Result, String> { - let results = if let Some(schema) = &self.schema { + let schema = self + .schema + .clone() + .unwrap_or(DuckDB::default_schema().to_string()); + let results = self.query(&format!( "SELECT table_name FROM information_schema.tables WHERE table_schema = '{}' AND table_type='VIEW' ORDER BY table_name", schema - )) - .await - .map_err( - |e| format!("Failed to get views from DuckDB: {:?}", e), - ) - ? - } else { - self.query("SELECT table_name FROM information_schema.tables WHERE table_type='VIEW' ORDER BY table_name") - .await - .map_err( - |e| format!("Failed to get views from DuckDB: {:?}", e), - )? - }; + )).await.map_err(|e| format!("Failed to get views from DuckDB: {:?}", e))?; Ok(results .rows .into_iter() @@ -227,13 +210,11 @@ impl DatabaseConnection for DuckDB { } fn query_generator(&self) -> Box { - Box::new(DatabaseQueryGeneratorDuckDB::new(self.schema.clone())) + Box::new(DatabaseQueryGeneratorDuckDB::new(self.schema.clone(), None)) } } -fn convert_array_to_vec_string( - array: &[Arc], -) -> Result>, String> { +fn convert_array_to_vec_string(array: &[Arc]) -> Result>, String> { let num_rows = array[0].len(); let num_columns = array.len(); let mut rows = Vec::with_capacity(num_rows); @@ -264,8 +245,24 @@ fn convert_array_to_vec_string( rows[i][j] = date_array.value(i).to_string(); } else if let Some(date_array) = array.as_any().downcast_ref::() { rows[i][j] = date_array.value(i).to_string(); + } else if let Some(timestamp_array) = array + .as_any() + .downcast_ref::() + { + if timestamp_array.is_null(i) { + rows[i][j] = "NULL".to_string(); + } else { + let timestamp_micros = timestamp_array.value(i); + let datetime_utc = DateTime::::from_timestamp( + timestamp_micros / 1_000_000, + (timestamp_micros % 1_000_000) as u32 * 1_000, + ) + .ok_or("error converting timestamp to datetime")?; + rows[i][j] = datetime_utc.format("%Y-%m-%d %H:%M:%S%.6f %Z").to_string(); + } } else { - return Err("Unsupported array type".to_string()); + let array_type = array.data_type(); + return Err(format!("Unsupported array type: {:?}", array_type)); } } } @@ -277,10 +274,14 @@ fn convert_array_to_vec_string( #[cfg(test)] mod tests { use super::*; + use chrono::{DateTime, NaiveDateTime, Utc}; use prost::bytes::Bytes; - use quary_core::project::{parse_project, project_and_fs_to_sql_for_views}; + use quary_core::project::{ + parse_project, project_and_fs_to_sql_for_snapshots, project_and_fs_to_sql_for_views, + }; use quary_core::project_tests::return_tests_sql; use quary_proto::{File, FileSystem}; + use std::time::SystemTime; #[tokio::test] async fn test_create_table_without_schema() { @@ -749,4 +750,410 @@ sources: assert_eq!(results.rows.len(), 0, "test {} failed: {}", name, test); } } + + #[tokio::test] + async fn test_snapshots_with_schema() { + // Create orders table + + let target_schema = Some("analytics".to_string()); + let database = DuckDB::new_in_memory(target_schema.clone()).unwrap(); + database.exec("CREATE SCHEMA jaffle_shop").await.unwrap(); + + let datetime_str = "2023-01-01 01:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime = NaiveDateTime::parse_from_str(datetime_str, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc = DateTime::::from_utc(naive_datetime, Utc); + + // Convert DateTime to SystemTime + let system_time = SystemTime::from(datetime_utc); + + let db_generator = + DatabaseQueryGeneratorDuckDB::new(target_schema.clone(), Some(system_time)); + + // Create orders table + database + .exec("CREATE TABLE jaffle_shop.raw_orders (order_id INTEGER, status VARCHAR(255), updated_at TIMESTAMP)") + .await + .unwrap(); + + // Insert some initial data + database + .exec("INSERT INTO jaffle_shop.raw_orders VALUES (1, 'in_progress', '2023-01-01 00:00:00'), (2, 'completed', '2023-01-01 00:00:00')") + .await + .unwrap(); + + let file_system = FileSystem { + files: vec![ + ("quary.yaml", "duckdbInMemory: {schema: analytics}"), + ( + "models/orders_snapshot.snapshot.sql", + "SELECT * FROM q.raw_orders", + ), + ( + "models/schema.yaml", + " +sources: + - name: raw_orders + path: jaffle_shop.raw_orders +snapshots: + - name: orders_snapshot + unique_key: order_id + strategy: + timestamp: + updated_at: updated_at +", + ), + ] + .iter() + .map(|(k, v)| { + ( + k.to_string(), + File { + name: k.to_string(), + contents: Bytes::from(v.to_string()), + }, + ) + }) + .collect(), + }; + + let project = parse_project(&file_system, &db_generator, "") + .await + .unwrap(); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator) + .await + .unwrap(); + for (_, sql) in snapshots_sql { + for statement in sql { + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database.query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM analytics.orders_snapshot").await.unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "2", + "completed", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + + database + .exec("UPDATE jaffle_shop.raw_orders SET status = 'completed', updated_at = '2023-01-01 02:00:00' WHERE order_id = 1") + .await + .unwrap(); + + let datetime_str_updated = "2023-01-01 03:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime_updated = + NaiveDateTime::parse_from_str(datetime_str_updated, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc_updated = DateTime::::from_utc(naive_datetime_updated, Utc); + + // Convert DateTime to SystemTime + let system_time_updated = SystemTime::from(datetime_utc_updated); + + let db_generator_updated = + DatabaseQueryGeneratorDuckDB::new(target_schema, Some(system_time_updated)); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator_updated) + .await + .unwrap(); + + for (_, sql) in &snapshots_sql { + for statement in sql { + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database.query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM analytics.orders_snapshot ORDER BY order_id, quary_valid_from").await.unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "2023-01-01 03:00:00.000000 UTC", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "1", + "completed", + "2023-01-01 02:00:00.000000 UTC", + "2023-01-01T03:00:00Z", + "NULL", + "f5c7798e30814925cd1a61e9e5ef6683" + ], + vec![ + "2", + "completed", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + } + + #[tokio::test] + async fn test_snapshots_without_schema() { + // Create orders table + + let target_schema = None; + let database = DuckDB::new_in_memory(target_schema.clone()).unwrap(); + database.exec("CREATE SCHEMA jaffle_shop").await.unwrap(); + + let datetime_str = "2023-01-01 01:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime = NaiveDateTime::parse_from_str(datetime_str, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc = DateTime::::from_utc(naive_datetime, Utc); + + // Convert DateTime to SystemTime + let system_time = SystemTime::from(datetime_utc); + + let db_generator = + DatabaseQueryGeneratorDuckDB::new(target_schema.clone(), Some(system_time)); + + // Create orders table + database + .exec("CREATE TABLE jaffle_shop.raw_orders (order_id INTEGER, status VARCHAR(255), updated_at TIMESTAMP)") + .await + .unwrap(); + + // Insert some initial data + database + .exec("INSERT INTO jaffle_shop.raw_orders VALUES (1, 'in_progress', '2023-01-01 00:00:00'), (2, 'completed', '2023-01-01 00:00:00')") + .await + .unwrap(); + + let file_system = FileSystem { + files: vec![ + ("quary.yaml", "duckdbInMemory: {schema: analytics}"), + ( + "models/orders_snapshot.snapshot.sql", + "SELECT * FROM q.raw_orders", + ), + ( + "models/schema.yaml", + " +sources: + - name: raw_orders + path: jaffle_shop.raw_orders +snapshots: + - name: orders_snapshot + unique_key: order_id + strategy: + timestamp: + updated_at: updated_at +", + ), + ] + .iter() + .map(|(k, v)| { + ( + k.to_string(), + File { + name: k.to_string(), + contents: Bytes::from(v.to_string()), + }, + ) + }) + .collect(), + }; + + let project = parse_project(&file_system, &db_generator, "") + .await + .unwrap(); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator) + .await + .unwrap(); + for (_, sql) in snapshots_sql { + for statement in sql { + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database.query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM orders_snapshot").await.unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "2", + "completed", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + + database + .exec("UPDATE jaffle_shop.raw_orders SET status = 'completed', updated_at = '2023-01-01 02:00:00' WHERE order_id = 1") + .await + .unwrap(); + + let datetime_str_updated = "2023-01-01 03:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime_updated = + NaiveDateTime::parse_from_str(datetime_str_updated, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc_updated = DateTime::::from_utc(naive_datetime_updated, Utc); + + // Convert DateTime to SystemTime + let system_time_updated = SystemTime::from(datetime_utc_updated); + + let db_generator_updated = + DatabaseQueryGeneratorDuckDB::new(target_schema, Some(system_time_updated)); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator_updated) + .await + .unwrap(); + + for (_, sql) in &snapshots_sql { + for statement in sql { + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database.query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM orders_snapshot ORDER BY order_id, quary_valid_from").await.unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "2023-01-01 03:00:00.000000 UTC", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "1", + "completed", + "2023-01-01 02:00:00.000000 UTC", + "2023-01-01T03:00:00Z", + "NULL", + "f5c7798e30814925cd1a61e9e5ef6683" + ], + vec![ + "2", + "completed", + "2023-01-01 00:00:00.000000 UTC", + "2023-01-01T01:00:00Z", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + } } diff --git a/rust/quary-databases/src/databases_postgres.rs b/rust/quary-databases/src/databases_postgres.rs index 879dbd4f..27521c1f 100644 --- a/rust/quary-databases/src/databases_postgres.rs +++ b/rust/quary-databases/src/databases_postgres.rs @@ -1,11 +1,13 @@ use async_trait::async_trait; +use chrono::{DateTime, Utc}; use quary_core::database_postgres::DatabaseQueryGeneratorPostgres; use quary_core::databases::{ ColumnWithDetails, DatabaseConnection, DatabaseQueryGenerator, QueryError, QueryResult, }; use quary_proto::TableAddress; -use sqlx::postgres::PgPoolOptions; +use sqlx::postgres::{PgPoolOptions, PgRow}; use sqlx::{Column, Pool, Row}; +use sqlx::{Error, TypeInfo}; use std::collections::HashMap; use std::fmt::Debug; @@ -18,7 +20,7 @@ pub struct Postgres { impl Postgres { pub async fn new( host: &str, - port: &str, + port: Option, user: &str, password: &str, database: &str, @@ -27,12 +29,14 @@ impl Postgres { ssl_cert: Option, ssl_key: Option, ssl_root_cert: Option, - ) -> Result { + channel_binding: Option, + ) -> Result { let params = HashMap::from([ ("sslmode", ssl_mode), ("sslcert", ssl_cert), ("sslkey", ssl_key), ("sslrootcert", ssl_root_cert), + ("channel_binding", channel_binding), ]) .into_iter() .filter_map(|(k, v)| v.map(|v| (k, v))) @@ -46,6 +50,7 @@ impl Postgres { } else { Some(format!("?{}", params.join("&"))) }; + let port = port.unwrap_or("5432".to_string()); let connection_string = format!( "postgres://{}:{}@{}:{}/{}{}", @@ -65,95 +70,70 @@ impl Postgres { } } +impl Postgres { + async fn list_table_like_query(&self, where_clause: &str) -> Result, String> { + let query = format!( + "SELECT + CASE + WHEN table_schema <> lower(table_schema) THEN '\"' || table_schema || '\"' + ELSE table_schema + END AS table_schema, + CASE + WHEN table_name <> lower(table_name) THEN '\"' || table_name || '\"' + ELSE table_name + END AS table_name + FROM information_schema.tables + WHERE {} + ORDER BY table_schema, table_name", + where_clause + ); + + let rows = sqlx::query(query.as_str()) + .fetch_all(&self.pool) + .await + .map_err(|e| e.to_string())?; + + rows.into_iter() + .map(|row| { + let table_schema: String = row + .try_get(0) + .map_err(|e| format!("Error getting table schema: {}", e.to_string()))?; + let table_name: String = row + .try_get(1) + .map_err(|e| format!("Error getting table name: {}", e.to_string()))?; + + Ok(TableAddress { + name: table_name.clone(), + full_path: format!("{}.{}", table_schema, table_name), + }) + }) + .collect() + } +} + #[async_trait] impl DatabaseConnection for Postgres { async fn list_tables(&self) -> Result, String> { - let rows = sqlx::query( - " -SELECT table_name, table_schema -FROM information_schema.tables -WHERE table_type = 'BASE TABLE' AND table_schema != 'information_schema' AND table_schema != 'pg_catalog' -ORDER BY table_schema ASC, table_name ASC", - ) - .fetch_all(&self.pool) - .await - .map_err(|e| e.to_string())?; - let mut tables = Vec::new(); - for row in rows { - let table_name: String = row.get(0); - let table_schema: String = row.get(1); - tables.push(TableAddress { - name: table_name.clone(), - full_path: format!("{}.{}", table_schema, table_name), - }); - } - Ok(tables) + let where_clause = "table_type = 'BASE TABLE' AND table_schema != 'information_schema' AND table_schema != 'pg_catalog'"; + self.list_table_like_query(where_clause).await } async fn list_views(&self) -> Result, String> { - let rows = sqlx::query( - " -SELECT table_name, table_schema -FROM information_schema.tables -WHERE table_type = 'VIEW' AND table_schema != 'information_schema' AND table_schema != 'pg_catalog' -ORDER BY table_schema ASC, table_name ASC", - ) - .fetch_all(&self.pool) - .await - .map_err(|e| e.to_string())?; - let mut tables = Vec::new(); - for row in rows { - let table_name: String = row.get(0); - let table_schema: String = row.get(1); - tables.push(TableAddress { - name: table_name.clone(), - full_path: format!("{}.{}", table_schema, table_name), - }); - } - Ok(tables) + let where_clause = "table_type = 'VIEW' AND table_schema != 'information_schema' AND table_schema != 'pg_catalog'"; + self.list_table_like_query(where_clause).await } async fn list_local_tables(&self) -> Result, String> { - let rows = sqlx::query( - format!("SELECT table_name, table_schema FROM information_schema.tables WHERE table_schema = '{}' AND table_type = 'BASE TABLE' ORDER BY table_schema DESC, table_name DESC", - self.schema).as_str(), - ) - .fetch_all(&self.pool) - .await - .map_err(|e| e.to_string())?; - - let mut tables = Vec::new(); - - for row in rows { - let table_name: String = row.get(0); - let table_schema: String = row.get(1); - tables.push(TableAddress { - name: table_name.clone(), - full_path: format!("{}.{}", table_schema, table_name), - }); - } - Ok(tables) + let where_clause = format!( + "table_schema = '{}' AND table_type = 'BASE TABLE'", + self.schema + ); + self.list_table_like_query(where_clause.as_str()).await } async fn list_local_views(&self) -> Result, String> { - let rows = sqlx::query( - format!("SELECT table_name, table_schema FROM information_schema.tables WHERE table_schema = '{}' AND table_type = 'VIEW' ORDER BY table_schema DESC, table_name DESC", self.schema).as_str(), - ) - .fetch_all(&self.pool) - .await - .map_err(|e| e.to_string())?; - - let mut tables = Vec::new(); - - for row in rows { - let table_name: String = row.get(0); - let table_schema: String = row.get(1); - tables.push(TableAddress { - name: table_name.clone(), - full_path: format!("{}.{}", table_schema, table_name), - }); - } - Ok(tables) + let where_clause = format!("table_schema = '{}' AND table_type = 'VIEW'", self.schema); + self.list_table_like_query(where_clause.as_str()).await } async fn list_columns(&self, table: &str) -> Result, String> { @@ -169,7 +149,10 @@ ORDER BY table_schema ASC, table_name ASC", let rows = sqlx::query(&format!( " SELECT - c.column_name, + CASE + WHEN c.column_name <> lower(c.column_name) THEN '\"' || c.column_name || '\"' + ELSE c.column_name + END AS column_name, pgd.description AS column_comment, c.is_nullable, CASE @@ -251,18 +234,62 @@ ORDER BY table_schema ASC, table_name ASC", .collect::>(); let mut rows_vec = Vec::>::new(); + + fn convert_value_to_string(row: &PgRow, i: usize) -> Result { + let type_name = row.column(i).type_info().name(); + let value: Option = match type_name { + "INT4" => { + let value = row.try_get::, _>(i)?.map(|v| v.to_string()); + value + } + "INT8" => { + let value = row.try_get::, _>(i)?.map(|v| v.to_string()); + value + } + "FLOAT8" => { + let value = row.try_get::, _>(i)?.map(|v| v.to_string()); + value + } + "BOOL" => { + let value = row.try_get::, _>(i)?.map(|v| v.to_string()); + value + } + "TIMESTAMP" => { + let value = row + .try_get::, _>(i)? + .map(|v| v.format("%Y-%m-%dT%H:%M:%S").to_string()); + value + } + "TIMESTAMPTZ" => { + let value = row + .try_get::>, _>(i)? + .map(|v| v.to_rfc3339()); + value + } + "TEXT" => { + let value = row.try_get::, _>(i)?; + value + } + "VARCHAR" => { + let value = row.try_get::, _>(i)?; + value + } + _ => Some(format!("Unsupported type: {}", type_name)), + }; + match value { + Some(value) => Ok(value), + None => Ok("NULL".to_string()), + } + } + for row in rows { let mut row_vec = Vec::new(); for i in 0..row.len() { - // Attempt to get the value as an i32, if it fails, try as a String - let value: String = if let Ok(val) = row.try_get::(i) { - val.to_string() - } else { - row.try_get::(i) - .unwrap_or_else(|_| String::from("")) - }; + let value: String = convert_value_to_string(&row, i) + .map_err(|e| QueryError::new(e.to_string(), query.to_string()))?; row_vec.push(value); } + rows_vec.push(row_vec); } @@ -273,17 +300,24 @@ ORDER BY table_schema ASC, table_name ASC", } fn query_generator(&self) -> Box { - Box::new(DatabaseQueryGeneratorPostgres::new(self.schema.clone())) + Box::new(DatabaseQueryGeneratorPostgres::new( + self.schema.clone(), + None, + )) } } #[cfg(test)] mod tests { use super::*; + use chrono::{DateTime, NaiveDateTime, Utc}; use prost::bytes::Bytes; - use quary_core::project::{parse_project, project_and_fs_to_sql_for_views}; + use quary_core::project::{ + parse_project, project_and_fs_to_sql_for_snapshots, project_and_fs_to_sql_for_views, + }; use quary_core::project_tests::return_tests_sql; use quary_proto::{File, FileSystem}; + use std::time::SystemTime; use testcontainers::{clients, RunnableImage}; use testcontainers_modules::postgres::Postgres as TestcontainersPostgres; @@ -297,7 +331,7 @@ mod tests { let quary_postgres = Postgres::new( "localhost", - &pg_port.to_string(), + Some(pg_port.to_string()), "postgres", "postgres", "postgres", @@ -306,6 +340,7 @@ mod tests { None, None, None, + None, ) .await .expect("Failed to instantiate Quary Postgres"); @@ -339,14 +374,14 @@ mod tests { assert_eq!( tables, vec![ - TableAddress { - name: "wrong_table".to_string(), - full_path: "public.wrong_table".to_string(), - }, TableAddress { name: "test_table".to_string(), full_path: "public.test_table".to_string(), }, + TableAddress { + name: "wrong_table".to_string(), + full_path: "public.wrong_table".to_string(), + }, ] ); @@ -354,14 +389,14 @@ mod tests { assert_eq!( views, vec![ - TableAddress { - name: "wrong_view".to_string(), - full_path: "public.wrong_view".to_string(), - }, TableAddress { name: "test_view".to_string(), full_path: "public.test_view".to_string(), }, + TableAddress { + name: "wrong_view".to_string(), + full_path: "public.wrong_view".to_string(), + }, ] ); @@ -406,7 +441,7 @@ mod tests { let database = Postgres::new( "localhost", - &pg_port.to_string(), + Some(pg_port.to_string()), "postgres", "postgres", "postgres", @@ -415,6 +450,7 @@ mod tests { None, None, None, + None, ) .await .expect("Failed to instantiate Quary Postgres"); @@ -484,7 +520,7 @@ mod tests { let database = Postgres::new( "localhost", - &pg_port.to_string(), + Some(pg_port.to_string()), "postgres", "postgres", "postgres", @@ -493,6 +529,7 @@ mod tests { None, None, None, + None, ) .await .expect("Failed to instantiate Quary Postgres"); @@ -608,7 +645,7 @@ models: let database = Postgres::new( "localhost", - &pg_port.to_string(), + Some(pg_port.to_string()), "postgres", "postgres", "postgres", @@ -617,6 +654,7 @@ models: None, None, None, + None, ) .await .expect("Failed to instantiate Quary Postgres"); @@ -755,7 +793,7 @@ models: let database = Postgres::new( "localhost", - &pg_port.to_string(), + Some(pg_port.to_string()), "postgres", "postgres", "postgres", @@ -764,6 +802,7 @@ models: None, None, None, + None, ) .await .expect("Failed to instantiate Quary Postgres"); @@ -817,4 +856,298 @@ models: ] ); } + + #[tokio::test] + async fn test_list_columns_with_case_sensitive_columns() { + let docker = clients::Cli::default(); + let postgres_image = RunnableImage::from(TestcontainersPostgres::default()); + let pg_container = docker.run(postgres_image); + let pg_port = pg_container.get_host_port_ipv4(5432); + + let database = Postgres::new( + "localhost", + Some(pg_port.to_string()), + "postgres", + "postgres", + "postgres", + "transform", + None, + None, + None, + None, + None, + ) + .await + .unwrap(); + + database.exec("CREATE SCHEMA transform").await.unwrap(); + database + .exec("CREATE TABLE transform.test_table (\"ID\" INTEGER, \"Name\" VARCHAR(255), test VARCHAR(255), TESTTWO VARCHAR(255))") + .await + .unwrap(); + + let columns = database.list_columns("transform.test_table").await.unwrap(); + assert_eq!( + columns, + vec![ + ColumnWithDetails { + name: "\"ID\"".to_string(), + description: None, + data_type: None, + is_nullable: Some(true), + is_unique: Some(false), + }, + ColumnWithDetails { + name: "\"Name\"".to_string(), + description: None, + data_type: None, + is_nullable: Some(true), + is_unique: Some(false), + }, + ColumnWithDetails { + name: "test".to_string(), + description: None, + data_type: None, + is_nullable: Some(true), + is_unique: Some(false), + }, + ColumnWithDetails { + name: "testtwo".to_string(), + description: None, + data_type: None, + is_nullable: Some(true), + is_unique: Some(false), + } + ] + ); + } + + #[tokio::test] + async fn test_snapshots_with_schema() { + let schema = "analytics"; + + let docker = clients::Cli::default(); + let postgres_image = RunnableImage::from(TestcontainersPostgres::default()); + let pg_container = docker.run(postgres_image); + let pg_port = pg_container.get_host_port_ipv4(5432); + let database = Postgres::new( + "localhost", + Some(pg_port.to_string()), + "postgres", + "postgres", + "postgres", + schema, + None, + None, + None, + None, + None, + ) + .await + .unwrap(); + + database.exec("CREATE SCHEMA analytics").await.unwrap(); + database.exec("CREATE SCHEMA jaffle_shop").await.unwrap(); + + let datetime_str = "2023-01-01 01:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime = NaiveDateTime::parse_from_str(datetime_str, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc = DateTime::::from_utc(naive_datetime, Utc); + + // Convert DateTime to SystemTime + let system_time = SystemTime::from(datetime_utc); + + let db_generator = + DatabaseQueryGeneratorPostgres::new(schema.to_string(), Some(system_time)); + + // Create orders table + database + .exec("CREATE TABLE jaffle_shop.raw_orders (order_id INTEGER, status VARCHAR(255), updated_at TIMESTAMP)") + .await + .unwrap(); + + // Insert some initial data + database + .exec("INSERT INTO jaffle_shop.raw_orders VALUES (1, 'in_progress', '2023-01-01 00:00:00'), (2, 'completed', '2023-01-01 00:00:00')") + .await + .unwrap(); + + let file_system = FileSystem { + files: vec![ + ("quary.yaml", "postgres: {schema: analytics}"), + ( + "models/orders_snapshot.snapshot.sql", + "SELECT * FROM q.raw_orders", + ), + ( + "models/schema.yaml", + " +sources: + - name: raw_orders + path: jaffle_shop.raw_orders +snapshots: + - name: orders_snapshot + unique_key: order_id + strategy: + timestamp: + updated_at: updated_at +", + ), + ] + .iter() + .map(|(k, v)| { + ( + k.to_string(), + File { + name: k.to_string(), + contents: Bytes::from(v.to_string()), + }, + ) + }) + .collect(), + }; + + let project = parse_project(&file_system, &db_generator, "") + .await + .unwrap(); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator) + .await + .unwrap(); + for (_, sql) in snapshots_sql { + for statement in sql { + println!("{}", statement.as_str()); + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database + .query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM analytics.orders_snapshot ORDER BY order_id, quary_valid_from") + .await + .unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01T00:00:00", + "2023-01-01T01:00:00+00:00", + "NULL", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "2", + "completed", + "2023-01-01T00:00:00", + "2023-01-01T01:00:00+00:00", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + + database + .exec("UPDATE jaffle_shop.raw_orders SET status = 'completed', updated_at = CAST('2023-01-01 02:00:00' AS TIMESTAMP) WHERE order_id = 1") + .await + .unwrap(); + + let datetime_str_updated = "2023-01-01 03:00:00"; + + // Parse the string into a NaiveDateTime + let naive_datetime_updated = + NaiveDateTime::parse_from_str(datetime_str_updated, "%Y-%m-%d %H:%M:%S") + .expect("Failed to parse datetime string"); + + // Convert NaiveDateTime to DateTime + let datetime_utc_updated = DateTime::::from_utc(naive_datetime_updated, Utc); + + // Convert DateTime to SystemTime + let system_time_updated = SystemTime::from(datetime_utc_updated); + + let db_generator_updated = + DatabaseQueryGeneratorPostgres::new(schema.to_string(), Some(system_time_updated)); + + let snapshots_sql = + project_and_fs_to_sql_for_snapshots(&project, &file_system, &db_generator_updated) + .await + .unwrap(); + + for (_, sql) in &snapshots_sql { + for statement in sql { + database.exec(statement.as_str()).await.unwrap() + } + } + + // assert the data has been created correctly in the snapshot table + let data = database + .query("SELECT order_id, status, updated_at, quary_valid_from, quary_valid_to, quary_scd_id FROM analytics.orders_snapshot ORDER BY order_id, quary_valid_from") + .await + .unwrap(); + + assert_eq!( + data.columns + .iter() + .map(|(column, _)| column) + .collect::>(), + vec![ + "order_id", + "status", + "updated_at", + "quary_valid_from", + "quary_valid_to", + "quary_scd_id" + ] + ); + assert_eq!( + data.rows, + vec![ + vec![ + "1", + "in_progress", + "2023-01-01T00:00:00", + "2023-01-01T01:00:00+00:00", + "2023-01-01T03:00:00+00:00", + "77f50225cf5a52d15fecaa449be2dcc4" + ], + vec![ + "1", + "completed", + "2023-01-01T02:00:00", + "2023-01-01T03:00:00+00:00", + "NULL", + "f5c7798e30814925cd1a61e9e5ef6683" + ], + vec![ + "2", + "completed", + "2023-01-01T00:00:00", + "2023-01-01T01:00:00+00:00", + "NULL", + "3bb5cc6bb5b432df7712d067f57a3780" + ], + ] + ); + } } diff --git a/rust/quary-databases/src/lib.rs b/rust/quary-databases/src/lib.rs index 490b35db..9e46c3e6 100644 --- a/rust/quary-databases/src/lib.rs +++ b/rust/quary-databases/src/lib.rs @@ -1,6 +1,6 @@ mod databases_bigquery; pub mod databases_connection; -mod databases_duckdb; +pub mod databases_duckdb; mod databases_postgres; mod databases_snowflake; mod databases_sqlite; diff --git a/rust/snowflake-api/Cargo.toml b/rust/snowflake-api/Cargo.toml index b81ca7a5..2755314d 100644 --- a/rust/snowflake-api/Cargo.toml +++ b/rust/snowflake-api/Cargo.toml @@ -19,7 +19,7 @@ cert-auth = ["dep:snowflake-jwt"] polars = ["dep:polars-core", "dep:polars-io"] [dependencies] -arrow = "50" +arrow = "51" async-trait = "0.1" base64 = "0.22" bytes = "1" @@ -46,7 +46,7 @@ polars-core = { version = ">=0.32", optional = true} [dev-dependencies] anyhow = "1" -arrow = { version = "50", features = ["prettyprint"] } +arrow = { version = "51", features = ["prettyprint"] } clap = { version = "4", features = ["derive"] } pretty_env_logger = "0.5" tokio = { version = "1", features = ["macros", "rt-multi-thread"] } diff --git a/rust/sqlinference/Cargo.toml b/rust/sqlinference/Cargo.toml index 85512e51..301818f1 100644 --- a/rust/sqlinference/Cargo.toml +++ b/rust/sqlinference/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "sqlinference" -version = "0.0.108" +version = "0.0.111" edition = "2021" -rust-version = "1.77.1" +rust-version = "1.77.2" [lib] [dependencies] -sqlparser = { default-features = false, version = "0.44" } +sqlparser = { default-features = false, version = "0.45" }